aboutsummaryrefslogtreecommitdiffstats
path: root/lib/tv
diff options
context:
space:
mode:
authorErlang/OTP <[email protected]>2009-11-20 14:54:40 +0000
committerErlang/OTP <[email protected]>2009-11-20 14:54:40 +0000
commit84adefa331c4159d432d22840663c38f155cd4c1 (patch)
treebff9a9c66adda4df2106dfd0e5c053ab182a12bd /lib/tv
downloadotp-84adefa331c4159d432d22840663c38f155cd4c1.tar.gz
otp-84adefa331c4159d432d22840663c38f155cd4c1.tar.bz2
otp-84adefa331c4159d432d22840663c38f155cd4c1.zip
The R13B03 release.OTP_R13B03
Diffstat (limited to 'lib/tv')
-rw-r--r--lib/tv/AUTHORS5
-rw-r--r--lib/tv/Makefile35
-rw-r--r--lib/tv/doc/html/.gitignore0
-rw-r--r--lib/tv/doc/man3/.gitignore0
-rw-r--r--lib/tv/doc/pdf/.gitignore0
-rw-r--r--lib/tv/doc/src/Makefile221
-rw-r--r--lib/tv/doc/src/book.xml48
-rw-r--r--lib/tv/doc/src/fascicules.xml19
-rw-r--r--lib/tv/doc/src/info_window.gifbin0 -> 6315 bytes
-rw-r--r--lib/tv/doc/src/info_window.ps814
-rw-r--r--lib/tv/doc/src/make.dep32
-rw-r--r--lib/tv/doc/src/note.gifbin0 -> 1539 bytes
-rw-r--r--lib/tv/doc/src/notes.xml182
-rw-r--r--lib/tv/doc/src/part.xml40
-rw-r--r--lib/tv/doc/src/part_notes.xml40
-rw-r--r--lib/tv/doc/src/ref_man.xml40
-rw-r--r--lib/tv/doc/src/set_poll_int.gifbin0 -> 2789 bytes
-rw-r--r--lib/tv/doc/src/set_poll_int.ps483
-rw-r--r--lib/tv/doc/src/table_visualizer_chapter.xml652
-rw-r--r--lib/tv/doc/src/tv.gifbin0 -> 17015 bytes
-rw-r--r--lib/tv/doc/src/tv.xml66
-rw-r--r--lib/tv/doc/src/tv_create_table.gifbin0 -> 6211 bytes
-rw-r--r--lib/tv/doc/src/tv_create_table.ps1120
-rw-r--r--lib/tv/doc/src/tv_record_editor_mnesia.gifbin0 -> 4982 bytes
-rw-r--r--lib/tv/doc/src/tv_record_editor_mnesia.ps897
-rw-r--r--lib/tv/doc/src/tv_row_marked.gifbin0 -> 12354 bytes
-rw-r--r--lib/tv/doc/src/tv_row_marked.ps1611
-rw-r--r--lib/tv/doc/src/tv_row_marked_popup.gifbin0 -> 13216 bytes
-rw-r--r--lib/tv/doc/src/tv_row_marked_popup.ps1324
-rw-r--r--lib/tv/doc/src/tv_search_result.gifbin0 -> 23525 bytes
-rw-r--r--lib/tv/doc/src/tv_search_result.ps2739
-rw-r--r--lib/tv/doc/src/tv_search_window.gifbin0 -> 5054 bytes
-rw-r--r--lib/tv/doc/src/tv_search_window.ps975
-rw-r--r--lib/tv/doc/src/tv_start.gifbin0 -> 8089 bytes
-rw-r--r--lib/tv/doc/src/tv_start.ps828
-rw-r--r--lib/tv/doc/src/tv_start_mnesia.gifbin0 -> 8080 bytes
-rw-r--r--lib/tv/doc/src/tv_start_mnesia.ps835
-rw-r--r--lib/tv/doc/src/tv_start_other_node.gifbin0 -> 17327 bytes
-rw-r--r--lib/tv/doc/src/tv_start_other_node.ps2316
-rw-r--r--lib/tv/doc/src/tv_start_pid_sorted.gifbin0 -> 13775 bytes
-rw-r--r--lib/tv/doc/src/tv_start_pid_sorted.ps1853
-rw-r--r--lib/tv/doc/src/tv_start_system.gifbin0 -> 12372 bytes
-rw-r--r--lib/tv/doc/src/tv_start_system.ps1330
-rw-r--r--lib/tv/doc/src/tv_start_system_unreadable.gifbin0 -> 13890 bytes
-rw-r--r--lib/tv/doc/src/tv_start_system_unreadable.ps1377
-rw-r--r--lib/tv/doc/src/tv_table_browser.gifbin0 -> 15457 bytes
-rw-r--r--lib/tv/doc/src/tv_table_browser.ps2024
-rw-r--r--lib/tv/doc/src/tv_table_browser_updated.gifbin0 -> 15857 bytes
-rw-r--r--lib/tv/doc/src/tv_table_browser_updated.ps2124
-rw-r--r--lib/tv/doc/src/tv_table_loaded.gifbin0 -> 15322 bytes
-rw-r--r--lib/tv/doc/src/tv_table_loaded.ps1430
-rw-r--r--lib/tv/doc/src/tv_table_sorted.gifbin0 -> 15797 bytes
-rw-r--r--lib/tv/doc/src/tv_table_sorted.ps1502
-rw-r--r--lib/tv/doc/src/warning.gifbin0 -> 1498 bytes
-rw-r--r--lib/tv/ebin/.gitignore0
-rw-r--r--lib/tv/info2
-rw-r--r--lib/tv/priv/Makefile72
-rw-r--r--lib/tv/priv/arrow_left.xbm5
-rw-r--r--lib/tv/priv/arrow_right.xbm5
-rw-r--r--lib/tv/priv/edit1.xbm12
-rw-r--r--lib/tv/priv/erlang.gifbin0 -> 1297 bytes
-rw-r--r--lib/tv/priv/help.xbm8
-rw-r--r--lib/tv/priv/info.xbm8
-rw-r--r--lib/tv/priv/key.xbm6
-rw-r--r--lib/tv/priv/more.xbm8
-rw-r--r--lib/tv/priv/no_sort.xbm8
-rw-r--r--lib/tv/priv/open.xbm8
-rw-r--r--lib/tv/priv/poll.xbm8
-rw-r--r--lib/tv/priv/search.xbm8
-rw-r--r--lib/tv/priv/sort.xbm8
-rw-r--r--lib/tv/priv/sort_reverse.xbm8
-rw-r--r--lib/tv/priv/tv.gifbin0 -> 179 bytes
-rw-r--r--lib/tv/priv/tv.tool23
-rw-r--r--lib/tv/src/Makefile135
-rw-r--r--lib/tv/src/tv.app.src56
-rw-r--r--lib/tv/src/tv.appup.src18
-rw-r--r--lib/tv/src/tv.erl38
-rw-r--r--lib/tv/src/tv_comm_func.erl77
-rw-r--r--lib/tv/src/tv_db.erl1267
-rw-r--r--lib/tv/src/tv_db_int_def.hrl80
-rw-r--r--lib/tv/src/tv_db_search.erl485
-rw-r--r--lib/tv/src/tv_db_sort.erl141
-rw-r--r--lib/tv/src/tv_ets_rpc.erl140
-rw-r--r--lib/tv/src/tv_etsread.erl767
-rw-r--r--lib/tv/src/tv_info.erl876
-rw-r--r--lib/tv/src/tv_int_def.hrl56
-rw-r--r--lib/tv/src/tv_int_msg.hrl504
-rw-r--r--lib/tv/src/tv_io_lib.erl222
-rw-r--r--lib/tv/src/tv_io_lib_format.erl389
-rw-r--r--lib/tv/src/tv_io_lib_pretty.erl171
-rw-r--r--lib/tv/src/tv_ip.erl236
-rw-r--r--lib/tv/src/tv_main.erl1807
-rw-r--r--lib/tv/src/tv_main.hrl286
-rw-r--r--lib/tv/src/tv_mnesia_rpc.erl104
-rw-r--r--lib/tv/src/tv_new_table.erl656
-rw-r--r--lib/tv/src/tv_nodewin.erl403
-rw-r--r--lib/tv/src/tv_pb.erl685
-rw-r--r--lib/tv/src/tv_pb_funcs.erl1050
-rw-r--r--lib/tv/src/tv_pb_int_def.hrl99
-rw-r--r--lib/tv/src/tv_pc.erl794
-rw-r--r--lib/tv/src/tv_pc_graph_ctrl.erl120
-rw-r--r--lib/tv/src/tv_pc_int_def.hrl62
-rw-r--r--lib/tv/src/tv_pc_menu_handling.erl485
-rw-r--r--lib/tv/src/tv_pd.erl1122
-rw-r--r--lib/tv/src/tv_pd_display.erl1059
-rw-r--r--lib/tv/src/tv_pd_frames.erl480
-rw-r--r--lib/tv/src/tv_pd_int_def.hrl139
-rw-r--r--lib/tv/src/tv_pd_int_msg.hrl433
-rw-r--r--lib/tv/src/tv_pd_scale.erl303
-rw-r--r--lib/tv/src/tv_pg.erl429
-rw-r--r--lib/tv/src/tv_pg_gridfcns.erl1939
-rw-r--r--lib/tv/src/tv_pg_int_def.hrl92
-rw-r--r--lib/tv/src/tv_poll_dialog.erl357
-rw-r--r--lib/tv/src/tv_pw.erl327
-rw-r--r--lib/tv/src/tv_pw_int_def.hrl55
-rw-r--r--lib/tv/src/tv_pw_window.erl273
-rw-r--r--lib/tv/src/tv_rec_edit.erl744
-rw-r--r--lib/tv/src/tv_table_owner.erl122
-rw-r--r--lib/tv/src/tv_utils.erl176
-rw-r--r--lib/tv/vsn.mk20
120 files changed, 47438 insertions, 0 deletions
diff --git a/lib/tv/AUTHORS b/lib/tv/AUTHORS
new file mode 100644
index 0000000000..7736a75b2f
--- /dev/null
+++ b/lib/tv/AUTHORS
@@ -0,0 +1,5 @@
+Original Authors and Contributors:
+
+Fredrik Gustafson
+
+
diff --git a/lib/tv/Makefile b/lib/tv/Makefile
new file mode 100644
index 0000000000..1c6d4b54f6
--- /dev/null
+++ b/lib/tv/Makefile
@@ -0,0 +1,35 @@
+#
+# %CopyrightBegin%
+#
+# Copyright Ericsson AB 1997-2009. All Rights Reserved.
+#
+# The contents of this file are subject to the Erlang Public License,
+# Version 1.1, (the "License"); you may not use this file except in
+# compliance with the License. You should have received a copy of the
+# Erlang Public License along with this software. If not, it can be
+# retrieved online at http://www.erlang.org/.
+#
+# Software distributed under the License is distributed on an "AS IS"
+# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+# the License for the specific language governing rights and limitations
+# under the License.
+#
+# %CopyrightEnd%
+include $(ERL_TOP)/make/target.mk
+include $(ERL_TOP)/make/$(TARGET)/otp.mk
+
+# ----------------------------------------------------
+# Common Macros
+# ----------------------------------------------------
+
+SUB_DIRECTORIES = src priv doc/src
+
+include vsn.mk
+VSN = $(TV_VSN)
+
+SPECIAL_TARGETS =
+
+# ----------------------------------------------------
+# Default Subdir Targets
+# ----------------------------------------------------
+include $(ERL_TOP)/make/otp_subdir.mk
diff --git a/lib/tv/doc/html/.gitignore b/lib/tv/doc/html/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/lib/tv/doc/html/.gitignore
diff --git a/lib/tv/doc/man3/.gitignore b/lib/tv/doc/man3/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/lib/tv/doc/man3/.gitignore
diff --git a/lib/tv/doc/pdf/.gitignore b/lib/tv/doc/pdf/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/lib/tv/doc/pdf/.gitignore
diff --git a/lib/tv/doc/src/Makefile b/lib/tv/doc/src/Makefile
new file mode 100644
index 0000000000..f30e0307a9
--- /dev/null
+++ b/lib/tv/doc/src/Makefile
@@ -0,0 +1,221 @@
+#
+# %CopyrightBegin%
+#
+# Copyright Ericsson AB 1997-2009. All Rights Reserved.
+#
+# The contents of this file are subject to the Erlang Public License,
+# Version 1.1, (the "License"); you may not use this file except in
+# compliance with the License. You should have received a copy of the
+# Erlang Public License along with this software. If not, it can be
+# retrieved online at http://www.erlang.org/.
+#
+# Software distributed under the License is distributed on an "AS IS"
+# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+# the License for the specific language governing rights and limitations
+# under the License.
+#
+# %CopyrightEnd%
+include $(ERL_TOP)/make/target.mk
+include $(ERL_TOP)/make/$(TARGET)/otp.mk
+
+# ----------------------------------------------------
+# Application version
+# ----------------------------------------------------
+include ../../vsn.mk
+VSN=$(TV_VSN)
+APPLICATION=tv
+
+# ----------------------------------------------------
+# Include dependency
+# ----------------------------------------------------
+
+ifndef DOCSUPPORT
+include make.dep
+endif
+
+# ----------------------------------------------------
+# Release directory specification
+# ----------------------------------------------------
+RELSYSDIR = $(RELEASE_PATH)/lib/$(APPLICATION)-$(VSN)
+
+# ----------------------------------------------------
+# Target Specs
+# ----------------------------------------------------
+XML_APPLICATION_FILES = ref_man.xml
+XML_REF3_FILES = tv.xml
+
+XML_PART_FILES = \
+ part.xml \
+ part_notes.xml
+
+XML_CHAPTER_FILES = \
+ table_visualizer_chapter.xml \
+ notes.xml
+
+BOOK_FILES = book.xml
+
+XML_FILES = \
+ $(BOOK_FILES) $(XML_CHAPTER_FILES) \
+ $(XML_PART_FILES) $(XML_REF3_FILES) $(XML_APPLICATION_FILES)
+
+GIF_FILES = tv_start.gif \
+ tv_start_mnesia.gif \
+ tv_start_system.gif \
+ tv_start_system_unreadable.gif \
+ tv_start_pid_sorted.gif \
+ tv_start_other_node.gif \
+ tv_table_browser.gif \
+ tv_table_browser_updated.gif \
+ set_poll_int.gif \
+ tv_record_editor_mnesia.gif \
+ tv_search_window.gif \
+ tv_search_result.gif \
+ tv_row_marked.gif \
+ tv_row_marked_popup.gif \
+ info_window.gif \
+ tv_create_table.gif
+
+# ----------------------------------------------------
+
+HTML_FILES = $(XML_APPLICATION_FILES:%.xml=$(HTMLDIR)/%.html) \
+ $(XML_PART_FILES:%.xml=$(HTMLDIR)/%.html)
+
+INFO_FILE = ../../info
+EXTRA_FILES = \
+ $(DEFAULT_GIF_FILES) \
+ $(DEFAULT_HTML_FILES) \
+ $(XML_REF3_FILES:%.xml=$(HTMLDIR)/%.html) \
+ $(XML_CHAPTER_FILES:%.xml=$(HTMLDIR)/%.html)
+
+MAN3_FILES = $(XML_REF3_FILES:%.xml=$(MAN3DIR)/%.3)
+
+ifdef DOCSUPPORT
+
+HTML_REF_MAN_FILE = $(HTMLDIR)/index.html
+
+TOP_PDF_FILE = $(PDFDIR)/$(APPLICATION)-$(VSN).pdf
+
+else
+
+TEX_FILES_BOOK = \
+ $(BOOK_FILES:%.xml=%.tex)
+TEX_FILES_REF_MAN = $(XML_REF3_FILES:%.xml=%.tex) \
+ $(XML_APPLICATION_FILES:%.xml=%.tex)
+TEX_FILES_USERS_GUIDE = \
+ $(XML_CHAPTER_FILES:%.xml=%.tex)
+
+TOP_PDF_FILE = tv-$(VSN).pdf
+TOP_PS_FILE = tv-$(VSN).ps
+
+$(TOP_PDF_FILE): book.dvi ../../vsn.mk
+ $(DVI2PS) $(DVIPS_FLAGS) -f $< | $(DISTILL) $(DISTILL_FLAGS) > $@
+
+$(TOP_PS_FILE): book.dvi ../../vsn.mk
+ $(DVI2PS) $(DVIPS_FLAGS) -f $< > $@
+
+endif
+
+# ----------------------------------------------------
+# FLAGS
+# ----------------------------------------------------
+XML_FLAGS +=
+DVIPS_FLAGS +=
+
+# ----------------------------------------------------
+# Targets
+# ----------------------------------------------------
+$(HTMLDIR)/%.gif: %.gif
+ $(INSTALL_DATA) $< $@
+
+ifdef DOCSUPPORT
+
+docs: pdf html man
+
+$(TOP_PDF_FILE): $(XML_FILES)
+
+pdf: $(TOP_PDF_FILE)
+
+html: gifs $(HTML_REF_MAN_FILE)
+
+
+clean clean_docs:
+ rm -rf $(HTMLDIR)/*
+ rm -f $(MAN3DIR)/*
+ rm -f $(TOP_PDF_FILE) $(TOP_PDF_FILE:%.pdf=%.fo)
+ rm -f errs core *~
+
+else
+
+ifeq ($(DOCTYPE),pdf)
+docs: pdf
+else
+ifeq ($(DOCTYPE),ps)
+docs: ps
+else
+docs: html gifs man
+endif
+endif
+
+pdf: $(TOP_PDF_FILE)
+
+ps: $(TOP_PS_FILE)
+
+html: $(HTML_FILES) gifs
+
+clean clean_docs clean_tex:
+ rm -f $(TEX_FILES_USERS_GUIDE) $(TEX_FILES_REF_MAN) $(TEX_FILES_BOOK)
+ rm -f $(HTML_FILES) $(MAN3_FILES)
+ rm -f $(TOP_PDF_FILE) $(TOP_PS_FILE)
+ rm -f errs core *~ $(LATEX_CLEAN)
+endif
+
+man: $(MAN3_FILES)
+
+gifs: $(GIF_FILES:%=$(HTMLDIR)/%)
+
+debug opt:
+
+
+# ----------------------------------------------------
+# Release Target
+# ----------------------------------------------------
+include $(ERL_TOP)/make/otp_release_targets.mk
+
+ifdef DOCSUPPORT
+
+release_docs_spec: docs
+ $(INSTALL_DIR) $(RELSYSDIR)/doc/pdf
+ $(INSTALL_DATA) $(TOP_PDF_FILE) $(RELSYSDIR)/doc/pdf
+ $(INSTALL_DIR) $(RELSYSDIR)/doc/html
+ $(INSTALL_DATA) $(HTMLDIR)/* \
+ $(RELSYSDIR)/doc/html
+ $(INSTALL_DATA) $(INFO_FILE) $(RELSYSDIR)
+ $(INSTALL_DIR) $(RELEASE_PATH)/man/man3
+ $(INSTALL_DATA) $(MAN3_FILES) $(RELEASE_PATH)/man/man3
+
+else
+
+ifeq ($(DOCTYPE),pdf)
+release_docs_spec: pdf
+ $(INSTALL_DIR) $(RELEASE_PATH)/pdf
+ $(INSTALL_DATA) $(TOP_PDF_FILE) $(RELEASE_PATH)/pdf
+else
+ifeq ($(DOCTYPE),ps)
+release_docs_spec: ps
+ $(INSTALL_DIR) $(RELEASE_PATH)/ps
+ $(INSTALL_DATA) $(TOP_PS_FILE) $(RELEASE_PATH)/ps
+else
+release_docs_spec: docs
+ $(INSTALL_DIR) $(RELSYSDIR)/doc/html
+ $(INSTALL_DATA) $(GIF_FILES) $(EXTRA_FILES) $(HTML_FILES) \
+ $(RELSYSDIR)/doc/html
+ $(INSTALL_DATA) $(INFO_FILE) $(RELSYSDIR)
+ $(INSTALL_DIR) $(RELEASE_PATH)/man/man3
+ $(INSTALL_DATA) $(MAN3_FILES) $(RELEASE_PATH)/man/man3
+endif
+endif
+
+endif
+
+release_spec:
+
diff --git a/lib/tv/doc/src/book.xml b/lib/tv/doc/src/book.xml
new file mode 100644
index 0000000000..d16165ab8f
--- /dev/null
+++ b/lib/tv/doc/src/book.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="latin1" ?>
+<!DOCTYPE book SYSTEM "book.dtd">
+
+<book xmlns:xi="http://www.w3.org/2001/XInclude">
+ <header titlestyle="normal">
+ <copyright>
+ <year>1997</year><year>2009</year>
+ <holder>Ericsson AB. All Rights Reserved.</holder>
+ </copyright>
+ <legalnotice>
+ The contents of this file are subject to the Erlang Public License,
+ Version 1.1, (the "License"); you may not use this file except in
+ compliance with the License. You should have received a copy of the
+ Erlang Public License along with this software. If not, it can be
+ retrieved online at http://www.erlang.org/.
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ the License for the specific language governing rights and limitations
+ under the License.
+
+ </legalnotice>
+
+ <title>Table Visualizer (TV)</title>
+ <prepared></prepared>
+ <docno></docno>
+ <date></date>
+ <rev>2.0.3</rev>
+ </header>
+ <insidecover>
+ </insidecover>
+ <pagetext>Table Visualizer (TV)</pagetext>
+ <preamble>
+ </preamble>
+ <parts lift="no">
+ <xi:include href="part.xml"/>
+ </parts>
+ <applications>
+ <xi:include href="ref_man.xml"/>
+ </applications>
+ <releasenotes>
+ <xi:include href="notes.xml"/>
+ </releasenotes>
+ <listofterms></listofterms>
+ <index></index>
+</book>
+
+
diff --git a/lib/tv/doc/src/fascicules.xml b/lib/tv/doc/src/fascicules.xml
new file mode 100644
index 0000000000..101e745722
--- /dev/null
+++ b/lib/tv/doc/src/fascicules.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="latin1" ?>
+<!DOCTYPE fascicules SYSTEM "fascicules.dtd">
+
+<fascicules>
+ <fascicule file="part" href="part_frame.html" entry="no">
+ User's Guide
+ </fascicule>
+ <fascicule file="ref_man" href="ref_man_frame.html" entry="yes">
+ Reference Manual
+ </fascicule>
+ <fascicule file="part_notes" href="part_notes_frame.html" entry="no">
+ Release Notes
+ </fascicule>
+ <fascicule file="" href="../../../../doc/print.html" entry="no">
+ Off-Print
+ </fascicule>
+</fascicules>
+
+
diff --git a/lib/tv/doc/src/info_window.gif b/lib/tv/doc/src/info_window.gif
new file mode 100644
index 0000000000..7913fc4230
--- /dev/null
+++ b/lib/tv/doc/src/info_window.gif
Binary files differ
diff --git a/lib/tv/doc/src/info_window.ps b/lib/tv/doc/src/info_window.ps
new file mode 100644
index 0000000000..b459523d0f
--- /dev/null
+++ b/lib/tv/doc/src/info_window.ps
@@ -0,0 +1,814 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (ImageMagick)
+%%Title: (./info_window.tmp.eps)
+%%CreationDate: (Tue Jun 12 16:12:33 2001)
+%%BoundingBox: 0 60 377 354
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 0
+%%EndComments
+
+%%BeginDefaults
+%%PageOrientation: Portrait
+%%EndDefaults
+
+%%BeginProlog
+%
+% Display a color image. The image is displayed in color on
+% Postscript viewers or printers that support color, otherwise
+% it is displayed as grayscale.
+%
+/buffer 512 string def
+/byte 1 string def
+/color_packet 3 string def
+/pixels 768 string def
+
+/DirectClassPacket
+{
+ %
+ % Get a DirectClass packet.
+ %
+ % Parameters:
+ % red.
+ % green.
+ % blue.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/DirectClassImage
+{
+ %
+ % Display a DirectClass image.
+ %
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { DirectClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayDirectClassPacket } image
+ } ifelse
+} bind def
+
+/GrayDirectClassPacket
+{
+ %
+ % Get a DirectClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % red
+ % green
+ % blue
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/GrayPseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassImage
+{
+ %
+ % Display a PseudoClass image.
+ %
+ % Parameters:
+ % class: 0-PseudoClass or 1-Grayscale.
+ %
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ class 0 gt
+ {
+ currentfile buffer readline pop
+ token pop /depth exch def pop
+ /grays columns 8 add depth sub depth mul 8 idiv string def
+ columns rows depth
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { currentfile grays readhexstring pop } image
+ }
+ {
+ %
+ % Parameters:
+ % colors: number of colors in the colormap.
+ % colormap: red, green, blue color packets.
+ %
+ currentfile buffer readline pop
+ token pop /colors exch def pop
+ /colors colors 3 mul def
+ /colormap colors string def
+ currentfile colormap readhexstring pop pop
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { PseudoClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayPseudoClassPacket } image
+ } ifelse
+ } ifelse
+} bind def
+
+/DisplayImage
+{
+ %
+ % Display a DirectClass or PseudoClass image.
+ %
+ % Parameters:
+ % x & y translation.
+ % x & y scale.
+ % label pointsize.
+ % image label.
+ % image columns & rows.
+ % class: 0-DirectClass or 1-PseudoClass.
+ % compression: 0-RunlengthEncodedCompression or 1-NoCompression.
+ % hex color packets.
+ %
+ gsave
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ x y translate
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ currentfile buffer readline pop
+ token pop /pointsize exch def pop
+ /Helvetica findfont pointsize scalefont setfont
+ x y scale
+ currentfile buffer readline pop
+ token pop /columns exch def
+ token pop /rows exch def pop
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ currentfile buffer readline pop
+ token pop /compression exch def pop
+ class 0 gt { PseudoClassImage } { DirectClassImage } ifelse
+ grestore
+} bind def
+%%EndProlog
+%%Page: 1 1
+%%PageBoundingBox: 0 60 377 354
+userdict begin
+%%BeginData:
+DisplayImage
+0 60
+377.000000 294.000000
+12
+590 460
+1
+0
+0
+8
+ffffff
+000000
+d8d8d8
+c2c2c2
+6b6b6b
+d9d9d9
+b22222
+828282
+000a01ff01ff0137000b0208040001ff01ff013700000208040000000208040002ff02ff
+0237000002080400000002080400020000ff00ff00340400020000000208040000000202
+04060200000004ff04ff0434020000000405020204000000020204000209000d02ff02ff
+022b00000202040000000202040002080000020d040002ea010102060101021d01020229
+010102e700000202040000000202040002080000020d040002d801070209010102060101
+020e0101020b0101022601000203010102e700000202040000000202040002080000020d
+040002db0101020c010102060101020e0101020b01010225010102ed0000020204000000
+0202040002080000020204060203040002db010102040103020301010200010102030101
+020201030207010102020101020001010202010402010103020201010200010102010101
+020001010201010102030103020101040201010102020103020301010200010102d70000
+02020400000004030208000002020400030400000203040002db01010203010102010101
+020201020200010102020101020101010201010102060101020201020200010102020101
+020201010201010102010101020001010201010202000102020001010201010102010101
+02010101020301010201010102010101020201020200010102d6000004030101020b0000
+02030400030200000204040002db01010207010102020101020101010202010102010101
+020101010206010102020101020101010202010102020101020101010201010202030101
+020101010201010102050101020101010203010102010101020101010202010102010101
+02d90103020b000002030400030200000204040002db0101020401040202010102010101
+020201010201010502060101020201010201010102020101020201010201010102010101
+020401010201010102010101020201040201010102030101020101010201010102020101
+0201010102d90103020b000002040400030000000205040002db01010203010102010101
+02020101020101010202010102010101020a010102020101020101010202010102020101
+020101010201010102040101020101010201010102010101020101010201010102030101
+0201010102010101020201010201010102d90103020b0000020404000300000002050400
+02db01010203010102010101020201010201010102020101020101010202010002060101
+020201010201010102020101020201010201010102010101020401010201010102010101
+020101010201010102010101020301010201010102010101020201010201010102d90103
+020b0000020500000206040002db01010204010202000101020101040203010102020103
+020701010202010102010101020201010203010302020101020401010201010102010101
+0202010202000101020101020201010102020103020301010201010102d90103020b0000
+020d040002ff02ff022d0103020b0000020d040002ff02ff022d0103020b0000020d0400
+02ff02ff022d0103020c040d02ff02ff022e010302ff02ff0249010302ff02ff02490103
+020200ff00ff00420400020201030202000004ff04ff04420202010302ff02ff02490103
+020200ff00ff004302020103020200ff00ff00420700020201030202000105ff05ff053f
+0701020201030202000105ff05ff053f0701020201030202000105ff05ff053f07010202
+01030202000105ff05ff053f0701020201030202000105ff05ff053f0701020201030202
+0001050b0604050406000503060205ff05ff052107010202010302020001050b0600050f
+060005ff05ff052107010202010302020001050b060005060602050506000503060205ff
+05ff051a07010202010302020001050b06000508060005050600050206000502060005ff
+05ff051907010202010302020001050b06030505060005050600050206000502060005ff
+05ff051907010202010302020001050b060005080600050506000502060405ff05ff0519
+07010202010302020001050b060005080600050506000502060005ff05ff051d07010202
+010302020001050b06000508060005050600050206000502060005ff05ff051907010202
+010302020001050b060005080600050506000503060205ff05ff051a0701020201030202
+000105ff05ff053f07010202010302020001050a060605ff05ff052d0701020201030202
+0001050a060605ff05ff052d0701020201030202000105ff05ff053f0701020201030202
+000105ff05ff053f0701020201030202000105ff05ff053f0701020201030202000107ff
+07ff0741020201030202000007ff07ff074202020103020205ff05ff0543020201030202
+05ff05ff054302020103020205ff05ff054302020103020205ff05ff0543020201030202
+05ff05ff054302020103020205ff05ff054302020103020205ff05ff0543020201030202
+05ff05ff054302020103020205ff05ff054302020103020205ff05ff0543020201030202
+05ff05ff0543020201030202050400770501007705010077050100770558020201030202
+050400760700050100760700050100760700050100760700055802020103020205040001
+057307010501000105730701050100010573070105010001057307010558020201030202
+050400010573070105010001057307010501000105730701050100010573070105580202
+010302020504000105730701050100010573070105010001057307010501000105730701
+055802020103020205040001057307010501000105730701050100010573070105010001
+057307010558020201030202050400010573070105010001057307010501000105730701
+050100010573070105580202010302020504000105730701050100010573070105010001
+057307010501000105730701055802020103020205040001057307010501000105730701
+050100010573070105010001057307010558020201030202050400010573070105010001
+057307010501000105730701050100010573070105580202010302020504000105730701
+050100010573070105010001057307010501000105730701055802020103020205040001
+057307010501000105730701050100010573070105010001057307010558020201030202
+05040001051d010405080100050601020510010405050100051f07010501000105080102
+0514010005110102050b010005050100050601000520070105010001052c010205050100
+053c070105010001052101020504010005480701055802020103020205040001051f0100
+050a0100050801000512010005070100051f070105010001050801000501010005250100
+05020100050a0100050501000528070105010001052b0100050201000542070105010001
+05200100050201000503010005480701055802020103020205040001051f010005040102
+05020100050001010505010005030102050b01000504010105000100051f070105010001
+050801000501010005030102050301020503010205030102050901000506010205020104
+05010104050201020502010005000101050301010500010005020102050b070105010001
+052b0100050601020502010405020102052e070105010001052001000505010405020102
+050201000500010105030102050301010500010005020102052407010558020201030202
+05040001051f010005030100050201000501010105010100050401000502010005020100
+050a01000503010005010101051f07010501000105080100050101000502010005020100
+050101000502010005040100050201000502010005090100050401000502010005030100
+0505010005060100050201010501010005010100050101010501010005020100050a0701
+05010001052c010005070100050601000501010005020100052d07010501000105210100
+050601000503010005020100050101010501010005010100050201000501010005010101
+050101000502010005230701055802020103020205040001051f01000507010005010100
+05020100050401000502010005020100050a01000503010005020100051f070105010001
+0508010305060100050101000508010005020100050e0101050201000502010005030100
+05050100050601000502010005020100050101000502010005010100050e070105010001
+052d010105050100050501000502010005020100052d0701050100010522010105040100
+050301000502010005010100050901000501010005020100050101000502010005230701
+055802020103020205040001051f01000504010305010100050201000504010005020104
+050a01000503010005020100051f07010501000105080100050201000502010305020102
+050501000502010005100100050101040503010005050100050601000502010005020100
+050101000502010005020102050b070105010001052f0100050401000504010005030104
+052d07010501000105240100050301000503010005020100050101000506010305010100
+050201000501010405230701055802020103020205040001051f01000503010005020100
+05010100050201000504010005020100050e01000503010005020100051f070105010001
+05080100050201000501010005020100050501000504010005020100050c010005020100
+050101000507010005050100050601000502010005020100050101000502010005050100
+050a070105010001052b0100050201000504010005030100050401000531070105010001
+052001000502010005030100050301000502010005010100050501000502010005010100
+050201000501010005270701055802020103020205040001051f01000503010005020100
+0501010105010100050401000502010005020100050a01000503010005010101051f0701
+050100010508010005020100050101000502010005010100050201000504010005020100
+050201000508010005020100050101000502010005030100050501000506010005020100
+0502010005010100050101010501010005020100050a070105010001052b010005020100
+05040100050201000505010005020100052d070105010001052001000502010005030100
+050301000502010005010100050501000502010005010100050101010501010005020100
+05230701055802020103020205040001051f010005040103050101000500010105050100
+05030102050901040502010105000100051f070105010001050801030503010305020102
+0505010005030102050a0102050301020505010105040101050401000502010005020100
+050201010500010005020102050b070105010001052c0102050501000502010405020102
+052e07010501000105210102050501010502010205020100050601030502010105000100
+050201020524070105580202010302020504000105730701050100010560010005110701
+05010001057307010501000105470100052a070105580202010302020504000105730701
+05010001055c010005020100051107010501000105730701050100010543010005020100
+052a07010558020201030202050400010573070105010001055d01020512070105010001
+057307010501000105440102052b07010558020201030202050400010573070105010001
+057307010501000105730701050100010573070105580202010302020504000105730701
+050100010573070105010001057307010501000105730701055802020103020205040001
+057307010501000105730701050100010573070105010001057307010558020201030202
+050400010573070105010001057307010501000105730701050100010573070105580202
+010302020504000105730701050100010573070105010001057307010501000105730701
+055802020103020205040001057307010501000105730701050100010573070105010001
+05730701055802020103020205040001057400ff00c20504020201030202050400010574
+00ff00c1070005040202010302020504000105ff05ff0535070105040202010302020504
+000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
+02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
+0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
+070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
+05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
+000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
+02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
+0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
+070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
+05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
+000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
+02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
+0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
+070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
+05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
+000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
+02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
+0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
+070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
+05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
+000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
+02020504000105ff05ff0535070105040202010302020504000105d101ff0158050a0701
+05040202010302020504000105d1010000ff00560100050a070105040202010302020504
+000105d1010000ff00560100050a070105040202010302020504000105d1010000ff0056
+0100050a070105040202010302020504000105d1010000ff00560100050a070105040202
+010302020504000105d1010000ff00560100050a070105040202010302020504000105d1
+010000ff00560100050a0701050402020103020205040001050a01040508010005060102
+05100104059701000010010000ff00440100050a0701050402020103020205040001050c
+0100050a01000508010005120100059901000010010000ff00440100050a070105040202
+0103020205040001050c01000504010205020100050001010505010005030102050b0100
+050301000502010005010100050001010503010205040101057c01000008010200020104
+0002010200ff003c0100050a0701050402020103020205040001050c0100050301000502
+01000501010105010100050401000502010005020100050a010005030100050201000501
+010105010100050101000502010005030101057c01000007010000020100000301000003
+01000002010000ff003b0100050a0701050402020103020205040001050c010005070100
+0501010005020100050401000502010005020100050a0100050401000501010005010100
+050201000501010005020100058201000007010000020100000301000003010000ff003f
+0100050a0701050402020103020205040001050c01000504010305010100050201000504
+010005020104050a01000504010005010100050101000502010005010104058201000007
+0104000301000004010200ff003c0100050a0701050402020103020205040001050c0100
+050301000502010005010100050201000504010005020100050e01000505010005000100
+0501010005020100050101000586010000070100000701000007010000ff003b0100050a
+0701050402020103020205040001050c0100050301000502010005010101050101000504
+01000502010005020100050a010005050101050201010501010005010100050201000503
+0101057c0100000701000002010000030100000301000002010000ff003b0100050a0701
+050402020103020205040001050c01000504010305010100050001010505010005030102
+050b01000506010005020100050001010503010205040101057c01000008010200050101
+0002010200ff003c0100050a0701050402020103020205040001053e010005020100058d
+010000ff00560100050a0701050402020103020205040001053b01000500010005030100
+058d010000ff00560100050a0701050402020103020205040001053c010005040100058d
+010000ff00560100050a070105040202010302020504000105d1010000ff00560100050a
+070105040202010302020504000105d1010000ff00560100050a07010504020201030202
+0504000105d1010000ff00560100050a070105040202010302020504000105d1010000ff
+00560100050a070105040202010302020504000105d101ff0158050a0701050402020103
+02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
+0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
+070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
+05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
+000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
+02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
+0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
+070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
+05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
+000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
+02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
+0202010302020504000105d101ff0158050a070105040202010302020504000105d10100
+00ff00560100050a070105040202010302020504000105d1010000ff00560100050a0701
+05040202010302020504000105d1010000ff00560100050a070105040202010302020504
+000105d1010000ff00560100050a070105040202010302020504000105d10100000a0101
+00a2010100a40100050a070105040202010302020504000105d101000009010000700100
+002a01000008010000a30100050a0701050402020103020205040001050a010405080100
+050601020510010405050100059001000009010000040102001901000006010000190100
+000a0100000601020013010000040101000a010200040100000c01010002010000070100
+00a30100050a0701050402020103020205040001050c0100050a01000508010005120100
+050701000590010000090100000601000019010000210100000a01000008010000120100
+0004010000010100000801000002010000020101000b0100000101000002010000060100
+00a30100050a0701050402020103020205040001050c0100050401020502010005000101
+0505010005030102050b0100050401010500010005030101058a01000009010000060100
+000301020003010200030102000201040002010200030102000201000000010100090104
+0002010200020100000001010005010000030102000a01000005010000010100000c0100
+0001010000000100000b010000010100000301000005010000a30100050a070105040202
+0103020205040001050c0100050301000502010005010101050101000504010005020100
+05020100050a0100050301000501010105030101058a0100000901000006010000020100
+000201000001010000020100000101000002010000030100000601000002010000020100
+0001010100010100000a0100000301000002010000010101000101000004010000020100
+00020100000801000006010000010100000c010000030100000b01000001010000040100
+0004010000a30100050a0701050402020103020205040001050c01000507010005010100
+05020100050401000502010005020100050a010005030100050201000590010000070101
+000701000002010000020100000101000009010000030100000601000002010000020100
+0001010000020100000a0100000701000001010000020100000401000002010000020100
+000701000007010000010100000a010100040100000b0100000101000005010000040101
+00a10100050a0701050402020103020205040001050c0100050401030501010005020100
+0504010005020104050a0100050301000502010005900100000901000006010000020100
+000201000001010000060103000301000006010000020100000201000001010000020100
+000a01000004010300010100000201000004010000020104000801000006010000010100
+000c010000030100000b010000010100000401000004010000a30100050a070105040202
+0103020205040001050c0100050301000502010005010100050201000504010005020100
+050e01000503010005020100059001000009010000060100000201000002010000010100
+0005010000020100000301000006010000020100000201000001010000020100000a0100
+000301000002010000010100000201000004010000020100000d01000005010000010100
+000c010000030100000b010000010100000301000005010000a30100050a070105040202
+0103020205040001050c0100050301000502010005010101050101000504010005020100
+05020100050a0100050301000501010105030101058a0100000901000006010000020100
+000201000001010000020100000101000002010000030100000601000002010000020100
+0001010000020100000a0100000301000002010000010101000101000004010000020100
+000201000003010100040100000401000001010000030101000201000002010000030100
+000501010003010000010100000201000006010000a30100050a07010504020201030202
+05040001050c010005040103050101000500010105050100050301020509010405020101
+0500010005030101058a0100000901000006010000030102000301020003010300040101
+00040100000301020002010000020100000b010100020103000101000000010100050100
+000301020004010100050100000401010004010100030102000201040003010100040101
+000201000007010000a30100050a070105040202010302020504000105d1010000090100
+003a01050027010000060100002a01000008010000a30100050a07010504020201030202
+0504000105d10100000a010100640101003b010100a40100050a07010504020201030202
+0504000105d1010000ff00560100050a070105040202010302020504000105d1010000ff
+00560100050a070105040202010302020504000105d1010000ff00560100050a07010504
+0202010302020504000105d1010000ff00560100050a0701050402020103020205040001
+05d1010000ff00560100050a070105040202010302020504000105d101ff0158050a0701
+05040202010302020504000105ff05ff0535070105040202010302020504000105ff05ff
+0535070105040202010302020504000105ff05ff05350701050402020103020205040001
+05ff05ff0535070105040202010302020504000105ff05ff053507010504020201030202
+0504000105ff05ff0535070105040202010302020504000105ff05ff0535070105040202
+010302020504000105ff05ff0535070105040202010302020504000105ff05ff05350701
+05040202010302020504000105ff05ff0535070105040202010302020504000105ff05ff
+0535070105040202010302020504000105ff05ff05350701050402020103020205040001
+05ff05ff0535070105040202010302020504000105ff05ff053507010504020201030202
+0504000105ff05ff0535070105040202010302020504000105ff05ff0535070105040202
+010302020504000105ff05ff0535070105040202010302020504000105ff05ff05350701
+05040202010302020504000105ff05ff0535070105040202010302020504000105ff05ff
+0535070105040202010302020504000105d101ff0158050a070105040202010302020504
+000105d1010000ff00560100050a070105040202010302020504000105d1010000ff0056
+0100050a070105040202010302020504000105d1010000ff00560100050a070105040202
+010302020504000105d1010000ff00560100050a070105040202010302020504000105d1
+010000ff00560100050a070105040202010302020504000105d1010000ff00560100050a
+0701050402020103020205040001050a0104050801000506010205100100050201000597
+010000080102001901000006010000190100000a01000006010200f60100050a07010504
+02020103020205040001050c0100050a010005080100051001010501010005970100000a
+01000019010000210100000a01000008010000f60100050a070105040202010302020504
+0001050c0100050401020502010005000101050501000503010205090101050101000502
+010205020101050001000503010205040101057c0100000a010000030102000301020003
+010200020104000201020003010200020100000001010009010400020102000201000000
+0101000501000003010200ef0100050a0701050402020103020205040001050c01000503
+010005020100050101010501010005040100050201000502010005080100050001000500
+01000501010005020100050101000500010005000100050101000502010005030101057c
+0100000a0100000201000002010000010100000201000001010000020100000301000006
+010000020100000201000001010100010100000a01000003010000020100000101010001
+010000040100000201000002010000ee0100050a0701050402020103020205040001050c
+010005070100050101000502010005040100050201000502010005080100050001000500
+010005050100050101000500010005000100050101000502010005820100000a01000002
+010000020100000101000009010000030100000601000002010000020100000101000002
+0100000a010000070100000101000002010000040100000201000002010000ee0100050a
+0701050402020103020205040001050c0100050401030501010005020100050401000502
+01040508010005010101050201030501010005000100050001000501010405820100000a
+010000020100000201000001010000060103000301000006010000020100000201000001
+010000020100000a0100000401030001010000020100000401000002010400ee0100050a
+0701050402020103020205040001050c0100050301000502010005010100050201000504
+010005020100050c01000501010105010100050201000501010005000100050001000501
+010005860100000a01000002010000020100000101000005010000020100000301000006
+010000020100000201000001010000020100000a01000003010000020100000101000002
+0100000401000002010000f20100050a0701050402020103020205040001050c01000503
+010005020100050101010501010005040100050201000502010005080100050201000501
+010005020100050101000500010005000100050101000502010005030101057c0100000a
+010000020100000201000001010000020100000101000002010000030100000601000002
+0100000201000001010000020100000a0100000301000002010000010101000101000004
+0100000201000002010000ee0100050a0701050402020103020205040001050c01000504
+010305010100050001010505010005030102050901000502010005020103050101000500
+0100050001000502010205040101057c0100000a01000003010200030102000301030004
+010100040100000301020002010000020100000b01010002010300010100000001010005
+01000003010200ef0100050a070105040202010302020504000105d10100003e010500ff
+00110100050a070105040202010302020504000105d1010000ff00560100050a07010504
+0202010302020504000105d1010000ff00560100050a0701050402020103020205040001
+05d1010000ff00560100050a070105040202010302020504000105d1010000ff00560100
+050a070105040202010302020504000105d1010000ff00560100050a0701050402020103
+02020504000105d1010000ff00560100050a070105040202010302020504000105d101ff
+0158050a070105040202010302020504000105ff05ff0535070105040202010302020504
+000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
+02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
+0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
+070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
+05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
+000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
+02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
+0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
+070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
+05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
+000105ff05ff0535070105040202010302020504000105d101ff0158050a070105040202
+010302020504000105d1010000ff00560100050a070105040202010302020504000105d1
+010000ff00560100050a070105040202010302020504000105d1010000ff00560100050a
+070105040202010302020504000105d1010000ff00560100050a07010504020201030202
+0504000105d1010000ff00560100050a070105040202010302020504000105d1010000ff
+00560100050a0701050402020103020205040001050a0104050801000506010205100100
+05020100051d010305130100050b0100051c0100053501000009010000ff004b0100050a
+0701050402020103020205040001050c0100050a0100050801000510010105010100051d
+010005020100051f0100051c0100053501000009010000ff004b0100050a070105040202
+0103020205040001050c0100050401020502010005000101050501000503010205090101
+050101000502010205020101050001000503010205090100050201000502010205030101
+050001000502010205030102050201040502010205020100050001010503010205030101
+0500010005030101052f0100000701040001010000000101000201000002010000020102
+00ff00350100050a0701050402020103020205040001050c010005030100050201000501
+010105010100050401000502010005020100050801000500010005000100050101000502
+010005010100050001000500010005010100050201000508010005020100050101000502
+010005010100050101010504010005020100050201000503010005030100050201000501
+0101050101000501010005020100050101000501010105030101052f0100000901000003
+0101000101000001010000020100000101000002010000ff00340100050a070105040202
+0103020205040001050c0100050701000501010005020100050401000502010005020100
+050801000500010005000100050501000501010005000100050001000501010005020100
+050801030502010005020100050101000502010005040100050201000507010005030100
+050201000501010005050100050201000501010005020100053501000009010000030100
+0005010000020100000101000002010000ff00340100050a070105040202010302020504
+0001050c0100050401030501010005020100050401000502010405080100050101010502
+010305010100050001000500010005010104050801000501010005020104050101000502
+010005040100050301020504010005030104050101000505010405010100050201000535
+0100000901000003010000050100000201000001010400ff00340100050a070105040202
+0103020205040001050c0100050301000502010005010100050201000504010005020100
+050c010005010101050101000502010005010100050001000500010005010100050c0100
+050201000501010005050100050201000504010005060100050301000503010005050100
+050501000505010005020100053501000009010000030100000501000002010000010100
+00ff00380100050a0701050402020103020205040001050c010005030100050201000501
+010105010100050401000502010005020100050801000502010005010100050201000501
+010005000100050001000501010005020100050801000502010005010100050201000501
+010005010101050401000502010005020100050301000503010005020100050101000505
+010005020100050101000501010105030101052f01000009010000030100000501000001
+0101000101000002010000ff00340100050a0701050402020103020205040001050c0100
+050401030501010005000101050501000503010205090100050201000502010305010100
+050001000500010005020102050901000502010005020102050301010500010005040100
+0503010205050101050201020502010005060102050301010500010005030101052f0100
+000a01010001010000060101000001000002010200ff00350100050a0701050402020103
+020205040001056901000566010000ff00560100050a0701050402020103020205040001
+05650100050201000566010000ff00560100050a07010504020201030202050400010566
+01020567010000ff00560100050a070105040202010302020504000105d1010000ff0056
+0100050a070105040202010302020504000105d1010000ff00560100050a070105040202
+010302020504000105d1010000ff00560100050a070105040202010302020504000105d1
+010000ff00560100050a070105040202010302020504000105d101ff0158050a07010504
+0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
+070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
+05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
+000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
+02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
+0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
+070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
+05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
+000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
+02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
+0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
+070105040202010302020504000105d101ff0158050a0701050402020103020205040001
+05d1010000ff00560100050a070105040202010302020504000105d1010000ff00560100
+050a070105040202010302020504000105d1010000ff00560100050a0701050402020103
+02020504000105d1010000ff00560100050a070105040202010302020504000105d10100
+00ff00560100050a070105040202010302020504000105d10100000b0100002a010000ff
+001d0100050a0701050402020103020205040001050a0103053401020513010005190100
+0503010005130104050801000506010205280100000a010000040101000a010200040100
+000c01010002010000ff001c0100050a0701050402020103020205040001050a01000502
+01000532010005020100052d01000503010005150100050a010005080100052801000009
+01000004010000010100000801000002010000020101000b0100000101000002010000ff
+001b0100050a0701050402020103020205040001050a0100050201000501010005000101
+050301020503010205030102050301020503010205090100050201000501010005020100
+050101000500010105030102050201000500010105030101050001000508010405010100
+0500010105030102050b0100050401020502010005000101050501000503010205040101
+051a0100000801000005010000010100000c01000001010000000100000b010000010100
+0003010000ff001a0100050a0701050402020103020205040001050a0100050201000501
+010105010100050101000502010005010100050201000501010005020100050101000502
+010005010100050201000508010005020100050101000502010005010101050101000504
+010005020101050101000501010005010101050a01000503010105010100050101000502
+0100050a0100050301000502010005010101050101000504010005020100050201000503
+0101051a0100000701000006010000010100000c010000030100000b0100000101000004
+010000ff00190100050a0701050402020103020205040001050a01030502010005050100
+050201000501010005050100050201000501010005050100050c01000502010005010100
+050001000500010005010100050201000504010005020100050201000501010005020100
+050a010005030100050201000501010005020100050a0100050701000501010005020100
+05040100050201000502010005200100000601000007010000010100000a010100040100
+000b0100000101000005010000ff00180100050a0701050402020103020205040001050a
+010005050100050501000502010005010100050501040502010205030102050901000502
+010005010100050001000500010005010100050201000504010005020100050201000501
+010005020100050a0100050301000502010005010104050a010005040103050101000502
+0100050401000502010405200100000701000006010000010100000c010000030100000b
+0100000101000004010000ff00190100050a0701050402020103020205040001050a0100
+050501000505010005020100050101000505010005090100050501000508010005020100
+050101000500010005000100050101000502010005040100050201000502010005010100
+05020100050a0100050301000502010005010100050e0100050301000502010005010100
+05020100050401000502010005240100000801000005010000010100000c010000030100
+000b0100000101000003010000ff001a0100050a0701050402020103020205040001050a
+010005050100050501000502010005010100050201000501010005020100050101000502
+010005010100050201000508010005020100050101000500010005000100050101000502
+01000504010005020100050201000501010005010101050a010005030100050201000501
+010005020100050a01000503010005020100050101010501010005040100050201000502
+010005030101051a01000009010000040100000101000003010100020100000201000003
+01000005010100030100000101000002010000ff001b0100050a07010504020201030202
+05040001050a0100050501000506010205030102050301020503010205030102050a0102
+050301000500010005020100050201000504010005020100050201000502010105000100
+050b0101050101000502010005020102050b010005040103050101000500010105050100
+0503010205040101051a0100000a01000004010100040101000301020002010400030101
+000401010002010000ff001c0100050a0701050402020103020205040001056901000566
+0100000b0100002a010000ff001d0100050a070105040202010302020504000105650100
+050201000566010000ff00560100050a0701050402020103020205040001056601020567
+010000ff00560100050a070105040202010302020504000105d1010000ff00560100050a
+070105040202010302020504000105d1010000ff00560100050a07010504020201030202
+0504000105d1010000ff00560100050a070105040202010302020504000105d1010000ff
+00560100050a070105040202010302020504000105d101ff0158050a0701050402020103
+02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
+0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
+070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
+05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
+000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
+02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
+0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
+070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
+05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
+000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
+02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
+0202010302020504000105d101ff0158050a070105040202010302020504000105d10100
+00ff00560100050a070105040202010302020504000105d1010000ff00560100050a0701
+05040202010302020504000105d1010000ff00560100050a070105040202010302020504
+000105d1010000ff00560100050a070105040202010302020504000105d1010000ff0056
+0100050a070105040202010302020504000105d1010000ff00560100050a070105040202
+0103020205040001050a0100050201000527010105090102051301000517010305590100
+00ff00560100050a0701050402020103020205040001050a01010501010005260100050a
+010005020100052b0100050201000558010000ff00560100050a07010504020201030202
+05040001050a01010501010005020102050201010500010005030102050a010205040100
+050a01000502010005010100050201000501010005000101050301020502010005000101
+050301010500010005080100050201000501010005000101050301020503010205030102
+0503010205030102050401010528010000ff00560100050a070105040202010302020504
+0001050a0100050001000500010005010100050201000501010005000100050001000501
+010005020100050801000502010005010104050801000502010005010100050201000501
+010105010100050401000502010105010100050101000501010105080100050201000501
+010105010100050101000502010005010100050201000501010005020100050101000502
+01000501010005020100050301010528010000ff00560100050a07010504020201030202
+05040001050a010005000100050001000505010005010100050001000500010005010100
+05020100050801000502010005030100050a010005020100050101000500010005000100
+050101000502010005040100050201000502010005010100050201000508010305020100
+050501000502010005010100050501000502010005010100050501000532010000ff0056
+0100050a0701050402020103020205040001050a01000501010105020103050101000500
+01000500010005010104050801000502010005030100050a010005020100050101000500
+010005000100050101000502010005040100050201000502010005010100050201000508
+010005050100050501000502010005010100050501040502010205030102052f010000ff
+00560100050a0701050402020103020205040001050a0100050101010501010005020100
+05010100050001000500010005010100050c01000502010005030100050a010005020100
+050101000500010005000100050101000502010005040100050201000502010005010100
+050201000508010005050100050501000502010005010100050501000509010005050100
+052e010000ff00560100050a0701050402020103020205040001050a0100050201000501
+010005020100050101000500010005000100050101000502010005080100050201000503
+0100050a0100050201000501010005000100050001000501010005020100050401000502
+010005020100050101000501010105080100050501000505010005020100050101000502
+0100050101000502010005010100050201000501010005020100050301010528010000ff
+00560100050a0701050402020103020205040001050a0100050201000502010305010100
+050001000500010005020102050a010205040100050b0102050301000500010005020100
+050201000504010005020100050201000502010105000100050801000505010005060102
+05030102050301020503010205030102050401010528010000ff00560100050a07010504
+02020103020205040001056901000566010000ff00560100050a07010504020201030202
+0504000105650100050201000566010000ff00560100050a070105040202010302020504
+0001056601020567010000ff00560100050a070105040202010302020504000105d10100
+00ff00560100050a070105040202010302020504000105d1010000ff00560100050a0701
+05040202010302020504000105d1010000ff00560100050a070105040202010302020504
+000105d1010000ff00560100050a070105040202010302020504000105d101ff0158050a
+070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
+05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
+000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
+02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
+0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
+070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
+05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
+000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
+02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
+0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
+070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
+05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
+000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
+02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
+0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
+070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
+05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
+000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
+02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
+0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
+070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
+05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
+000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
+02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
+0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
+070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
+05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
+000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
+02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
+0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
+070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
+05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
+000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
+02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
+0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
+070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
+05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
+000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
+02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
+0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
+070105040202010302020504000107ff07ff073705040202010100040504000007ff07ff
+0738050400050202040005ff05ff054300000202040000000202040005ff05ff05430000
+0202040000000202040005ff05ff054300000202040000000202040005ff05ff05430000
+0202040000000202040005ff05ff0543000002020400000002020400000502ff02ff0237
+00060202040000000208040002ff02ff023700000208040000000208040002ff02ff0237
+00000208040000000208040001ff01ff01370000020804000000040901ff01ff01370000
+0409
+%%EndData
+end
+%%PageTrailer
+%%Trailer
+%%BoundingBox: 0 60 377 354
+%%EOF
diff --git a/lib/tv/doc/src/make.dep b/lib/tv/doc/src/make.dep
new file mode 100644
index 0000000000..8437e320c6
--- /dev/null
+++ b/lib/tv/doc/src/make.dep
@@ -0,0 +1,32 @@
+# ----------------------------------------------------
+# >>>> Do not edit this file <<<<
+# This file was automaticly generated by
+# /home/otp/bin/docdepend
+# ----------------------------------------------------
+
+
+# ----------------------------------------------------
+# TeX files that the DVI file depend on
+# ----------------------------------------------------
+
+book.dvi: book.tex part.tex ref_man.tex table_visualizer_chapter.tex \
+ tv.tex
+
+# ----------------------------------------------------
+# Source inlined when transforming from source to LaTeX
+# ----------------------------------------------------
+
+book.tex: ref_man.xml
+
+# ----------------------------------------------------
+# Pictures that the DVI file depend on
+# ----------------------------------------------------
+
+book.dvi: info_window.ps set_poll_int.ps tv_create_table.ps \
+ tv_record_editor_mnesia.ps tv_row_marked.ps \
+ tv_row_marked_popup.ps tv_search_result.ps \
+ tv_search_window.ps tv_start.ps tv_start_mnesia.ps \
+ tv_start_other_node.ps tv_start_pid_sorted.ps \
+ tv_start_system.ps tv_start_system_unreadable.ps \
+ tv_table_browser.ps tv_table_browser_updated.ps
+
diff --git a/lib/tv/doc/src/note.gif b/lib/tv/doc/src/note.gif
new file mode 100644
index 0000000000..6fffe30419
--- /dev/null
+++ b/lib/tv/doc/src/note.gif
Binary files differ
diff --git a/lib/tv/doc/src/notes.xml b/lib/tv/doc/src/notes.xml
new file mode 100644
index 0000000000..62fab2f0f1
--- /dev/null
+++ b/lib/tv/doc/src/notes.xml
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="latin1" ?>
+<!DOCTYPE chapter SYSTEM "chapter.dtd">
+
+<chapter>
+ <header>
+ <copyright>
+ <year>2004</year><year>2009</year>
+ <holder>Ericsson AB. All Rights Reserved.</holder>
+ </copyright>
+ <legalnotice>
+ The contents of this file are subject to the Erlang Public License,
+ Version 1.1, (the "License"); you may not use this file except in
+ compliance with the License. You should have received a copy of the
+ Erlang Public License along with this software. If not, it can be
+ retrieved online at http://www.erlang.org/.
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ the License for the specific language governing rights and limitations
+ under the License.
+
+ </legalnotice>
+
+ <title>TV Release Notes</title>
+ <prepared>otp_appnotes</prepared>
+ <docno>nil</docno>
+ <date>nil</date>
+ <rev>nil</rev>
+ <file>notes.xml</file>
+ </header>
+ <p>This document describes the changes made to the TV application.</p>
+
+<section><title>TV 2.1.4.4</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ The documentation is now built with open source tools
+ (xsltproc and fop) that exists on most platforms. One
+ visible change is that the frames are removed.</p>
+ <p>
+ Own Id: OTP-8201</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>TV 2.1.4.3</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Updated the application with new tags for automatic updates
+ of copyright notices.
+ </p>
+ <p>
+ Own Id: OTP-7851
+ </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>TV 2.1.4.2</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Minor updates.</p>
+ <p>
+ Own Id: OTP-7261</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+ <section>
+ <title>TV 2.1.4.1</title>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>Minor Makefile changes.</p>
+ <p>Own Id: OTP-6689</p>
+ </item>
+ <item>
+ <p>Obsolete guard tests (such as list()) have been replaced
+ with the modern guard tests (such as is_list()).</p>
+ <p>Own Id: OTP-6728</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>TV 2.1.4</title>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>Removed some dead code from
+ <c>tv_pg_gridfcns:mark_cell_and_notify/4</c>
+ and <c>tv_nodewin:handle_error/1</c>.</p>
+ <p>Own Id: OTP-6455</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>TV 2.1.3</title>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <list type="bulleted">
+ <item>
+ <p>A compiler warning has been fixed.</p>
+ <p>Own Id: OTP-6016</p>
+ </item>
+ </list>
+ </section>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>Notification windows are now centered over a parent
+ window.</p>
+ <p>Own Id: OTP-6014 Aux Id: OTP-5987</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>TV 2.1.2</title>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <list type="bulleted">
+ <item>
+ <p>Some dead code reported by Dialyzer was eliminated. </p>
+ <p>A
+ bug in 'dbg' when tracing to wrap trace files has been
+ corrected. It failed to delete any already existing wrap
+ trace files with the same names when starting a new wrap
+ trace.</p>
+ <p>Own Id: OTP-5329</p>
+ </item>
+ <item>
+ <p>The graphic applications now search for HTML
+ documentation in the correct place.</p>
+ <p>Own Id: OTP-5381</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>TV 2.1.1</title>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <list type="bulleted">
+ <item>
+ <p>TV no longer crashes on Mac OS X. (Thanks to Sean Hinde.)</p>
+ <p>Own Id: OTP-5219</p>
+ </item>
+ </list>
+ </section>
+ </section>
+</chapter>
+
+
diff --git a/lib/tv/doc/src/part.xml b/lib/tv/doc/src/part.xml
new file mode 100644
index 0000000000..e6c94fa0b8
--- /dev/null
+++ b/lib/tv/doc/src/part.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="latin1" ?>
+<!DOCTYPE part SYSTEM "part.dtd">
+
+<part xmlns:xi="http://www.w3.org/2001/XInclude">
+ <header>
+ <copyright>
+ <year>1997</year><year>2009</year>
+ <holder>Ericsson AB. All Rights Reserved.</holder>
+ </copyright>
+ <legalnotice>
+ The contents of this file are subject to the Erlang Public License,
+ Version 1.1, (the "License"); you may not use this file except in
+ compliance with the License. You should have received a copy of the
+ Erlang Public License along with this software. If not, it can be
+ retrieved online at http://www.erlang.org/.
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ the License for the specific language governing rights and limitations
+ under the License.
+
+ </legalnotice>
+
+ <title>TV User's Guide</title>
+ <prepared>Fredrik Gustafson</prepared>
+ <docno></docno>
+ <date>1997-06-04</date>
+ <rev>1.0.1</rev>
+ <file>part.xml</file>
+ </header>
+ <description>
+ <p>The Table Visualizer application, <em>TV</em>, enables the user
+ to examine ETS and Mnesia tables. Once a certain table has been
+ opened in the tool, the content may be viewed in various levels
+ of detail.</p>
+ </description>
+ <xi:include href="table_visualizer_chapter.xml"/>
+</part>
+
+
diff --git a/lib/tv/doc/src/part_notes.xml b/lib/tv/doc/src/part_notes.xml
new file mode 100644
index 0000000000..7a5b359592
--- /dev/null
+++ b/lib/tv/doc/src/part_notes.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="latin1" ?>
+<!DOCTYPE part SYSTEM "part.dtd">
+
+<part xmlns:xi="http://www.w3.org/2001/XInclude">
+ <header>
+ <copyright>
+ <year>2004</year><year>2009</year>
+ <holder>Ericsson AB. All Rights Reserved.</holder>
+ </copyright>
+ <legalnotice>
+ The contents of this file are subject to the Erlang Public License,
+ Version 1.1, (the "License"); you may not use this file except in
+ compliance with the License. You should have received a copy of the
+ Erlang Public License along with this software. If not, it can be
+ retrieved online at http://www.erlang.org/.
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ the License for the specific language governing rights and limitations
+ under the License.
+
+ </legalnotice>
+
+ <title>TV Release Notes</title>
+ <prepared></prepared>
+ <docno></docno>
+ <date>2004-09-07</date>
+ <rev>1.0</rev>
+ <file>part_notes.sgml</file>
+ </header>
+ <description>
+ <p>The Table Visualizer application, <em>TV</em>, enables the user
+ to examine ETS and Mnesia tables. Once a certain table has been
+ opened in the tool, the content may be viewed in various levels
+ of detail.</p>
+ </description>
+ <xi:include href="notes.xml"/>
+</part>
+
+
diff --git a/lib/tv/doc/src/ref_man.xml b/lib/tv/doc/src/ref_man.xml
new file mode 100644
index 0000000000..56e0798cf1
--- /dev/null
+++ b/lib/tv/doc/src/ref_man.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="latin1" ?>
+<!DOCTYPE application SYSTEM "application.dtd">
+
+<application xmlns:xi="http://www.w3.org/2001/XInclude">
+ <header>
+ <copyright>
+ <year>1997</year><year>2009</year>
+ <holder>Ericsson AB. All Rights Reserved.</holder>
+ </copyright>
+ <legalnotice>
+ The contents of this file are subject to the Erlang Public License,
+ Version 1.1, (the "License"); you may not use this file except in
+ compliance with the License. You should have received a copy of the
+ Erlang Public License along with this software. If not, it can be
+ retrieved online at http://www.erlang.org/.
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ the License for the specific language governing rights and limitations
+ under the License.
+
+ </legalnotice>
+
+ <title>TV Reference Manual</title>
+ <prepared>Fredrik Gustafson</prepared>
+ <docno></docno>
+ <date>1997-06-04</date>
+ <rev>1.0.1</rev>
+ <file>application.sgml</file>
+ </header>
+ <description>
+ <p>The TV application enables the user
+ to examine ETS and Mnesia tables. Once a certain table has been
+ opened in the tool, the content may be viewed in various levels
+ of detail.</p>
+ </description>
+ <xi:include href="tv.xml"/>
+</application>
+
+
diff --git a/lib/tv/doc/src/set_poll_int.gif b/lib/tv/doc/src/set_poll_int.gif
new file mode 100644
index 0000000000..c09c84322f
--- /dev/null
+++ b/lib/tv/doc/src/set_poll_int.gif
Binary files differ
diff --git a/lib/tv/doc/src/set_poll_int.ps b/lib/tv/doc/src/set_poll_int.ps
new file mode 100644
index 0000000000..cceb30486f
--- /dev/null
+++ b/lib/tv/doc/src/set_poll_int.ps
@@ -0,0 +1,483 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (ImageMagick)
+%%Title: (./set_poll_int.tmp.eps)
+%%CreationDate: (Tue Jun 12 16:08:39 2001)
+%%BoundingBox: 0 17 200 154
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 0
+%%EndComments
+
+%%BeginDefaults
+%%PageOrientation: Portrait
+%%EndDefaults
+
+%%BeginProlog
+%
+% Display a color image. The image is displayed in color on
+% Postscript viewers or printers that support color, otherwise
+% it is displayed as grayscale.
+%
+/buffer 512 string def
+/byte 1 string def
+/color_packet 3 string def
+/pixels 768 string def
+
+/DirectClassPacket
+{
+ %
+ % Get a DirectClass packet.
+ %
+ % Parameters:
+ % red.
+ % green.
+ % blue.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/DirectClassImage
+{
+ %
+ % Display a DirectClass image.
+ %
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { DirectClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayDirectClassPacket } image
+ } ifelse
+} bind def
+
+/GrayDirectClassPacket
+{
+ %
+ % Get a DirectClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % red
+ % green
+ % blue
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/GrayPseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassImage
+{
+ %
+ % Display a PseudoClass image.
+ %
+ % Parameters:
+ % class: 0-PseudoClass or 1-Grayscale.
+ %
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ class 0 gt
+ {
+ currentfile buffer readline pop
+ token pop /depth exch def pop
+ /grays columns 8 add depth sub depth mul 8 idiv string def
+ columns rows depth
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { currentfile grays readhexstring pop } image
+ }
+ {
+ %
+ % Parameters:
+ % colors: number of colors in the colormap.
+ % colormap: red, green, blue color packets.
+ %
+ currentfile buffer readline pop
+ token pop /colors exch def pop
+ /colors colors 3 mul def
+ /colormap colors string def
+ currentfile colormap readhexstring pop pop
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { PseudoClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayPseudoClassPacket } image
+ } ifelse
+ } ifelse
+} bind def
+
+/DisplayImage
+{
+ %
+ % Display a DirectClass or PseudoClass image.
+ %
+ % Parameters:
+ % x & y translation.
+ % x & y scale.
+ % label pointsize.
+ % image label.
+ % image columns & rows.
+ % class: 0-DirectClass or 1-PseudoClass.
+ % compression: 0-RunlengthEncodedCompression or 1-NoCompression.
+ % hex color packets.
+ %
+ gsave
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ x y translate
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ currentfile buffer readline pop
+ token pop /pointsize exch def pop
+ /Helvetica findfont pointsize scalefont setfont
+ x y scale
+ currentfile buffer readline pop
+ token pop /columns exch def
+ token pop /rows exch def pop
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ currentfile buffer readline pop
+ token pop /compression exch def pop
+ class 0 gt { PseudoClassImage } { DirectClassImage } ifelse
+ grestore
+} bind def
+%%EndProlog
+%%Page: 1 1
+%%PageBoundingBox: 0 17 200 154
+userdict begin
+%%BeginData:
+DisplayImage
+0 17
+200.000000 137.000000
+12
+315 215
+1
+0
+0
+16
+ffffff
+000000
+d8d8d8
+c2c2c2
+6b6b6b
+d9d9d9
+828282
+aa2455
+c3c3c3
+000000
+000000
+000000
+000000
+000000
+000000
+000000
+000a01ff0124000b0208040001ff012400000208040000000208040002ff022400000208
+0400000002080400020000ff0021040002000000020804000000020204060200000004ff
+0421020000000405020204000000020204000209000d02ff021800000202040000000202
+040002080000020d04000281010102020101023701010254000002020400000002020400
+02080000020d040002580103020b010002070104020a01010202010102060101020b0100
+02210101025400000202040000000202040002080000020d040002570101020101010209
+01010207010102010101020901010202010102060101020a010102210101025400000202
+040000000202040002080000020204060203040002570101020601030201010402050101
+020101010201010302030101020201010206010102020101020001010201010402010103
+020201010200010102000101020101010202010302030101025400000202040000000403
+020800000202040003040000020304000257010202040101020101010201010102070101
+020101010200010102010101020201010202010102060101020201020200010102010101
+020201010201010102010101020001010200010102010101020101010201010102020101
+0254000004030101020b0000020304000302000002040400025801030202010102010101
+020101010207010102010100020101010201010102020101020201010206010102020101
+020101010201010102020101020101010201010202020101020101010205010102020101
+02570103020b0000020304000302000002040400025a0102020101050201010102070103
+020201010201010102020101020201010206010102020101020101010201010102020105
+020101010204010102000100020301040202010102570103020b00000204040003000000
+02050400025b010102010101020501010207010102040101020101010202010102020101
+020601010202010102010101020101010202010102050101020401010200010002020101
+020101010202010102570103020b00000204040003000000020504000257010102010101
+020101010202010002010101020701010204010102010101020201010202010102060101
+020201010201010102010101020201010202010002010101020501010203010102010101
+0202010102570103020b0000020500000206040002580103020301030203010202050101
+020501030203010102020101020601010202010102010101020201020201010302020101
+0205010102040102020001010201010102570103020b0000020d040002ff021a0103020b
+0000020d040002ff021a0103020b0000020d040002ff021a0103020c040d02ff021b0103
+02ff0236010302ff02360103020200ff002f0400020201030202000004ff042f02020103
+02ff02360103020205ff053002020103020205ff053002020103020205ff053002020103
+020205ff053002020103020205ff053002020103020205ff053002020103020205ff0530
+02020103020205ff053002020103020205ff053002020103020205ff0530020201030202
+05e5003b050e02020103020205e5003a0600050e02020103020205e5000105370601050e
+02020103020205e5000105370601050e02020103020205e5000105370601050e02020103
+020205e5000105370601050e02020103020205e5000105370601050e02020103020205e5
+000105370601050e02020103020205e5000105370601050e020201030202051b000105c7
+000105150102050201000502010005160601050e020201030202051a0003050b01000503
+0100051e010205090103050a010205030102050501000568000105140100050201000501
+01000501010005170601050e02020103020205190005050a010005030100052001000509
+010005020100050b010005050100056f0001051401000502010005010100050001000518
+0601050e0202010302020518000205010002050901010501010105020102050201000500
+010105020100050201000502010205050100050901000502010005020102050501000505
+010005030102050201000500010105030101050001000559000105140100050201000501
+010105190601050e02020103020205170002050300020508010105010101050101000502
+010005010101050101000501010005020100050101000502010005040100050901000502
+010005010100050201000504010005050100050501000502010105010100050101000501
+0101055900010514010005020100050101000500010005180601050e0202010302020516
+000205050002050701000500010105000100050501000501010005020100050101000502
+010005050100050401000509010305020100050201000504010005050100050501000502
+010005020100050101000502010005590001051401000502010005010100050101000517
+0601050e0202010302020515060205070602050601000500010105000100050201030501
+010005020100050101000502010005020103050401000509010005050100050201000504
+010005050100050501000502010005020100050101000502010005590001051401000502
+0100050101000501010005170601050e0202010302020516060205050602050701000503
+010005010100050201000501010005020100050101000502010005010100050201000504
+010005090100050501000502010005040100050501000505010005020100050201000501
+010005020100055900010514010005020100050101000502010005160601050e02020103
+020205170602050306020508010005030100050101000502010005010100050201000501
+010005010101050101000502010005040100050901000505010005020100050401000505
+010005050100050201000502010005010100050101010559000105150102050201000502
+010005160601050e02020103020205180602050106020509010005030100050201030501
+010005020100050201010500010005020103050401000509010005060102050501000505
+010005050100050201000502010005020101050001000559000105370601050e02020103
+020205190605056a01000559000105370601050e020201030202051a0603056701000502
+01000559000105370601050e020201030202051b060105690102055a000105370601050e
+02020103020205e5000105370601050e02020103020205e5000105370601050e02020103
+020205e5000105370601050e02020103020205e5000105370601050e02020103020205e5
+000105370601050e02020103020205e5000105370601050e02020103020205e500010639
+050e02020103020205e50000063a050e02020103020205ff053002020103020205ff0530
+02020103020205ff053002020103020205ff053002020103020205ff0530020201030202
+05ff053002020103020205ff053002020103020205ff053002020103020205ff05300202
+0103020205ff053002020103020205ff053002020103020205ff053002020103020205ff
+053002020103020205ff053002020103020205ff053002020103020205ff053002020103
+020205ff053002020103020205ff053002020103020205ff053002020103020205ff0530
+02020103020205e5003b050e02020103020205e5003a0600050e02020103020205e50001
+05370601050e02020103020205e5000105370601050e02020103020205e5000105370601
+050e02020103020205e5000105370601050e02020103020205e5000105370601050e0202
+0103020205e5000105370601050e02020103020205e5000105370601050e020201030202
+051a060105c8000105070102051f010205090601050e02020103020205190603050e0100
+050c0100051a01000506010005100103050a010205030102050501000554000105060100
+050201000520010005090601050e02020103020205180605050d0100050c0100051a0100
+0518010005020100050b010005050100055b000105060100050201000502010205020100
+0500010105030102050301020505010005090601050e0202010302020517060207010602
+050b01000500010005020100050201000501010405020102050201010500010005030102
+050201040502010205030102050901000502010005020102050501000505010005030102
+050201000500010105030101050001000545000105060100050501000502010005010101
+05010100050101000502010005010100050201000504010005090601050e020201030202
+0516060207030602050a0100050001000502010005020100050301000503010005020100
+050101000500010005000100050101000502010005030100050601000502010005020100
+050801000502010005010100050201000504010005050100050501000502010105010100
+050101000501010105450001050601000509010005010100050201000501010005050100
+050201000504010005090601050e02020103020205150602070506020509010005000100
+050201000502010005030100050301000502010005010100050001000500010005050100
+050301000506010005020100050c01030502010005020100050401000505010005050100
+050201000502010005010100050201000545000105060100050601030501010005020100
+05010100050501040504010005090601050e020201030202051400020707000205070100
+050201000501010005020100050301000503010005020100050101000500010005000100
+05020103050301000506010005020100050c010005050100050201000504010005050100
+050501000502010005020100050101000502010005450001050601000502010005010100
+05020100050101000502010005010100050501000508010005090601050e020201030202
+051500020705000205080104050101000502010005030100050301000502010005010100
+05000100050001000501010005020100050301000506010005020100050c010005050100
+050201000504010005050100050501000502010005020100050101000502010005450001
+050601000502010005010100050201000501010005020100050101000502010005010100
+050201000504010005090601050e02020103020205160002070300020509010005020100
+050101000501010105030100050301000502010005010100050001000500010005010100
+050201000503010005060100050201000502010005080100050501000502010005040100
+050501000505010005020100050201000501010005010101054500010507010205030103
+050101000502010005020102050301020505010005090601050e02020103020205170002
+07010002050a010005020100050201010500010005040101050201020502010005000100
+050001000502010305040101050401000503010205090100050601020505010005050100
+05050100050201000502010005020101050001000545000105370601050e020201030202
+05180005057f01000545000105370601050e02020103020205190003057c010005020100
+0545000105370601050e020201030202051a0001057e01020546000105370601050e0202
+0103020205e5000105370601050e02020103020205e5000105370601050e020201030202
+05e5000105370601050e02020103020205e5000105370601050e02020103020205e50001
+05370601050e02020103020205e5000105370601050e02020103020205e500010639050e
+02020103020205e50000063a050e02020103020205ff053002020103020205ff05300202
+0103020205ff053002020103020205ff053002020103020205ff053002020103020205ff
+053002020103020205ff053002020103020205ff053002020103020205ff053002020103
+020205ff053002020103020205ff053002020103020205ff053002020103020205ff0530
+02020103020205ff053002020103020205ff053002020103020205ff0530020201030202
+05ff053002020103020205ff053002020103020205ff0530020201030202057601000534
+0100058202020103020205110103050a01020503010205090104050a010005200102050b
+0100052a0100050a010005810202010302020511010005020100050b010005050100050b
+0100050c010005220100050b0100052a0100050a01000581020201030202051101000502
+0100050201020505010005050100050b0100050301000500010105020104050201020502
+01000500010105020100050201000502010205050100050a010005050102050301020503
+010205030102050201000500010105030101050001000502010205050100050401010579
+020201030202051101000502010005010100050201000504010005050100050b01000503
+010105010100050301000503010005020100050101010501010005010100050201000501
+01000502010005040100050a010005040100050201000501010005020100050101000502
+010005010100050201000501010105010100050101000501010105010100050201000504
+01000504010105790202010302020511010305020100050201000504010005050100050b
+010005030100050201000503010005030100050201000501010005050100050201000505
+010005040100050a01000504010005050100050201000501010005050100050201000501
+010005020100050101000502010005010100050801000580020201030202051101000505
+0100050201000504010005050100050b0100050301000502010005030100050301040501
+010005060100050001000503010305040100050a01000505010205020104050101000505
+010005020100050101000502010005010100050201000502010205050100058002020103
+02020511010005050100050201000504010005050100050b010005030100050201000503
+010005030100050501000506010005000100050201000502010005040100050a01000508
+010005010100050501000505010005020100050101000502010005010100050201000505
+01000504010005800202010302020511010005050100050201000504010005050100050b
+010005030100050201000503010005030100050201000501010005070100050301000502
+010005040100050b01000503010005020100050101000502010005010100050201000501
+010005020100050101000502010005010100050101010501010005020100050301000505
+010105790202010302020511010005060102050501000505010005090104050101000502
+0100050401010502010205020100050701000504010305040100050b0100050401020503
+010205030102050301020502010005020100050201010500010005020102050401000505
+010105790202010302020576010005340100058202020103020205ff0530020201030202
+05ff053002020103020205ff053002020103020205ff053002020103020205ff05300202
+0103020205ff053002020103020205ff053002020103020205ff053002020103020205ff
+053002020103020205ff053002020103020205ff053002020103020205ff053002020103
+020205ff053002020103020205ff053002020103020205ff053002020103020205ff0530
+02020103020205ff053002020103020205ff0530020201030202056f0100050401020504
+010105b0020201030202056e01010503010005020100050201000501010005af02020103
+0202056d01000500010005070100050201000501010005af020201030202056f01000507
+0100050201000501010005af020201030202056f010005060100050301000501010005af
+020201030202056f010005050100050401000501010005af020201030202056f01000504
+0100050501000501010005af020201030202056f010005030100050601000501010005af
+020201030202056d0104050101040503010105b002020103020205ff0530020201030202
+05ff053002020103020205ff053002020103020205ff053002020103020205ff05300202
+01030202050d06ff0614050d020201030202050d06ff06130000050d020201030202050d
+06010856001d089b0001050d020201030202050d06010856001c0600089b0001050d0202
+01030202050d060108560001050b06000000050b0601089b0001050d020201030202050d
+060108560001050b06000000050b0601089b0001050d020201030202050d060108560001
+050b06000000050b0601089b0001050d020201030202050d060108560001050b06000000
+050b0601089b0001050d020201030202050d060108560001050b06000000050b0601089b
+0001050d020201030202050d060108560001050b06000000050b0601089b0001050d0202
+01030202050d060108560001050b06000000050b0601089b0001050d020201030202050d
+060108560001050b06000000050b0601089b0001050d020201030202050d060108560001
+050b06000000050b0601089b0001050d020201030202050d060108560001050b06000000
+050b0601089b0001050d020201030202050d060108560001050b06000000050b0601089b
+0001050d020201030202050d060108560001060c0000060d089b0001050d020201030202
+050d060108560000061c089b0001050d020201030202050d060100ff0012050d02020103
+0202050d060000ff0013050d02020103020205ff053002020103020205ff053002020103
+020205ff053002020103020205ff053002020103020205ff053002020103020205ff0530
+02020103020205ff053002020103020205ff053002020101000405ff0530000502020400
+05ff053000000202040000000202040005ff053000000202040000000202040005ff0530
+00000202040000000202040005ff053000000202040000000202040005ff053000000202
+0400000002020400000502ff022400060202040000000208040002ff0224000002080400
+00000208040002ff022400000208040000000208040001ff012400000208040000000409
+01ff012400000409
+%%EndData
+end
+%%PageTrailer
+%%Trailer
+%%BoundingBox: 0 17 200 154
+%%EOF
diff --git a/lib/tv/doc/src/table_visualizer_chapter.xml b/lib/tv/doc/src/table_visualizer_chapter.xml
new file mode 100644
index 0000000000..12efbe643c
--- /dev/null
+++ b/lib/tv/doc/src/table_visualizer_chapter.xml
@@ -0,0 +1,652 @@
+<?xml version="1.0" encoding="latin1" ?>
+<!DOCTYPE chapter SYSTEM "chapter.dtd">
+
+<chapter>
+ <header>
+ <copyright>
+ <year>1997</year><year>2009</year>
+ <holder>Ericsson AB. All Rights Reserved.</holder>
+ </copyright>
+ <legalnotice>
+ The contents of this file are subject to the Erlang Public License,
+ Version 1.1, (the "License"); you may not use this file except in
+ compliance with the License. You should have received a copy of the
+ Erlang Public License along with this software. If not, it can be
+ retrieved online at http://www.erlang.org/.
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ the License for the specific language governing rights and limitations
+ under the License.
+
+ </legalnotice>
+
+ <title>The Table Visualizer</title>
+ <prepared>EPK/TK Fredrik Gustafson</prepared>
+ <responsible></responsible>
+ <docno></docno>
+ <approved>EPK/TK (Fredrik Gustafson)</approved>
+ <checked></checked>
+ <date>1998-01-19</date>
+ <rev>C</rev>
+ <file>table_visualizer.xml</file>
+ </header>
+ <p>The TV, TV, is a tool that enables the user to examine
+ ETS and Mnesia tables on any (connected) node in the currently running Erlang
+ system. Once a certain table has been opened in the tool, the content may be
+ viewed in various levels of detail. The content may also be edited, as well as
+ sorted, using any element as key. It is also possible to search for a specified object or
+ element. The table may be polled anytime, either regularly, at specified
+ intervals, or manually. New and deleted objects, as well as those altered, are
+ marked with characteristic colours.</p>
+ <p>Information about the table itself (permissions, storage type, and so on) may
+ also be obtained.
+ </p>
+
+ <section>
+ <title>Terminology and Background</title>
+ <p>To avoid confusion, we have to distinguish between the <em>actual table</em>, i.e.,
+ the data stored in ETS or Mnesia, and the <em>image of the table</em>, i.e., the
+ data shown in the TV. The <em>image of the table</em> is simply a copy
+ of the <em>actual table</em>, and can be manipulated in a number of ways, for example
+ sorted. It follows that these manipulations in no way affects the <em>actual table</em>!</p>
+ <p>The expression <em>poll the table</em> is used for the operation of scanning through the
+ content of the actual table (in order to keep the image of the table consistent with the
+ actual table).</p>
+ <p>The ETS and Mnesia modules provides the user with the ability to store vast quantities
+ of data in, the data organized as dynamic, unordered tables. The ETS
+ facility stores <em>tuples</em>, while Mnesia stores <em>records</em>.
+ Each tuple consists of one or more <em>elements</em>; each record consists of one or
+ more <em>fields</em>. It should be noted that, since records are implemented as tuples,
+ with the record name as the first element, the first field of a record becomes the second
+ element in the corresponding tuple!
+ <br></br>
+
+ In the following, all table objects are mainly referred to as tuples, regardless of the
+ table type.</p>
+ <p>For further information about ETS and Mnesia, please see the manual pages and Mnesia User's Guide.</p>
+ </section>
+
+ <section>
+ <title>Starting the TV</title>
+ <p>The TV tool is started by giving the command</p>
+ <pre>
+ tv:start().
+ </pre>
+ <p>The window that appears, is hereafter referred to as <em>the TV main window</em>. It consists of:</p>
+ <list type="bulleted">
+ <item>
+ <p>a <em>menubar</em>.</p>
+ </item>
+ <item>
+ <p>a <em>grid</em>, i.e., a multicolumnar array, where tables existing on
+ the current node is shown. Each square in the grid is called a <em>cell</em>.</p>
+ </item>
+ </list>
+ <image file="tv_start.gif">
+ <icaption>The TV Main Window at startup.</icaption>
+ </image>
+ <p>For each table, the following information is shown, in order:
+ </p>
+ <list type="bulleted">
+ <item>
+ <p>the <em>table name</em>. If the table is accessible through this name, as is the
+ case with Mnesia tables and named ETS tables, the table name is shown in
+ black, otherwise in medium grey.</p>
+ </item>
+ <item>
+ <p>the <em>table identifier</em>, if there is one; since Mnesia tables are accessed
+ solely through the table name, this cell will in those cases be blank.</p>
+ </item>
+ <item>
+ <p>the <em>process identifier (PID) of the process owning the table</em>.</p>
+ </item>
+ <item>
+ <p>the <em>name of the process owning the table</em>, provided the process
+ is registered.</p>
+ </item>
+ <item>
+ <p>the <em>table size</em>, i.e., the number of objects currently stored in
+ the table.</p>
+ </item>
+ </list>
+ </section>
+
+ <section>
+ <title>Changing View</title>
+ <p>The TV will by default show currently existing ETS tables,
+ but the user may easily switch to a Mnesia table view, by choosing the
+ <em>Mnesia Tables</em> option in the <em>View</em> menu:
+ </p>
+ <image file="tv_start_mnesia.gif">
+ <icaption>The TV Main Window, showing Mnesia tables.</icaption>
+ </image>
+ <p>Normally, system tables (i.e., tables used by system applications) and unreadable
+ tables are not shown. The menu option <em>System Tables</em>, in the <em>Options</em>
+ menu, makes the system tables visible:
+ </p>
+ <image file="tv_start_system.gif">
+ <icaption>The TV Main Window, showing readable user and system tables.</icaption>
+ </image>
+ <p>Still unreadable tables are hidden, but the menu option <em>Unreadable Tables</em>,
+ also in the <em>Options</em> menu, makes even those tables visible. It shall be noted
+ that rows containing unreadable tables are shaded, using a grey colour:
+ </p>
+ <image file="tv_start_system_unreadable.gif">
+ <icaption>The TV Main Window, showing both readable and unreadable user and system tables.</icaption>
+ </image>
+ <p>Once a table view has been opened, the user may choose how to view it: it may be sorted
+ by the table names, by the table identifiers, by the process identifiers of the owner
+ processes, or by the names of the owning processes. These sorting options are found in the
+ <em>Options</em> menu.
+ </p>
+ <image file="tv_start_pid_sorted.gif">
+ <icaption>The TV Main Window, tables sorted by owner PID.</icaption>
+ </image>
+ </section>
+
+ <section>
+ <title>Changing the Current Node</title>
+ <p>By default, the Table Vizualizer will show tables residing on the node
+ it was started from. However, the user may easily view tables on other nodes.
+ By choosing the <em>Nodes</em> option, in the <em>File</em> menu, a window showing
+ all connected nodes will appear. Clicking on any of the nodes in the list will cause
+ the main window to immediately show the tables residing on the specified node:
+ </p>
+ <image file="tv_start_other_node.gif">
+ <icaption>The Connected Nodes window, and the TV Main Window, showing tables on the selected node.</icaption>
+ </image>
+ </section>
+
+ <section>
+ <title>Opening a Table in the Table Browser</title>
+ <p>Whenever a table shall be opened, the first step is to choose the corresponding
+ <em>Table Name</em> or <em>Table ID</em> cell. Secondly, the <em>Open Table</em>
+ menu item, in the <em>File</em> menu, has to be chosen. (Or, one may directly
+ double-click on a <em>Table Name</em> or <em>Table Id</em> cell.)</p>
+ <p>If the table selected table is readable, a window will appear after a short delay. This new
+ window is hereafter denoted the <em>Table Browser</em> window. Should the table be
+ unreadable, the Table Information window will appear instead (see further description
+ below).
+ </p>
+
+ <section>
+ <title>The Table Browser Window</title>
+ <p>The Table Browser window consists of:</p>
+ <list type="bulleted">
+ <item>
+ <p>a <em>menubar</em>.</p>
+ </item>
+ <item>
+ <p>a <em>toolbar</em> with buttons providing shortcuts to the menubar options. If the
+ cursor rests on any button, a so-called toolbar tip, explaining the button,
+ will appear. <br></br>
+
+ (In the picture below, the cursor has lingered on the <em>Open Table</em>
+ button for a while.)</p>
+ </item>
+ <item>
+ <p>a <em>content and edit field</em>, showing the content of a specified row or cell.
+ Through this field the row, or cell, may also be edited (see below for a detailed
+ description).</p>
+ </item>
+ <item>
+ <p>a <em>grid</em>, i.e., a multicolumnar array, where the content of the
+ opened table will be shown. (As above, each square in the grid is called a cell.</p>
+ </item>
+ </list>
+ <image file="tv_table_browser.gif">
+ <icaption>The Table Browser Window.</icaption>
+ </image>
+ <p>The successful appearance of the Table Browser window means that an image of
+ the selected table has been created in the TV. It is this image
+ that is shown in the Table Browser.
+ </p>
+
+ <section>
+ <title>How Table Data Is Presented</title>
+ <p>Each object in the table is presented on a row of its own in the grid.
+ Each element in the object is presented in a cell of its own. <br></br>
+
+ The colours on the <em>vertical</em> buttons to the left of the grid show the status
+ of the object on that very row: a bright red colour indicates that the object just
+ has been inserted (when the table is opened, all objects are regarded as being
+ just inserted), while a bright green colour indicates that the object has been
+ changed. The colour fades away, shade by shade, every time the actual table is polled,
+ until the normal background colour is encountered. <br></br>
+
+ When an object has been deleted, the colour of the corresponding
+ <em>vertical button</em> turns to black. The next time the table is polled, the
+ object will be removed from the grid.</p>
+ <image file="tv_table_browser_updated.gif">
+ <icaption>The Table Browser Window, with new, changed, and deleted objects.</icaption>
+ </image>
+ <p>Normally, new objects are placed at the end of the grid, while all other objects
+ maintain their positions between successive polls. However, when sorting mode has
+ been ordered, all objects, even new ones, are placed at the correct position
+ according to the sorting ordered (see also below).</p>
+ <p>Immediately above the <em>horizontal buttons</em>, one or more <em>keys</em> may
+ appear. These keys indicates which elements that are used as indices in the
+ ETS/Mnesia table, i.e., which fields that are used by ETS/Mnesia as search keys when
+ looking up data.</p>
+ <p>The grid columns may be resized, by clicking and dragging on the small black <em>resize areas</em> between any two horizontal buttons.</p>
+ <p>The rows are enumerated, as a help when navigating through the table. Note: it shall
+ not be assumed that these numbers correspond to the placement of the objects in the
+ <em>actual table</em>! The row numbers, as presented in the TV, are
+ only temporary, and only valid within the TV!
+ <br></br>
+
+ The number on the <em>vertical scrollbar</em> corresponds to the number the
+ uppermost row has (or will have).</p>
+ <p>The number shown on the horizontal scrollbar relates to the leftmost column shown.</p>
+ </section>
+
+ <section>
+ <title>How to Poll the Table</title>
+ <p>The table is polled whenever the <em>Poll Table</em> option in the <em>Options</em>
+ menu is chosen (or the <em>Poll Table</em> toolbar button is pressed). <br></br>
+
+ The user may also choose to let the TV poll the table at regular
+ intervals. This is done via the <em>Set Poll Interval...</em> option in the
+ <em>Options</em> menu, which causes the <em>Set Poll Interval window</em> to appear. </p>
+ <p>In the Set Poll Interval window the user selects whether manual or automatic
+ polling shall be used, and, in the automatic polling case, the poll interval.</p>
+ <image file="set_poll_int.gif">
+ <icaption>The Set Poll Interval Window.</icaption>
+ </image>
+ <p>It shall be noted that, in the case of a large table (or a slow computer/operating
+ system), a short poll interval may cause the TV to be flooded, i.e., the
+ data resulting from one poll has not been fully treated and presented when the data from
+ the next poll arrives. The user is therefore kindly requested to use the automatic
+ polling facility with care!</p>
+ </section>
+
+ <section>
+ <title>How to Edit Objects in the Table</title>
+ <p>Provided that the table is writable for other processes than the owning process,
+ the user may insert, change and delete objects.</p>
+ <p>To <em>delete</em> an object, the corresponding row, or a single cell in the
+ corresponding row, has to be chosen, by clicking either on the vertical button
+ to the left of the row, or on a cell. Thereafter the <em>Delete Object</em>
+ option in the <em>Edit Menu</em>
+ is chosen. (Should the user regret the delete operation, the row may once again
+ be selected, whereupon the <em>Return</em> button simply is pressed.)</p>
+ <p>To <em>insert</em> an object, the user may use the <em>Record Editor</em>, or simply
+ enter the object in the content and edit field, and then press the <em>Return</em>
+ button. <br></br>
+
+ The <em>Record Editor</em> is started via the <em>Edit Object</em> option in the
+ <em>Edit</em> menu, or via the <em>Edit Object</em> toolbar button. The editor that
+ appears looks different depending on the kind of table: for Mnesia tables,
+ a writable field is shown for each record entry, as well as the name of the entry.
+ For ETS tables, only a writable field is shown; this is due to the fact that the
+ size of the tuples inserted in ETS tables may vary, whereas the size of the records
+ inserted in a Mnesia table (more or less) is fixed.
+ One may select the next field in the record editor by pressing
+ the 'Tab' (or 'Arrow Down') button, and select the previous field by pressing
+ 'Shift'+'Tab' (or 'Arrow Up'). <br></br>
+
+ When the editing is finished, the <em>OK</em> button may be clicked, or
+ 'Return' pressed. The TV will then try to insert the new object.
+ </p>
+ <image file="tv_record_editor_mnesia.gif">
+ <icaption>The Record Editor (shown for a Mnesia table).</icaption>
+ </image>
+ <p>To <em>change</em> an already existing object, the corresponding row, or a single cell
+ in the corresponding row, has to be selected first (see below). Then one may edit the
+ whole object (or the selected field in the object), either using the record editor
+ or the content and edit field, whereupon 'Return' may be pressed (or the 'OK' button
+ clicked).
+ </p>
+ <p>It shall be noted that it is hard to edit objects containing
+ <em>process identifiers</em>, <em>references</em>, <em>binaries</em> and <em>ports</em>,
+ since it is only a textual representation of these terms that is shown on the screen.
+ It is in the general case impossible for the TV to correctly
+ convert this textual representation back to the original term. As a courtesy to
+ the user, an attempt to do this will nevertheless be done if the edited field
+ consists of a single process identifier; however, this conversion will only be
+ correct provided
+ that the process identifier originates from the current Erlang session. (On
+ the other hand, why on earth should any user want to store old process identifiers?)
+ </p>
+ <p>It shall also be noted that it may be more or less confusing to edit the table,
+ depending on whether the table type is <em>set</em>, <em>bag</em>, or
+ <em>duplicate_bag</em>, i.e., depending on whether or not objects having the
+ same key (or even duplicate objects) are allowed. Please study the ETS or Mnesia
+ manual pages, should confusion arise!
+ </p>
+ </section>
+
+ <section>
+ <title>How to Search For Objects</title>
+ <p>One may search for an object, by choosing the <em>Search Object</em>
+ option in the <em>Options</em> menu (or by pressing the <em>Search Object</em>
+ toolbar button). In the <em>Search Object window</em> that appears, any valid
+ Erlang term or regular expression may be entered, whereupon all objects
+ containing (or consisting of) this term, or matching the regular expression,
+ will be shown.</p>
+ <image file="tv_search_window.gif">
+ <icaption>The Search Object Window.</icaption>
+ </image>
+ <p>In the search result list, by clicking on any object, the Table Browser will
+ immediately scroll to the corresponding row in the table shown. This enables
+ the user to in a very powerful way quickly find the objects he's interested in.</p>
+ <image file="tv_search_result.gif">
+ <icaption>The Search Object Window interworking with the Table Browser.</icaption>
+ </image>
+ </section>
+
+ <section>
+ <title>How to Mark Table Data</title>
+ <p>One may mark a row or a column by clicking on the buttons to the left and above
+ the grid, respectively. A single cell is marked by clicking on it. Even empty
+ rows and columns may be marked; an empty cell cannot be marked - on the contrary,
+ by clicking on an empty cell, all marks are removed.</p>
+ <p>Marks are indicated by a cyan blue colour.</p>
+ <image file="tv_row_marked.gif">
+ <icaption>The TV Main Window: a row has been marked.</icaption>
+ </image>
+ <p>When a row or a cell has been marked, the content will be shown in the content field,
+ together with an indication of the row (and column when applicable) the marked area
+ corresponds to. Should the object be very big, only a fraction of it may be shown in
+ this field. By clicking on the down-arrow button to the right of the content and
+ edit field, a pop-up content field will be shown, where the whole marked object
+ may be viewed. The content of this pop-up field may be marked and copied to
+ other windows; however, this field cannot be edited.</p>
+ <image file="tv_row_marked_popup.gif">
+ <icaption>The Table Browser: the pop-up content field.</icaption>
+ </image>
+ <p>It shall be noted that the user may choose whether lists shall be shown as
+ strings or lists; this is done via the <em>View</em> menu.
+ </p>
+ <p>A marked column may be subject to sorting, see below. When sorting is ordered,
+ marks are removed at each polling of the table (because of the difficulties to
+ keep track of a certain object, or element, in this case).</p>
+ </section>
+
+ <section>
+ <title>How to Sort Table Data</title>
+ <p>The image of the table may be sorted in rising or falling order, using any element as
+ sorting key. The element desired is chosen by marking the corresponding column, and
+ then choose (either via the <em>Options</em> menu, or via the toolbar buttons) any
+ of the sorting options available, i.e., sorting in ascending or descending order.
+ The colour of the column button will then change to gold, to indicate that this
+ column is the basis for the sorting currently chosen.</p>
+ <p>Should no column have been marked, when sorting is ordered, the first element in each
+ object (i.e, tuple) will be used as sorting key if the table is an ETS table; the
+ second element (i.e., the first field in the record) will be used if the table is a
+ Mnesia table.</p>
+ <p>Even columns with no elements in them may be subject to sorting. In this case the
+ whole object is used as the sorting key.</p>
+ <p>When sorting is ordered, new elements will be inserted according to the current
+ sorting mode. When the sorting is interrupted (via the <em>No Sorting</em> option),
+ the current image of the table keep the current order, but new elements will from
+ now on once again be inserted at the end of the image of the table.</p>
+ </section>
+
+ <section>
+ <title>How to Obtain Table Information</title>
+ <p>Information about the actual table is obtained via the <em>File</em> menu (or via the
+ <em>Table Info</em> toolbar button). The information is printed in a separate window,
+ with similar pieces of information grouped together on "flap cards" of their own.
+ By clicking on a flap, the information on the corresponding card is made visible.</p>
+ <image file="info_window.gif">
+ <icaption>The Table Information Window, showing information about a Mnesia table.</icaption>
+ </image>
+ <p>The Table Information window may also be opened from the TV Main
+ Window, by selecting a table and then choose the <em>Table Info</em> option
+ in the <em>File</em> menu (or by double-clicking on the <em>Table Size</em>
+ field.</p>
+ <p>Note: The Table Information window will automatically be opened if the user tries
+ to open an unreadable table, since this is the only information available in this
+ case.</p>
+ </section>
+ </section>
+
+ <section>
+ <title>The Table Browser Menus</title>
+ <p>The Table Browser offers the following menus:</p>
+ <p></p>
+
+ <section>
+ <title>The File Menu</title>
+ <taglist>
+ <tag><em>Table Info</em></tag>
+ <item>
+ <p>Opens the Table Information window, which shows the available information
+ about the current table. </p>
+ </item>
+ <tag><em>Close</em></tag>
+ <item>
+ <p>Closes the Table Browser window.</p>
+ </item>
+ </taglist>
+ </section>
+
+ <section>
+ <title>The Edit Menu</title>
+ <taglist>
+ <tag><em>Edit Object...</em></tag>
+ <item>
+ <p>Opens the Record Editor. If an object is marked, it will be shown in
+ the Record Editor.</p>
+ </item>
+ <tag><em>Delete Object</em></tag>
+ <item>
+ <p>Deletes a marked object.</p>
+ </item>
+ </taglist>
+ </section>
+
+ <section>
+ <title>The View Menu</title>
+ <taglist>
+ <tag><em>Lists As Lists</em></tag>
+ <item>
+ <p>Causes lists in the table to be shown as lists.</p>
+ </item>
+ <tag><em>Lists As Strings</em></tag>
+ <item>
+ <p>Causes lists in the table to be shown as strings.</p>
+ </item>
+ </taglist>
+ </section>
+
+ <section>
+ <title>The Options Menu</title>
+ <taglist>
+ <tag><em>Poll Table</em></tag>
+ <item>
+ <p>An explicit order to poll the table, i.e., to scan the content.</p>
+ </item>
+ <tag><em>Poll Interval...</em></tag>
+ <item>
+ <p>Choose between manual and automatic polling. In the case of automatic
+ polling, the user gets the opportunity to choose the polling interval.</p>
+ </item>
+ <tag><em>Search Object</em></tag>
+ <item>
+ <p>Enables search for objects containing (or consisting of) a specified
+ Erlang term, or matching a regular pattern. The search result may be used
+ for quick navigation in the table.</p>
+ </item>
+ <tag><em>Sort Ascending Order</em></tag>
+ <item>
+ <p>Shows the table content sorted in ascending (i.e., rising) order.
+ New objects will be shown with correct placement as long the as the sorting
+ is going on. <br></br>
+
+ Please note that it is only the image of the table that is affected,
+ <em>not</em> the table itself!</p>
+ </item>
+ <tag><em>Sort Descending Order</em></tag>
+ <item>
+ <p>Shows the table content sorted in descending (i.e., falling) order.
+ New objects will be shown with correct placement as long the as the
+ sorting is going on.</p>
+ </item>
+ <tag><em>No Sorting</em></tag>
+ <item>
+ <p>Sorting mode is left. New objects will be shown last in the
+ table. However, older objects will remain in the position they had when
+ the sorting mode was left, i.e., their placement will not reflect their
+ actual placement in the ETS/Mnesia table.</p>
+ </item>
+ </taglist>
+ </section>
+
+ <section>
+ <title>The Help Menu</title>
+ <taglist>
+ <tag><em>Help</em></tag>
+ <item>
+ <p>Shows the help (about TV usage) that is available.
+ (The help will be shown in the Netscape Internet browser, if available.)</p>
+ </item>
+ <tag><em>OTP Documentation</em></tag>
+ <item>
+ <p>Shows the Documentation about all OTP components that is available
+ in the local installation of OTP.</p>
+ </item>
+ </taglist>
+ </section>
+ </section>
+ </section>
+
+ <section>
+ <title>Tracing the Owner Process</title>
+ <p>The process owning the table may easily be traced, by selecting either
+ the <em>Owner Pid</em> or the <em>Owner Name</em> field, and then choosing
+ the <em>Trace Process</em> option in the <em>File</em> menu. <br></br>
+
+ (It is also possible to double-click on any of these fields.)</p>
+ </section>
+
+ <section>
+ <title>Creating a New Table</title>
+ <p>A new table may easily be created using the <em>New Table window</em>.
+ Currently only ETS tables may be created. Since ETS tables
+ dies together with the parent process, a special process, registered
+ as <em>tv_table_owner</em>, will be the owner of tables created this way.
+ This process will not be affected by any termination of the TV,
+ i.e., the ETS tables created will live on until they are explicitly killed.
+ </p>
+ <image file="tv_create_table.gif">
+ <icaption>The New Table Window, enabling easy creation of ETS tables.</icaption>
+ </image>
+ <p>Note: the <em>tv_table_owner</em> is local to each node, meaning
+ that the creation of a table on a new node also will start such a process
+ on that node. This way only the tables on a specific node dies, should that
+ specific node crash.</p>
+ </section>
+
+ <section>
+ <title>The TV Main Window Menus</title>
+ <p>The Main Window offers the following menus:</p>
+ <p></p>
+
+ <section>
+ <title>The File Menu</title>
+ <taglist>
+ <tag><em>Open Table</em></tag>
+ <item>
+ <p>Open a selected table in a new Table Browser.</p>
+ </item>
+ <tag><em>New Table</em></tag>
+ <item>
+ <p>Open the New Table window, enabling easy creation of ETS tables.</p>
+ </item>
+ <tag><em>Table Info</em></tag>
+ <item>
+ <p>Opens the Table Information window, showing the available
+ information about a selected table. </p>
+ </item>
+ <tag><em>Nodes...</em></tag>
+ <item>
+ <p>Open the Connected Nodes window, enabling the user to view
+ tables residing on remote nodes.</p>
+ </item>
+ <tag><em>Trace Process</em></tag>
+ <item>Opens a trace window, where the process owning a selected table can
+ be traced.</item>
+ <tag><em>Exit</em></tag>
+ <item>
+ <p>Terminates the TV.</p>
+ </item>
+ </taglist>
+ </section>
+
+ <section>
+ <title>The View Menu</title>
+ <taglist>
+ <tag><em>ETS Tables</em></tag>
+ <item>
+ <p>Shows ETS tables on the current node.</p>
+ </item>
+ <tag><em>Mnesia tables</em></tag>
+ <item>
+ <p>Shows Mnesia tables on the current node.</p>
+ </item>
+ </taglist>
+ </section>
+
+ <section>
+ <title>The Options Menu</title>
+ <taglist>
+ <tag><em>Refresh</em></tag>
+ <item>
+ <p>An explicit order to once again check the current node for existing
+ tables, and list them.</p>
+ </item>
+ <tag><em>Unreadable Tables</em></tag>
+ <item>
+ <p>Option to choose whether or not unreadable tables shall be shown.</p>
+ </item>
+ <tag><em>System Tables</em></tag>
+ <item>
+ <p>Option to choose whether or not system tables shall be shown.</p>
+ </item>
+ <tag><em>Sort by Name</em></tag>
+ <item>
+ <p>Shows the tables sorted by their names.</p>
+ </item>
+ <tag><em>Sort by Id</em></tag>
+ <item>
+ <p>Shows the tables sorted by their table identifiers.</p>
+ </item>
+ <tag><em>Sort by Owner PID</em></tag>
+ <item>
+ <p>Shows the tables sorted by the process identifiers of the owning
+ processes.</p>
+ </item>
+ <tag><em>Sort by Owner Name</em></tag>
+ <item>
+ <p>Shows the tables sorted by the registered names of the owning processes.</p>
+ </item>
+ <tag><em>Error Messages in Haiku</em></tag>
+ <item>
+ <p>Option to choose whether or not error messages shall be shown
+ in the Japanes poetry style called <em>Haiku</em>.</p>
+ </item>
+ </taglist>
+ </section>
+
+ <section>
+ <title>The Help Menu</title>
+ <taglist>
+ <tag><em>Help</em></tag>
+ <item>
+ <p>Shows the help (about TV usage) that is available.
+ (The help will be shown in the Netscape Internet browser, if available.)</p>
+ </item>
+ <tag><em>OTP Documentation</em></tag>
+ <item>
+ <p>Shows the Documentation about all OTP components that is available
+ in the local installation of OTP.</p>
+ </item>
+ </taglist>
+ </section>
+ </section>
+</chapter>
+
+
diff --git a/lib/tv/doc/src/tv.gif b/lib/tv/doc/src/tv.gif
new file mode 100644
index 0000000000..d78cf7d8ed
--- /dev/null
+++ b/lib/tv/doc/src/tv.gif
Binary files differ
diff --git a/lib/tv/doc/src/tv.xml b/lib/tv/doc/src/tv.xml
new file mode 100644
index 0000000000..76edcac71b
--- /dev/null
+++ b/lib/tv/doc/src/tv.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="latin1" ?>
+<!DOCTYPE erlref SYSTEM "erlref.dtd">
+
+<erlref>
+ <header>
+ <copyright>
+ <year>1997</year>
+ <year>2007</year>
+ <holder>Ericsson AB, All Rights Reserved</holder>
+ </copyright>
+ <legalnotice>
+ The contents of this file are subject to the Erlang Public License,
+ Version 1.1, (the "License"); you may not use this file except in
+ compliance with the License. You should have received a copy of the
+ Erlang Public License along with this software. If not, it can be
+ retrieved online at http://www.erlang.org/.
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ the License for the specific language governing rights and limitations
+ under the License.
+
+ The Initial Developer of the Original Code is Ericsson AB.
+ </legalnotice>
+
+ <title>tv</title>
+ <prepared>Fredrik Gustafson</prepared>
+ <responsible></responsible>
+ <docno></docno>
+ <approved></approved>
+ <checked></checked>
+ <date>1997-11-17</date>
+ <rev>1.0</rev>
+ <file>table_visualizer.sgml</file>
+ </header>
+ <module>tv</module>
+ <modulesummary>TV graphically examines ETS and Mnesia tables. </modulesummary>
+ <description>
+ <p>TV enables the user to examine ETS and Mnesia tables. Once
+ a certain table has been opened in the tool, the content may be viewed at
+ various levels of detail. The content viewed may also be sorted, using any
+ element as key. The table may be polled anytime; either regularly at
+ specified intervals, or manually. New and deleted objects, as well as those
+ altered, are marked with characteristic colors. </p>
+ </description>
+ <funcs>
+ <func>
+ <name>start() -> Pid</name>
+ <fsummary>Start TV.</fsummary>
+ <type>
+ <v>Pid = pid() </v>
+ </type>
+ <desc>
+ <p><c>start/0</c> starts the TV. </p>
+ </desc>
+ </func>
+ </funcs>
+
+ <section>
+ <title>See Also</title>
+ <p>For a complete description of the TV, please
+ see the TV User's Guide. </p>
+ </section>
+</erlref>
+
+
diff --git a/lib/tv/doc/src/tv_create_table.gif b/lib/tv/doc/src/tv_create_table.gif
new file mode 100644
index 0000000000..7fae7f30cf
--- /dev/null
+++ b/lib/tv/doc/src/tv_create_table.gif
Binary files differ
diff --git a/lib/tv/doc/src/tv_create_table.ps b/lib/tv/doc/src/tv_create_table.ps
new file mode 100644
index 0000000000..0a3b24bcf5
--- /dev/null
+++ b/lib/tv/doc/src/tv_create_table.ps
@@ -0,0 +1,1120 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (ImageMagick)
+%%Title: (./tv_create_table.tmp.eps)
+%%CreationDate: (Tue Jun 12 16:14:11 2001)
+%%BoundingBox: 0 114 250 471
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 0
+%%EndComments
+
+%%BeginDefaults
+%%PageOrientation: Portrait
+%%EndDefaults
+
+%%BeginProlog
+%
+% Display a color image. The image is displayed in color on
+% Postscript viewers or printers that support color, otherwise
+% it is displayed as grayscale.
+%
+/buffer 512 string def
+/byte 1 string def
+/color_packet 3 string def
+/pixels 768 string def
+
+/DirectClassPacket
+{
+ %
+ % Get a DirectClass packet.
+ %
+ % Parameters:
+ % red.
+ % green.
+ % blue.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/DirectClassImage
+{
+ %
+ % Display a DirectClass image.
+ %
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { DirectClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayDirectClassPacket } image
+ } ifelse
+} bind def
+
+/GrayDirectClassPacket
+{
+ %
+ % Get a DirectClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % red
+ % green
+ % blue
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/GrayPseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassImage
+{
+ %
+ % Display a PseudoClass image.
+ %
+ % Parameters:
+ % class: 0-PseudoClass or 1-Grayscale.
+ %
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ class 0 gt
+ {
+ currentfile buffer readline pop
+ token pop /depth exch def pop
+ /grays columns 8 add depth sub depth mul 8 idiv string def
+ columns rows depth
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { currentfile grays readhexstring pop } image
+ }
+ {
+ %
+ % Parameters:
+ % colors: number of colors in the colormap.
+ % colormap: red, green, blue color packets.
+ %
+ currentfile buffer readline pop
+ token pop /colors exch def pop
+ /colors colors 3 mul def
+ /colormap colors string def
+ currentfile colormap readhexstring pop pop
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { PseudoClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayPseudoClassPacket } image
+ } ifelse
+ } ifelse
+} bind def
+
+/DisplayImage
+{
+ %
+ % Display a DirectClass or PseudoClass image.
+ %
+ % Parameters:
+ % x & y translation.
+ % x & y scale.
+ % label pointsize.
+ % image label.
+ % image columns & rows.
+ % class: 0-DirectClass or 1-PseudoClass.
+ % compression: 0-RunlengthEncodedCompression or 1-NoCompression.
+ % hex color packets.
+ %
+ gsave
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ x y translate
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ currentfile buffer readline pop
+ token pop /pointsize exch def pop
+ /Helvetica findfont pointsize scalefont setfont
+ x y scale
+ currentfile buffer readline pop
+ token pop /columns exch def
+ token pop /rows exch def pop
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ currentfile buffer readline pop
+ token pop /compression exch def pop
+ class 0 gt { PseudoClassImage } { DirectClassImage } ifelse
+ grestore
+} bind def
+%%EndProlog
+%%Page: 1 1
+%%PageBoundingBox: 0 114 250 471
+userdict begin
+%%BeginData:
+DisplayImage
+0 114
+250.000000 357.000000
+12
+410 585
+1
+0
+0
+8
+ffffff
+000000
+d8d8d8
+c2c2c2
+6b6b6b
+d9d9d9
+aa2455
+999999
+000a01ff0183000b0208040001ff018300000208040000000208040002ff028300000208
+0400000002080400020000ff0080040002000000020804000000020204060200000004ff
+0480020000000405020204000000020204000209000d02ff027700000202040000000202
+040002080000020d0400025e010302110103028d01010206010102640000020204000000
+0202040002080000020d0400025e01010202010702000101020301010201010102100103
+02180100020f010202020100021901050200010702010103020601070209010102060101
+026400000202040000000202040002080000020d0400025e010102050101020301010203
+010102010101020f01010201010102160101020f01020202010002190101020701010203
+01010201010102080101020c010102060101026400000202040000000202040002080000
+0202040602030400025e010102050101020301010203010102010101020e010102050101
+020001010201010302030103020101040201010302070100020001010201010002020103
+0202010102050101020501010207010102030101020c0101020401030203010102000101
+0203010102020103025d0000020204000000040302080000020204000304000002030400
+025e010102050101020401010202010002020101020e0101020501010200010102000101
+020101010201010102010101020101010202010102010101020601000200010102010100
+0201010102010101020101010201010102010101020501010207010102030102020b0101
+02030101020101010202010202000101020201010201010102010101025c000004030101
+020b0000020304000302000002040400025e010102050101020401010201010102020101
+020e01010205010202020101020101010205010102010101020201010201010102060100
+020001020200010002010101020101010202010102000101020001010206010402040101
+0204010302090101020701010202010102010101020201010201010102010101025f0103
+020b0000020304000302000002040400025e010102050101020501010200010002030101
+020e01010205010102030105020201040201010102020105020601000201010102000100
+020101050202010102000101020001010206010102070101020601020208010102040104
+02020101020101010202010102010105025f0103020b0000020404000300000002050400
+025e0101020501010205010302030101020e010102050101020301010205010102010101
+0201010102020101020a0100020201020201010102060107020601010207010102070101
+0208010102030101020101010202010102010101020201010201010102630103020b0000
+020404000300000002050400025e0101020501010206010102040101020f010102020100
+020001010203010102020100020101010201010102010101020201010202010002060100
+020201020201010102020100020301010201010102070101020701010203010102010101
+0208010102030101020101010202010102010101020201010201010102020100025f0103
+020b00000205000002060400025e01010205010102060101020401010210010302010101
+020401030203010202000101020101020201010302070100020301010202010302040101
+020101010207010502030101020401030209010102040102020001010201010402030101
+0202010302600103020b0000020d0400025e01030211010302ff02000103020b0000020d
+040002ff02790103020b0000020d040002ff02790103020c040d02ff027a010302ff0295
+010302ff02950103020200ff008e0400020201030202000004ff048e0202010302ff0295
+010302020500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000020201030202000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050002020103020205000000
+05ff058c0100020201030202000005ff058c010005000202010302020500000005ff058c
+0100020201030202000005ff058c010005000202010302020500000005ff058c01000202
+01030202000005ff058c010005000202010302020500000005ff058c0100020201030202
+000005ff058c010005000202010302020500000005ff058c0100020201030202000005ff
+058c010005000202010302020500000005ff058c0100020201030202000005ff058c0100
+05000202010302020500000005ff058c0100020201030202000005ff058c010005000202
+010302020500000005ff058c0100020201030202000005ff058c01000500020201030202
+0500000005ff058c0100020201030202000005ff058c0100050002020103020205000000
+05ff058c0100020201030202000005ff058c010005000202010302020500000005ff058c
+0100020201030202000005ff058c0100050002020103020205000000056f07ff070e050d
+01000202010302020000057007ff070d0000050c0100050002020103020205000000056f
+070100ff000c050d010002020103020200000570070100ff000c050c0100050002020103
+020205000000056f070100ff000c050d010002020103020200000570070100ff000c050c
+0100050002020103020205000000056f070100ff000c050d010002020103020200000570
+070100040100002001000030010000b2050c0100050002020103020205000000050a0100
+05020100050c0100055107010004010000130100000a0100000001000018010200130100
+00b2050d01000202010302020000050b010105010100050c01000551070100030100001f
+010000020100001901000012010000b3050c0100050002020103020205000000050a0101
+050101000502010205030101050001000502010205040101054407010002010000040101
+000001000003010200030102000201000000010100020100000001020001010100000100
+000301020002010000000101000501000003010200020100000201000002010000b4050d
+01000202010302020000050b010005000100050001000501010005020100050101000501
+010105010100050201000503010105440701000801000000010000000100000101000002
+010000040100000201010001010000010100000001000000010000010100000001000000
+010000010100000201000001010100010100000401000002010000020100000101000002
+010000b8050c0100050002020103020205000000050a0100050001000500010005010100
+0502010005010100050201000501010005020100054a0701000801000000010000000100
+000501000004010000020100000201000001010000000100000001000001010000000100
+000001000005010000010100000801000002010000020100000201000001010000b8050d
+01000202010302020000050b010005010101050101000502010005010100050201000501
+0104054a0701000801000000010000000100000201030004010000020100000201000001
+010000000102000101000000010000000100000201030001010000080100000201040002
+01000001010000b8050c0100050002020103020205000000050a01000501010105010100
+05020100050101000502010005010100054e070100080100000001000000010000010100
+000201000004010000020100000201000001010000050100000001000000010000010100
+00020100000101000008010000020100000701000000010000b8050d0100020201030202
+0000050b0100050201000501010005020100050101000501010105010100050201000503
+010105440701000801000000010000000100000101000002010000040100000201000002
+010000020100000101000001010000000100000001000001010000020100000101000008
+010000020100000201000003010100b9050c0100050002020103020205000000050a0100
+050201000502010205030101050001000502010205040101054407010008010000000100
+000001000002010300040100000201000002010000030101000201000000010000000100
+000201030001010000080100000301020005010000b9050d010002020103020200000570
+07010051010000b9050c0100050002020103020205000000056f0701004e010000000100
+00ba050d0100020201030202000005700701004f010000bb050c01000500020201030202
+05000000056f070100ff000c050d010002020103020200000570070100ff000c050c0100
+050002020103020205000000056f070100ff000c050d0100020201030202000005700701
+00ff000c050c0100050002020103020205000000056f070100ff000c050d010002020103
+020200000570070000ff000d050c010005000202010302020500000005ff058c01000202
+01030202000005ff058c010005000202010302020500000005ff058c0100020201030202
+000005ff058c010005000202010302020500000005ff058c0100020201030202000005ff
+058c010005000202010302020500000005ff058c0100020201030202000005ff058c0100
+05000202010302020500000005ff058c0100020201030202000005ff058c010005000202
+010302020500000005ff058c0100020201030202000005ff058c01000500020201030202
+0500000005ff058c0100020201030202000005ff058c0100050002020103020205000000
+05ff058c0100020201030202000005ff058c010005000202010302020500000005ff058c
+0100020201030202000005ff058c010005000202010302020500000005ff058c01000202
+01030202000005ff058c010005000202010302020500000005ff058c0100020201030202
+000005ff058c010005000202010302020500000005ff058c0100020201030202000005ff
+058c010005000202010302020500000005ff058c0100020201030202000005ff058c0100
+05000202010302020500000005ff058c0100020201030202000005ff058c010005000202
+010302020500000005ff058c0100020201030202000005ff058c01000500020201030202
+0500000005ff058c0100020201030202000005ff058c0100050002020103020205000000
+056d01ff0112050b01000202010302020000056e01ff0112050a01000500020201030202
+05000000056d010107ff070e0101050b01000202010302020000056e010107ff070d0000
+0101050a0100050002020103020205000000056d0101070100ff000c0101050b01000202
+010302020000056e0101070100ff000c0101050a0100050002020103020205000000056d
+0101070100ff000c0101050b01000202010302020000056e010107010000030000000300
+000003000000030000000300000003000000030000000300000003000000030000000300
+000003000000030000000300000003000000030000000300000003000000030000000300
+000003000000030000000300000003000000030000000300000003000000030000000300
+00d20101050a0100050002020103020205000000056d010107010337010100d20101050b
+01000202010302020000056e0101070100000336010100d20101050a0100050002020103
+020205000000050a0104050801000506010205490101070103180100030a010003060102
+0307010100d20101050b01000202010302020000050d0100050a01000508010005490101
+0701000003170100030a0100030801000307010100d20101050a01000500020201030202
+05000000050c010005040102050201000500010105050100050301020509010005000101
+050301020502010105000100050301020504010105180101070103010101030001000302
+0100030201000308010403020102030201000300010103050100030301020300010100d2
+0101050b01000202010302020000050d0100050301000502010005010101050101000504
+010005020100050201000508010105010100050101000502010005010100050001000500
+010005010100050201000503010105180101070100000300010003000100030001000301
+010003020100030a01000303010003020100030101010301010003040100030201000302
+010200d20101050a0100050002020103020205000000050c010005070100050101000502
+010005040100050201000502010005080100050201000505010005010100050001000500
+01000501010005020100051e010107010301010003000100030001000302010003010100
+030a010003070100030101000302010003040100030201000302010200d20101050b0100
+0202010302020000050d0100050401030501010005020100050401000502010405080100
+050201000502010305010100050001000500010005010104051e01010701000003000100
+03000100030001000302010003010100030a010003040103030101000302010003040100
+0302010600d20101050a0100050002020103020205000000050c01000503010005020100
+05010100050201000504010005020100050c010005020100050101000502010005010100
+050001000500010005010100052201010701030101000300010003000100030301000300
+0100030a01000303010003020100030101000302010003040100030201000303010100d2
+0101050b01000202010302020000050d0100050301000502010005010101050101000504
+010005020100050201000508010005020100050101000502010005010100050001000500
+010005010100050201000503010105180101070100000300010003000100030001000303
+0101030b01000303010003020100030101010301010003040100030201000302010200d2
+0101050a0100050002020103020205000000050c01000504010305010100050001010505
+010005030102050901000502010005020103050101000500010005000100050201020504
+010105180101070103010100030001000300010003040100030c01010302010303010100
+0300010103050100030301020300010100d20101050b01000202010302020000056e0101
+07010000030a0100030101050322010100d20101050a0100050002020103020205000000
+056d010107010308010003000100032b010100d20101050b01000202010302020000056e
+01010701000003080100032c010100d20101050a0100050002020103020205000000056d
+010107010300010003000100030001000300010003000100030001000300010003000100
+030001000300010003000100030001000300010003000100030001000300010003000100
+030001000300010003000100030001000300010003000100030001000300010003000100
+03000100030001000300010000d20101050b01000202010302020000056e0101070100ff
+000c0101050a0100050002020103020205000000056d0101070100ff000c0101050b0100
+0202010302020000056e0101070100ff000c0101050a0100050002020103020205000000
+056d0101070100ff000c0101050b01000202010302020000056e0101070000ff000d0101
+050a0100050002020103020205000000056d01ff0112050b01000202010302020000056e
+01ff0112050a010005000202010302020500000005ff058c0100020201030202000005ff
+058c010005000202010302020500000005ff058c0100020201030202000005ff058c0100
+05000202010302020500000005ff058c0100020201030202000005ff058c010005000202
+010302020500000005ff058c0100020201030202000005ff058c01000500020201030202
+0500000005ff058c0100020201030202000005ff058c0100050002020103020205000000
+05ff058c0100020201030202000005ff058c010005000202010302020500000005ff058c
+0100020201030202000005ff058c010005000202010302020500000005ff058c01000202
+01030202000005ff058c010005000202010302020500000005ff058c0100020201030202
+000005ff058c010005000202010302020500000005ff058c0100020201030202000005ff
+058c01000500020201030202050000000570000005000000050000000500000005000000
+0508010005020100051a0100050a0100050a01000506010205c601000202010302020000
+0570000005000000050000000500000005000000050001000507010105010100051a0100
+050a0100050a01000508010005c501000500020201030202050000000570000005060100
+050801010501010005020102050201010500010005030102050301010500010005080104
+050201020502010005000101050501000503010205bf0100020201030202000005700000
+050801000507010005000100050001000501010005020100050101000500010005000100
+05010100050201000501010005010101050a010005030100050201000501010105010100
+05040100050201000502010005bd01000500020201030202050000000570000005060100
+050801000500010005000100050501000501010005000100050001000501010005020100
+0501010005020100050a0100050701000501010005020100050401000502010005020100
+05be01000202010302020000057000000508010005070100050101010502010305010100
+0500010005000100050101040501010005020100050a0100050401030501010005020100
+050401000502010405bd0100050002020103020205000000057000000506010005080100
+050101010501010005020100050101000500010005000100050101000505010005020100
+050a010005030100050201000501010005020100050401000502010005c2010002020103
+020200000570000005080100050701000502010005010100050201000501010005000100
+0500010005010100050201000501010005010101050a0100050301000502010005010101
+0501010005040100050201000502010005bd010005000202010302020500000005700000
+050601000508010005020100050201030501010005000100050001000502010205030101
+05000100050b0101050201030501010005000101050501000503010205bf010002020103
+0202000005700000050001000500010005000100050001000500010005ff051001000500
+02020103020205000000057001000500010005000100050001000500010005ff05120100
+020201030202000005ff058c010005000202010302020500000005ff058c010002020103
+0202000005ff058c010005000202010302020500000005ff058c01000202010302020000
+05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c
+010005000202010302020500000005ff058c0100020201030202000005ff058c01000500
+0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103
+02020500000005ff058c0100020201030202000005ff058c010005000202010302020500
+000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff
+058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100
+020201030202000005ff058c010005000202010302020500000005ff058c010002020103
+0202000005ff058c010005000202010302020500000005ff058c01000202010302020000
+05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c
+010005000202010302020500000005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100020201030202000005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050002020103
+020205000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000202010302020000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+0000050000000500000005000000050000000500000005000202010302020500000005ff
+058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100
+020201030202000005ff058c010005000202010302020500000005ff058c010002020103
+0202000005ff058c010005000202010302020500000005ff058c01000202010302020000
+05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c
+010005000202010302020500000005ff058c0100020201030202000005ff058c01000500
+0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103
+02020500000005ff058c0100020201030202000005ff058c010005000202010302020500
+000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff
+058c0100020201030202000005ff058c0100050002020103020205000000050a010405ff
+057c01000202010302020000050d010005ff057d0100050002020103020205000000050c
+010005030100050201000501010005000101050301020504010105ff0561010002020103
+02020000050d010005030100050201000501010105010100050101000502010005030101
+05ff05600100050002020103020205000000050c01000504010005010100050101000502
+0100050101000502010005ff056701000202010302020000050d01000504010005010100
+05010100050201000501010405ff05660100050002020103020205000000050c01000505
+01000500010005010100050201000501010005ff056b01000202010302020000050d0100
+05050101050201010501010005010100050201000503010105ff05600100050002020103
+020205000000050c0100050601000502010005000101050301020504010105ff05610100
+0202010302020000051501000502010005ff057101000500020201030202050000000511
+0100050001000503010005ff057201000202010302020000051301000504010005ff0571
+010005000202010302020500000005ff058c0100020201030202000005ff058c01000500
+0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103
+02020500000005ff058c0100020201030202000005ff058c010005000202010302020500
+000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff
+058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100
+020201030202000005ff058c010005000202010302020500000005ff058c010002020103
+0202000005ff058c010005000202010302020500000005ff058c01000202010302020000
+05ff058c010005000202010302020500000005ff058c0100020201030202000005440100
+0567000005670000057401000500020201030202050000000542010005000100051d0100
+0546000005000000050d0100055600000500000005110100051001020505010005120100
+05110100051f01000202010302020000054201000500010005000100051c010005450000
+0500000005000000050c0100055500000500000005000000051001000512010005190100
+05110100051e01000500020201030202050000000540010005000100060105000100050c
+01020503010205020104054200000500000005020000050b010005000101050301020503
+010105000100054200000500000005020000050c01010500010005010100050201000501
+010005000101050501000503010205030102050301020502010405020102050901000500
+0101050301020503010105000100050d0100020201030202000005400100050001000603
+05000100050a010005020100050101000502010005030100054300000500000005040000
+050a01010501010005010100050201000501010005010101054100000500000005040000
+050a01000501010105010100050201000501010105010100050401000505010005020100
+050201000501010005020100050301000503010005020100050801010501010005010100
+050201000501010005010101050c0100050002020103020205000000053e010005000100
+060505000100050901000505010005020100050301000542000005000000050600000509
+010005020100050501000501010005020100054000000500000005060000050901000502
+010005010100050201000501010005020100050401000505010005020100050901000503
+010005030100050201000508010005020100050501000501010005020100050d01000202
+010302020000053e00000500000006070500000005090102050201040503010005410100
+05000100050801000508010005020100050201030501010005020100053f010005000100
+050801000508010005020100050101000502010005010100050201000504010005050100
+050201000506010305030100050301040508010005020100050201030501010005020100
+050c0100050002020103020205000000053e000005000000060505000000050d01000501
+010005070100054201000500010005060100050901000502010005010100050201000501
+010005020100054001000500010005060100050901000502010005010100050201000501
+01000502010005040100050501000502010005050100050201000503010005030100050c
+01000502010005010100050201000501010005020100050d010002020103020200000540
+000005000000060305000000050a01000502010005010100050201000503010005430100
+0500010005040100050a0101050101000501010005020100050101000501010105410100
+0500010005040100050a0100050101010501010005010101050101010501010005040100
+050501000502010005020100050101000502010005030100050301000502010005080101
+0501010005010100050201000501010005010101050c0100050002020103020205000000
+0540000005000000060105000000050c0102050301020505010105420100050001000502
+0100050b010005000101050301030502010105000100054201000500010005020100050c
+010105000100050201010500010005010100050001010505010005050100050301020503
+010305040101050201020509010005000101050301030502010105000100050d01000202
+010302020000054200000500000005000000056301000500010005000100051e01000543
+01000500010005000100051a0100052e010505130100050c010005000202010302020500
+000005420000050000000565010005000100051b0100050201000544010005000100051b
+01000544010005020100050d010002020103020200000544000005670100051d01020546
+0100051c010005450102050d010005000202010302020500000005ff058c010002020103
+0202000005ff058c010005000202010302020500000005ff058c01000202010302020000
+05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c
+010005000202010302020500000005ff058c0100020201030202000005ff058c01000500
+0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103
+02020500000005ff058c0100020201030202000005ff058c010005000202010302020500
+000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff
+058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100
+020201030202000005ff058c010005000202010302020500000005ff058c010002020103
+0202000005ff058c010005000202010302020500000005ff058c01000202010302020000
+05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c
+010005000202010302020500000005ff058c0100020201030202000005ff058c01000500
+0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103
+02020500000005ff058c0100020201030202000005ff058c010005000202010302020500
+000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff
+058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100
+020201030202000005ff058c010005000202010302020500000005ff058c010002020103
+0202000005ff058c010005000202010302020500000005ff058c01000202010302020000
+05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c
+010005000202010302020500000005ff058c0100020201030202000005ff058c01000500
+0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103
+02020500000005ff058c0100020201030202000005ff058c010005000202010302020500
+0000050a010305120100051301000506010005ff054c01000202010302020000050b0100
+05020100051101000513010005ff05530100050002020103020205000000050a01000502
+010005010100050001010503010205020104050201020503010205020104050201020503
+010205020100050001010504010105ff053701000202010302020000050b010005020100
+050101010501010005010100050201000503010005030100050201000501010005020100
+0503010005060100050201000502010005010101050101000503010105ff053601000500
+02020103020205000000050a010305020100050501000502010005030100050301000502
+01000501010005070100050601000502010005020100050101000502010005ff053d0100
+0202010302020000050b0100050501000505010005020100050301000503010405010100
+05070100050601000502010005020100050101000502010005ff053c0100050002020103
+020205000000050a01000505010005050100050201000503010005030100050501000507
+0100050601000502010005020100050101000502010005ff053d01000202010302020000
+050b01000505010005050100050201000503010005030100050201000501010005020100
+0503010005060100050201000502010005010100050201000503010105ff053601000500
+02020103020205000000050a010005050100050601020505010105020102050301020505
+0101050401000503010205020100050201000503010105ff053701000202010302020000
+05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c
+010005000202010302020500000005ff058c0100020201030202000005ff058c01000500
+0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103
+02020500000005ff058c0100020201030202000005ff058c010005000202010302020500
+000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff
+058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100
+020201030202000005ff058c010005000202010302020500000005ff058c010002020103
+0202000005ff058c010005000202010302020500000005ff058c01000202010302020000
+05ff058c010005000202010302020500000005ff058c0100020201030202000005440100
+0567000005670000057401000500020201030202050000000542010005000100051b0100
+050601020505010005370000050000000524010005130100050e0100051a000005000000
+051e010005120100054001000202010302020000054201000500010005000100051a0100
+05080100053d000005000000050000000523010005130100050e01000519000005000000
+0500000005310100053f0100050002020103020205000000054001000500010006010500
+0100050b0100050001010502010005020100050101000500010105050100050301020503
+0102052e00000500000005020000050b0100050001010502010005000101050301020502
+010405020102050301020502010405020102050301010500010005180000050000000502
+0000050b0100050001010502010005000101050301020502010005020100050201020502
+0104050201020538010002020103020200000540010005000100060305000100050a0101
+050101000501010005020100050101010501010005040100050501000502010005020100
+052c00000500000005040000050a01010501010005010101050101000501010005020100
+050301000503010005020100050101000502010005030100050301000502010005010100
+05010101051700000500000005040000050a010105010100050101010501010005040100
+050201000502010005010100050201000503010005030100050201000536010005000202
+0103020205000000053e0100050001000605050001000509010005020100050101000502
+01000501010005020100050401000505010005020100052f000005000000050600000509
+010005020100050101000505010005020100050301000503010005020100050101000507
+010005030100050201000501010005020100051600000500000005060000050901000502
+010005010100050801000502010005020100050501000503010005030100050201000537
+01000202010302020000053e000005000000060705000000050801000502010005010100
+050201000501010005020100050401000505010005020100052e01000500010005080100
+050801000502010005010100050501000502010005030100050301040501010005070100
+050301040501010005020100051501000500010005080100050801000502010005010100
+050801000503010005000100050301030503010005030104053601000500020201030202
+05000000053e000005000000060505000000050901000502010005010100050201000501
+010005020100050401000505010005020100052f01000500010005060100050901000502
+010005010100050501000502010005030100050301000505010005070100050301000505
+010005020100051601000500010005060100050901000502010005010100050801000503
+01000500010005020100050201000503010005030100053b010002020103020200000540
+000005000000060305000000050a01010501010005010100050101010501010105010100
+05040100050501000502010005020100052c01000500010005040100050a010105010100
+050101000505010005020100050301000503010005020100050101000502010005030100
+05030100050201000501010005010101051701000500010005040100050a010105010100
+050101000508010005040100050301000502010005030100050301000502010005360100
+0500020201030202050000000540000005000000060105000000050b0100050001010503
+0101050001000501010005000101050501000505010005030102052e0100050001000502
+0100050b0100050001010502010005060102050501010502010205030102050501010502
+01020503010105000100051801000500010005020100050b010005000101050201000508
+010005040100050401030504010105020102053801000202010302020000054200000500
+000005000000050c0100055501000500010005000100050c010005550100050001000500
+0100050c0100056401000500020201030202050000000542000005000000050d01000556
+010005000100050d01000556010005000100050d01000565010002020103020200000544
+0000050e010005570100050e010005570100050e01000564010005000202010302020500
+000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff
+058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100
+020201030202000005ff058c010005000202010302020500000005ff058c010002020103
+0202000005ff058c010005000202010302020500000005ff058c01000202010302020000
+05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c
+010005000202010302020500000005ff058c0100020201030202000005ff058c01000500
+0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103
+02020500000005ff058c0100020201030202000005ff058c010005000202010302020500
+000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff
+058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100
+020201030202000005ff058c010005000202010302020500000005ff058c010002020103
+0202000005ff058c010005000202010302020500000005ff058c01000202010302020000
+05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c
+010005000202010302020500000005ff058c0100020201030202000005ff058c01000500
+0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103
+02020500000005ff058c0100020201030202000005ff058c010005000202010302020500
+000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff
+058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100
+020201030202000005ff058c010005000202010302020500000005ff058c010002020103
+0202000005ff058c010005000202010302020500000005ff058c01000202010302020000
+05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c
+010005000202010302020500000005ff058c0100020201030202000005ff058c01000500
+02020103020205000000056f072d05ee010002020103020200000570072c000005ed0100
+050002020103020205000000056f0701002b05ee0100020201030202000005700701002b
+05ed0100050002020103020205000000056f0701002b05ee010002020103020200000570
+0701002b05ed0100050002020103020205000000056f0701002b05ee0100020201030202
+000005700701002b05ed0100050002020103020205000000050a010005020100052e0100
+05040100050601000521070100030100002605ee01000202010302020000050b01000501
+0100053501000529070100020101002605ed0100050002020103020205000000050a0100
+050001000504010205020100050201000508010005000101050301020503010205030102
+050201040502010205030102050201000500010105040101050c07010001010000000100
+002605ee01000202010302020000050b0101050401000502010005010100050201000508
+010105010100050101000502010005010100050201000504010005040100050601000502
+010005020100050101010501010005030101050c070100030100002605ed010005000202
+0103020205000000050a0100050001000503010005020100050201000501010005080100
+050201000501010005020100050101000508010005040100050601000502010005020100
+05010100050201000512070100030100002605ee01000202010302020000050b01000501
+010005020104050201000501010005080100050201000501010005020100050201020505
+010005040100050601000502010005020100050101000502010005120701000301000026
+05ed0100050002020103020205000000050a010005010100050201000507010005000100
+050801000502010005010100050201000505010005040100050401000506010005020100
+0502010005010100050201000512070100030100002605ee01000202010302020000050b
+010005020100050101000502010005030101050901010501010005010100050201000501
+010005020100050401000504010005060100050201000502010005010100050201000503
+0101050c070100030100002605ed0100050002020103020205000000050a010005020100
+050201020505010005090100050001010503010205030102050501000505010105040100
+05030102050201000502010005030101050c070100010104002405ee0100020201030202
+0000051c01000509010005470701002b05ed010005000202010302020500000005180100
+05000100050a010005470701002b05ee01000202010302020000051a0100050b01000547
+0701002b05ed0100050002020103020205000000056f0701002b05ee0100020201030202
+000005700701002b05ed0100050002020103020205000000056f0701002b05ee01000202
+01030202000005700701002b05ed0100050002020103020205000000056f0701002b05ee
+0100020201030202000005700700002c05ed010005000202010302020500000005ff058c
+0100020201030202000005ff058c010005000202010302020500000005ff058c01000202
+01030202000005ff058c010005000202010302020500000005ff058c0100020201030202
+000005ff058c010005000202010302020500000005ff058c0100020201030202000005ff
+058c010005000202010302020500000005ff058c0100020201030202000005ff058c0100
+05000202010302020500000005ff058c0100020201030202000005ff058c010005000202
+010302020500000005ff058c0100020201030202000005ff058c01000500020201030202
+0500000005ff058c0100020201030202000005ff058c0100050002020103020205000000
+05ff058c0100020201030202000005ff058c010005000202010302020500000005ff058c
+0100020201030202000005ff058c010005000202010302020500000005ff058c01000202
+01030202000005ff058c010005000202010302020500000005ff058c0100020201030202
+000005ff058c010005000202010302020500000005ff058c0100020201030202000005ff
+058c010005000202010302020500000005ff058c0100020201030202000005ff058c0100
+050002020103020205000000050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000202010302020000050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500020201030202
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000002020103020200000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000202010302020500000005ff058c
+0100020201030202000005ff058c010005000202010302020500000005ff058c01000202
+01030202000005ff058c010005000202010302020500000005ff058c0100020201030202
+000005ff058c010005000202010302020500000005ff058c0100020201030202000005ff
+058c010005000202010302020500000005ff058c0100020201030202000005ff058c0100
+05000202010302020500000005ff058c0100020201030202000005ff058c010005000202
+010302020500000005ff058c0100020201030202000005ff058c01000500020201030202
+0500000005ff058c0100020201030202000005ff058c0100050002020103020205000000
+05ff058c0100020201030202000005ff058c010005000202010302020500000005ff058c
+0100020201030202000005ff058c01000500020201030202050000000557010005000100
+05000100050001000500010005090102051e010005fe0100020201030202000005570100
+05000100050001000500010005000100050000000507010005020100051d010005fd0100
+050002020103020205000000055701000606000005080100050201000501010005000101
+050301020502010005000101050901000500010105020100050001010503010205020100
+050201000502010205030102050201000500010105d10100020201030202000005570100
+050006060500000005070100050201000501010105010100050101000502010005010101
+050101000508010105010100050101010501010005010100050201000501010005020100
+05010100050201000501010005020100050101010501010005cf01000500020201030202
+050000000557010006060000050801000502010005010100050201000501010005020100
+050101000502010005080100050201000501010005050100050201000501010005000100
+050001000501010005050100050201000501010005d40100020201030202000005570100
+050006060500000005070100050201000501010005020100050101040501010005020100
+050801000502010005010100050501000502010005010100050001000500010005020102
+050201040501010005d30100050002020103020205000000055701000606000005080100
+050201000501010005020100050101000505010005020100050801000502010005010100
+050501000502010005010100050001000500010005050100050101000505010005d40100
+020201030202000005570100050006060500000005070100050201000501010105010100
+050101000502010005010100050201000508010105010100050101000505010005020100
+050101000500010005000100050101000502010005010100050201000501010005d30100
+050002020103020205000000055701000606000005090102050201000500010105030102
+050201000502010005080100050001010502010005060102050301000500010005030102
+050301020502010005d40100020201030202000005570100050000000500000005000000
+0500000005000000050e010005ff05190100050002020103020205000000055700000500
+0000050000000500000005000000050f010005ff051a0100020201030202000005710100
+05ff0519010005000202010302020500000005ff058c0100020201030202000005ff058c
+010005000202010302020500000005ff058c0100020201030202000005ff058c01000500
+0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103
+02020500000005ff058c0100020201030202000005ff058c010005000202010302020500
+000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff
+058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100
+020201030202000005ff058c010005000202010302020500000005ff058c010002020103
+0202000005ff058c010005000202010302020500000005ff058c01000202010302020000
+05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c
+010005000202010302020500000005ff058c0100020201030202000005ff058c01000500
+0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103
+02020500000005ff058c0100020201030202000005ff058c010005000202010302020500
+000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff
+058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100
+020201030202000005ff058c010005000202010302020500000005ff058c010002020103
+020200000556000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000052800000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005460100050002020103020205000000055400000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005280000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000548010002020103
+020200000556000005600100052800000560010005460100050002020103020205000000
+055400000560010005280000056001000548010002020103020200000556000005600100
+052800000560010005460100050002020103020205000000055400000560010005280000
+056001000548010002020103020200000556000005600100052800000560010005460100
+050002020103020205000000055400000560010005280000056001000548010002020103
+020200000556000005600100052800000560010005460100050002020103020205000000
+05540000052a01020502010005020100052a010005280000051c0102051f0102051d0100
+0548010002020103020200000556000005280100050201000501010005010100052c0100
+05280000051a01000502010005200100051e010005460100050002020103020205000000
+0554000005290100050201000501010005000100052c010005280000051b010005020100
+050201020502010005000101050301020503010205050100051d01000548010002020103
+0202000005560000052801000502010005010101052e010005280000051a010005050100
+0502010005010101050101000501010005020100050101000502010005040100051e0100
+054601000500020201030202050000000554000005290100050201000501010005000100
+052c010005280000051b0100050901000501010005020100050101000505010005020100
+05040100051d010005480100020201030202000005560000052801000502010005010100
+05010100052c010005280000051a01000506010305010100050201000501010005050104
+05040100051e010005460100050002020103020205000000055400000529010005020100
+0501010005010100052b010005280000051b010005020100050101000502010005010100
+05020100050101000505010005080100051d010005480100020201030202000005560000
+05280100050201000501010005020100052b010005280000051a01000502010005010100
+0502010005010100050201000501010005020100050101000502010005040100051e0100
+0546010005000202010302020500000005540000052a01020502010005020100052a0100
+05280000051c0102050301030501010005020100050201020503010205050100051d0100
+054801000202010302020000055600000560010005280000056001000546010005000202
+010302020500000005540000056001000528000005600100054801000202010302020000
+055600000560010005280000056001000546010005000202010302020500000005540000
+056001000528000005600100054801000202010302020000055600000560010005280000
+056001000546010005000202010302020500000005540000056001000528000005600100
+054801000202010302020000055600000560010005280000056001000546010005000202
+010302020500000005540000056001000528000005600100054801000202010302020000
+055600000560010005280000056001000546010005000202010302020500000005540000
+056001000528000005600100054801000202010302020000055600000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005280000050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000546010005000202
+010302020500000005540000050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000528000005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+05000100050001000500010005480100020201030202000005ff058c0100050002020103
+02020500000005ff058c0100020201030202000005ff058c010005000202010302020500
+000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff
+058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100
+020201030202000005ff058c010005000202010302020500000005ff058c010002020103
+0202000005ff058c010005000202010302020500000005ff058c01000202010302020000
+05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c
+010005000202010302020500000005ff058c0100020201030202000005ff058c01000500
+0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103
+02020500000005ff058c0100020201030202000005ff058c010005000202010302020500
+000005ff058c010002020101000505ff058c010005000005020204000500000005ff058c
+0100000002020400000002020400000005ff058c01000500000002020400000002020400
+0500000005ff058c01000000020204000000020204000000050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500000002020400
+000002020400050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+0100050001000500010005000100000002020400000002020400000502ff028300060202
+040000000208040002ff028300000208040000000208040002ff02830000020804000000
+0208040001ff01830000020804000000040901ff018300000409
+%%EndData
+end
+%%PageTrailer
+%%Trailer
+%%BoundingBox: 0 114 250 471
+%%EOF
diff --git a/lib/tv/doc/src/tv_record_editor_mnesia.gif b/lib/tv/doc/src/tv_record_editor_mnesia.gif
new file mode 100644
index 0000000000..fbbdcab515
--- /dev/null
+++ b/lib/tv/doc/src/tv_record_editor_mnesia.gif
Binary files differ
diff --git a/lib/tv/doc/src/tv_record_editor_mnesia.ps b/lib/tv/doc/src/tv_record_editor_mnesia.ps
new file mode 100644
index 0000000000..b4d19f963f
--- /dev/null
+++ b/lib/tv/doc/src/tv_record_editor_mnesia.ps
@@ -0,0 +1,897 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (ImageMagick)
+%%Title: (./tv_record_editor_mnesia.tmp.eps)
+%%CreationDate: (Tue Jun 12 16:09:57 2001)
+%%BoundingBox: 0 41 300 330
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 0
+%%EndComments
+
+%%BeginDefaults
+%%PageOrientation: Portrait
+%%EndDefaults
+
+%%BeginProlog
+%
+% Display a color image. The image is displayed in color on
+% Postscript viewers or printers that support color, otherwise
+% it is displayed as grayscale.
+%
+/buffer 512 string def
+/byte 1 string def
+/color_packet 3 string def
+/pixels 768 string def
+
+/DirectClassPacket
+{
+ %
+ % Get a DirectClass packet.
+ %
+ % Parameters:
+ % red.
+ % green.
+ % blue.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/DirectClassImage
+{
+ %
+ % Display a DirectClass image.
+ %
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { DirectClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayDirectClassPacket } image
+ } ifelse
+} bind def
+
+/GrayDirectClassPacket
+{
+ %
+ % Get a DirectClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % red
+ % green
+ % blue
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/GrayPseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassImage
+{
+ %
+ % Display a PseudoClass image.
+ %
+ % Parameters:
+ % class: 0-PseudoClass or 1-Grayscale.
+ %
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ class 0 gt
+ {
+ currentfile buffer readline pop
+ token pop /depth exch def pop
+ /grays columns 8 add depth sub depth mul 8 idiv string def
+ columns rows depth
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { currentfile grays readhexstring pop } image
+ }
+ {
+ %
+ % Parameters:
+ % colors: number of colors in the colormap.
+ % colormap: red, green, blue color packets.
+ %
+ currentfile buffer readline pop
+ token pop /colors exch def pop
+ /colors colors 3 mul def
+ /colormap colors string def
+ currentfile colormap readhexstring pop pop
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { PseudoClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayPseudoClassPacket } image
+ } ifelse
+ } ifelse
+} bind def
+
+/DisplayImage
+{
+ %
+ % Display a DirectClass or PseudoClass image.
+ %
+ % Parameters:
+ % x & y translation.
+ % x & y scale.
+ % label pointsize.
+ % image label.
+ % image columns & rows.
+ % class: 0-DirectClass or 1-PseudoClass.
+ % compression: 0-RunlengthEncodedCompression or 1-NoCompression.
+ % hex color packets.
+ %
+ gsave
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ x y translate
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ currentfile buffer readline pop
+ token pop /pointsize exch def pop
+ /Helvetica findfont pointsize scalefont setfont
+ x y scale
+ currentfile buffer readline pop
+ token pop /columns exch def
+ token pop /rows exch def pop
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ currentfile buffer readline pop
+ token pop /compression exch def pop
+ class 0 gt { PseudoClassImage } { DirectClassImage } ifelse
+ grestore
+} bind def
+%%EndProlog
+%%Page: 1 1
+%%PageBoundingBox: 0 41 300 330
+userdict begin
+%%BeginData:
+DisplayImage
+0 41
+300.000000 289.000000
+12
+385 371
+1
+0
+0
+8
+ffffff
+000000
+d8d8d8
+c2c2c2
+6b6b6b
+d9d9d9
+b22222
+999999
+000a01ff016a000b0208040001ff016a00000208040000000208040002ff026a00000208
+0400000002080400020000ff0067040002000000020804000000020204060200000004ff
+0467020000000405020204000000020204000209000d02ff025e00000202040000000202
+040002080000020d04000242010302110103023701010211010102020101022301010231
+01010206010102090101023e00000202040000000202040002080000020d040002420101
+02020107020001010203010102010101020e010402230101020601050204010102020101
+02020100021f01010201010002130100020c0100020b01010206010102090101023e0000
+0202040000000202040002080000020d0400024201010205010102030101020301010201
+0101020e0101020101010222010102060101020801010206010102200100020001010212
+0101020b0101020b010102060101020a0100023e00000202040000000202040002080000
+02020406020304000242010102050101020301010203010102010101020e010102010101
+020201030203010302020103020201010200010102010104020601010205010402020101
+0200010402010103020201010200010102000101020c0100020001040201010302030104
+0200010402080104020101030203010102000101020301010202010302020100023f0000
+020204000000040302080000020204000304000002030400024201010205010102040101
+0202010002020101020e0101020101000202010102010101020101010201010102000101
+020101010201010102000101020001010201010102060101020401010201010102020101
+020101010202010102010101020101010200010102000101020f01010202010102010101
+0201010102050101020b0101020201010201010102020102020001010202010102010101
+020101010242000004030101020b00000203040003020000020404000242010102050101
+020401010201010102020101020e01030203010102010101020101010204010102010101
+020101020202010102010101020601040201010102010101020201010201010102020101
+02010101020101020214010102020101020101010201010202040101020b010102060101
+020201010201010102020101020101010201010102450103020b00000203040003020000
+020404000242010102050101020501010200010002030101020e01010200010102020105
+020101010204010102010101020101010203010102010101020601010204010102010101
+020201010201010102020101020101010201010102150101020201050202010302020101
+020b0101020301040202010102010101020201010201010502450103020b000002040400
+030000000205040002420101020501010205010302030101020e01010200010102020101
+020501010204010102010101020101010203010102010101020601010204010102010101
+020201010201010102020101020101010201010102150101020201010208010202010101
+020b010102020101020101010202010102010101020201010201010102490103020b0000
+02040400030000000205040002420101020501010206010102040101020e010102010101
+020101010202010002010101020201000200010102010101020101010203010102000102
+020601010204010102000102020201010201010102020101020101010201010102030101
+020f010102020101020201000205010102010101020b0101020201010201010102020101
+0201010102020101020101010202010002450103020b0000020500000206040002420101
+020501010206010102040101020e01010201010202010103020301030202010302020101
+020401010200010102060105020101010200010102020101020201020201010302020101
+0203010102100102020101030202010402030102020a0102020101020200010102010104
+020301010202010302460103020b0000020d040002420103021101030293010602680103
+020b0000020d040002ff02600103020b0000020d040002ff02600103020c040d02ff0261
+010302ff027c010302ff027c0103020200ff00750400020201030202000004ff04750202
+010302ff027c010302020500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000202010302020000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050001000202010302020500000005ff057201000500020201030202000005ff05740100
+0202010302020500000005ff057201000500020201030202000005ff0574010002020103
+02020500000005ff057201000500020201030202000005ff057401000202010302020500
+000005ff057201000500020201030202000005ff057401000202010302020500000005ff
+057201000500020201030202000005ff057401000202010302020500000005ff05720100
+0500020201030202000005ff057401000202010302020500000005ff0572010005000202
+01030202000005ff057401000202010302020500000005ff057201000500020201030202
+000005ff057401000202010302020500000005ff057201000500020201030202000005ff
+057401000202010302020500000005ff057201000500020201030202000005ff05740100
+02020103020205000000054e01ff0116050c010005000202010302020000054f01ff0116
+050d010002020103020205000000054e010107ff07120101050c01000500020201030202
+0000054f010107ff071100000101050d010002020103020205000000054e0101070100ff
+00100101050c010005000202010302020000054f0101070100ff00100101050d01000202
+0103020205000000054e0101070100ff00100101050c010005000202010302020000054f
+010107010000030000000300000003000000030000000300000003000000030000000300
+000003000000030000000300000003000000030000000300000003000000030000000300
+000003000000030000000300000003000000030000000300000003000000030000000300
+00000300000003000000030000000300000003000000030000d00101050d010002020103
+020205000000054e01010701034000cf0101050c010005000202010302020000054f0101
+07010000033e010000cf0101050d010002020103020205000000054e0101070103130100
+030b01010304010003140100030100cf0101050c010005000202010302020000054f0101
+0701000003120100030a0100031c01000300010000cf0101050d01000202010302020500
+0000050f0100050001010503010205020101050001000503010205250101070103010100
+030201000301010003000101030301010300010003020102030401000304010203020100
+03000101030301020303010103000100030100cf0101050c010005000202010302020000
+051001010501010005010100050201000501010005000100050001000501010005020100
+052401010701000003000100030201000301010103010100030101000301010103010100
+030201000301010403040100030201010301010003010100030201000301010003010101
+0300010000cf0101050d010002020103020205000000050f010005020100050501000501
+010005000100050001000501010005020100052401010701030101000302010003010100
+030201000301010003020100030101000302010003030100030601000302010003020100
+03010100030201000301010003020100030100cf0101050c010005000202010302020000
+051001000502010005020103050101000500010005000100050101040524010107010000
+030001000302010003010100030201000301010003020100030101040303010003060100
+03020100030201000301010403010100030201000300010000cf0101050d010002020103
+020205000000050f01000502010005010100050201000501010005000100050001000501
+010005280101070103010100030201000301010003020100030101000302010003010100
+03070100030601000302010003020100030101000305010003020100030100cf0101050c
+010005000202010302020000051001000502010005010100050201000501010005000100
+050001000501010005020100052401010701000003000100030101010301010003020100
+030101000301010103010100030201000303010003060100030201000302010003010100
+0302010003010100030101010300010000cf0101050d010002020103020205000000050f
+010005020100050201030501010005000100050001000502010205250101070103020101
+030001000301010003020100030201010300010003020102030401000306010003020100
+03020100030201020303010103000100030100cf0101050c010005000202010302020000
+054f010107010000033e010000cf0101050d010002020103020205000000054e01010701
+034000cf0101050c010005000202010302020000054f010107010000033e010000cf0101
+050d010002020103020205000000054e0101070103000100030001000300010003000100
+030001000300010003000100030001000300010003000100030001000300010003000100
+030001000300010003000100030001000300010003000100030001000300010003000100
+030001000300010003000100030001000300010003000100030001000300010003000100
+03000100030000cf0101050c010005000202010302020000054f0101070100ff00100101
+050d010002020103020205000000054e0101070100ff00100101050c0100050002020103
+02020000054f0101070100ff00100101050d010002020103020205000000054e01010701
+00ff00100101050c010005000202010302020000054f0101070000ff00110101050d0100
+02020103020205000000054e01ff0116050c010005000202010302020000054f01ff0116
+050d01000202010302020500000005ff057201000500020201030202000005ff05740100
+0202010302020500000005ff057201000500020201030202000005ff0574010002020103
+02020500000005ff057201000500020201030202000005ff057401000202010302020500
+000005ff057201000500020201030202000005ff057401000202010302020500000005ff
+057201000500020201030202000005ff057401000202010302020500000005ff05720100
+0500020201030202000005ff0574010002020103020205000000055007ff0712050e0100
+05000202010302020000055107ff07110000050f01000202010302020500000005500701
+00ff0010050e0100050002020103020200000551070100ff0010050f0100020201030202
+050000000550070100ff0010050e0100050002020103020200000551070100ff0010050f
+0100020201030202050000000550070100ff0010050e0100050002020103020200000551
+070100ff0010050f010002020103020205000000051a010005050100052d070100130100
+000b0101000401000014010000d1050e010005000202010302020000051b010005050100
+052d070100130100000a0100001c010000d1050f01000202010302020500000005100102
+050301010500010005020101050001000501010005000101050301020503010205030102
+051207010001010000020100000101000000010100030101000001000002010200040100
+00040102000201000000010100030102000301010000010000d1050e0100050002020103
+020200000510010005020100050101000501010105010100050101010501010105010100
+050101000502010005010100050201000501010005020100051107010001010000020100
+000101010001010000010100000101010001010000020100000101040004010000020101
+000101000001010000020100000101000001010100d1050f010002020103020205000000
+051301000501010005020100050101000502010005010100050501000502010005010100
+050501000515070100010100000201000001010000020100000101000002010000010100
+000201000003010000060100000201000002010000010100000201000001010000020100
+00d1050e0100050002020103020200000511010305010100050201000501010005020100
+050101000505010405020102050301020512070100010100000201000001010000020100
+000101000002010000010104000301000006010000020100000201000001010400010100
+0002010000d1050f010002020103020205000000050f0100050201000501010005020100
+050101000502010005010100050501000509010005050100051107010001010000020100
+000101000002010000010100000201000001010000070100000601000002010000020100
+00010100000501000002010000d1050e0100050002020103020200000510010005020100
+050101000501010105010100050101010501010005050100050201000501010005020100
+050101000502010005110701000101000001010100010100000201000001010000010101
+000101000002010000030100000601000002010000020100000101000002010000010100
+0001010100d1050f01000202010302020500000005100103050201010500010005020101
+050001000501010005060102050301020503010205120701000201010000010000010100
+000201000002010100000100000201020004010000060100000201000002010000020102
+000301010000010000d1050e0100050002020103020200000551070100ff0010050f0100
+020201030202050000000550070100ff0010050e01000500020201030202000005510701
+00ff0010050f0100020201030202050000000550070100ff0010050e0100050002020103
+020200000551070100ff0010050f0100020201030202050000000550070100ff0010050e
+0100050002020103020200000551070100ff0010050f0100020201030202050000000550
+070100ff0010050e0100050002020103020200000551070000ff0011050f010002020103
+02020500000005ff057201000500020201030202000005ff057401000202010302020500
+000005ff057201000500020201030202000005ff057401000202010302020500000005ff
+057201000500020201030202000005ff057401000202010302020500000005ff05720100
+0500020201030202000005ff057401000202010302020500000005ff0572010005000202
+01030202000005ff057401000202010302020500000005ff057201000500020201030202
+000005ff057401000202010302020500000005ff057201000500020201030202000005ff
+0574010002020103020205000000055007ff0712050e0100050002020103020200000551
+07ff07110000050f0100020201030202050000000550070100ff0010050e010005000202
+0103020200000551070100ff0010050f0100020201030202050000000550070100ff0010
+050e0100050002020103020200000551070100ff0010050f010002020103020205000000
+0550070100ff0010050e0100050002020103020200000551070100ff0010050f01000202
+010302020500000005190100052201000511070100130100000b01010004010000140100
+00d1050e010005000202010302020000053e01000511070100130100000a0100001c0100
+00d1050f010002020103020205000000050f0104050201020502010005000101050a0102
+05030102050301010500010005020102050b070100010100000201000001010000000101
+000301010000010000020102000401000004010200020100000001010003010200030101
+0000010000d1050e01000500020201030202000005140100050401000502010105010100
+0508010005020100050101000502010005010100050101010501010005020100050a0701
+000101000002010000010101000101000001010000010101000101000002010000010104
+0004010000020101000101000001010000020100000101000001010100d1050f01000202
+010302020500000005120100050501000502010005020100050801000505010005020100
+05010100050201000501010005020100050a070100010100000201000001010000020100
+000101000002010000010100000201000003010000060100000201000002010000010100
+00020100000101000002010000d1050e0100050002020103020200000512010005060100
+0502010005020100050801000505010005020100050101000502010005010104050a0701
+000101000002010000010100000201000001010000020100000101040003010000060100
+000201000002010000010104000101000002010000d1050f010002020103020205000000
+051001000507010005020100050201000508010005050100050201000501010005020100
+05010100050e070100010100000201000001010000020100000101000002010000010100
+0007010000060100000201000002010000010100000501000002010000d1050e01000500
+020201030202000005100100050801000502010105010100050801000502010005010100
+0502010005010100050101010501010005020100050a0701000101000001010100010100
+000201000001010000010101000101000002010000030100000601000002010000020100
+0001010000020100000101000001010100d1050f010002020103020205000000050f0104
+050401000502010005000101050a010205030102050301010500010005020102050b0701
+000201010000010000010100000201000002010100000100000201020004010000060100
+000201000002010000020102000301010000010000d1050e010005000202010302020000
+051e0100050401050526070100ff0010050f010002020103020205000000051d01000531
+070100ff0010050e010005000202010302020000051e01000531070100ff0010050f0100
+020201030202050000000550070100ff0010050e01000500020201030202000005510701
+00ff0010050f0100020201030202050000000550070100ff0010050e0100050002020103
+020200000551070100ff0010050f0100020201030202050000000550070100ff0010050e
+0100050002020103020200000551070000ff0011050f01000202010302020500000005ff
+057201000500020201030202000005ff057401000202010302020500000005ff05720100
+0500020201030202000005ff057401000202010302020500000005ff0572010005000202
+01030202000005ff057401000202010302020500000005ff057201000500020201030202
+000005ff057401000202010302020500000005ff057201000500020201030202000005ff
+057401000202010302020500000005ff057201000500020201030202000005ff05740100
+0202010302020500000005ff057201000500020201030202000005ff0574010002020103
+020205000000055007ff0712050e010005000202010302020000055107ff07110000050f
+0100020201030202050000000550070100ff0010050e0100050002020103020200000551
+070100ff0010050f0100020201030202050000000550070100ff0010050e010005000202
+0103020200000551070100ff0010050f0100020201030202050000000550070100ff0010
+050e0100050002020103020200000551070100ff0010050f010002020103020205000000
+05180100050c01000528070100130100000b0101000401000014010000d1050e01000500
+020201030202000005190100050c01000528070100130100000a0100001c010000d1050f
+010002020103020205000000051001020502010405020102050201040502010205200701
+000101000002010000010100000001010003010100000100000201020004010000040102
+000201000000010100030102000301010000010000d1050e010005000202010302020000
+0510010005020100050301000503010005020100050301000503010005020100051f0701
+000101000002010000010101000101000001010000010101000101000002010000010104
+0004010000020101000101000001010000020100000101000001010100d1050f01000202
+0103020205000000050f01000507010005070100050301000503010005020100051f0701
+000101000002010000010100000201000001010000020100000101000002010000030100
+0006010000020100000201000001010000020100000101000002010000d1050e01000500
+02020103020200000511010205040100050401030503010005030104051f070100010100
+000201000001010000020100000101000002010000010104000301000006010000020100
+0002010000010104000101000002010000d1050f01000202010302020500000005130100
+050301000503010005020100050301000503010005230701000101000002010000010100
+000201000001010000020100000101000007010000060100000201000002010000010100
+000501000002010000d1050e010005000202010302020000051001000502010005030100
+0503010005020100050301000503010005020100051f0701000101000001010100010100
+000201000001010000010101000101000002010000030100000601000002010000020100
+0001010000020100000101000001010100d1050f01000202010302020500000005100102
+050501010502010305040101050201020520070100020101000001000001010000020100
+000201010000010000020102000401000006010000020100000201000002010200030101
+0000010000d1050e0100050002020103020200000551070100ff0010050f010002020103
+0202050000000550070100ff0010050e0100050002020103020200000551070100ff0010
+050f0100020201030202050000000550070100ff0010050e010005000202010302020000
+0551070100ff0010050f0100020201030202050000000550070100ff0010050e01000500
+02020103020200000551070100ff0010050f0100020201030202050000000550070100ff
+0010050e0100050002020103020200000551070000ff0011050f01000202010302020500
+000005ff057201000500020201030202000005ff057401000202010302020500000005ff
+057201000500020201030202000005ff057401000202010302020500000005ff05720100
+0500020201030202000005ff057401000202010302020500000005ff0572010005000202
+01030202000005ff057401000202010302020500000005ff057201000500020201030202
+000005ff057401000202010302020500000005ff057201000500020201030202000005ff
+057401000202010302020500000005ff057201000500020201030202000005ff05740100
+02020103020205000000055007ff0712050e010005000202010302020000055107ff0711
+0000050f0100020201030202050000000550070100ff0010050e01000500020201030202
+00000551070100ff0010050f0100020201030202050000000550070100ff0010050e0100
+050002020103020200000551070100ff0010050f01000202010302020500000005500701
+00ff0010050e0100050002020103020200000551070100ff0010050f0100020201030202
+05000000052d01000521070100130100000b0101000401000014010000d1050e01000500
+0202010302020000052e01000521070100130100000a0100001c010000d1050f01000202
+010302020500000005100102050301020502010005020100050101000500010105020104
+050101000500010105020100050201000511070100010100000201000001010000000101
+000301010000010000020102000401000004010200020100000001010003010200030101
+0000010000d1050e01000500020201030202000005100100050201000501010005020100
+050101000502010005010101050101000503010005030101050101000501010005020100
+051107010001010000020100000101010001010000010100000101010001010000020100
+000101040004010000020101000101000001010000020100000101000001010100d1050f
+010002020103020205000000050f01000505010005020100050101000502010005010100
+050201000503010005030100050601000501010005110701000101000002010000010100
+000201000001010000020100000101000002010000030100000601000002010000020100
+0001010000020100000101000002010000d1050e01000500020201030202000005100100
+050501000502010005010100050201000501010005020100050301000503010005060100
+050101000511070100010100000201000001010000020100000101000002010000010104
+0003010000060100000201000002010000010104000101000002010000d1050f01000202
+0103020205000000050f0100050501000502010005010100050201000501010005020100
+050301000503010005070100050001000511070100010100000201000001010000020100
+000101000002010000010100000701000006010000020100000201000001010000050100
+0002010000d1050e01000500020201030202000005100100050201000501010005020100
+050101000501010105010100050201000503010005030100050701010512070100010100
+000101010001010000020100000101000001010100010100000201000003010000060100
+00020100000201000001010000020100000101000001010100d1050f0100020201030202
+050000000510010205030102050301010500010005010100050201000504010105010100
+050801000512070100020101000001000001010000020100000201010000010000020102
+0004010000060100000201000002010000020102000301010000010000d1050e01000500
+0202010302020000053d01000512070100ff0010050f0100020201030202050000000539
+0100050001000513070100ff0010050e010005000202010302020000053b010005140701
+00ff0010050f0100020201030202050000000550070100ff0010050e0100050002020103
+020200000551070100ff0010050f0100020201030202050000000550070100ff0010050e
+0100050002020103020200000551070100ff0010050f0100020201030202050000000550
+070100ff0010050e0100050002020103020200000551070000ff0011050f010002020103
+02020500000005ff057201000500020201030202000005ff057401000202010302020500
+000005ff057201000500020201030202000005ff057401000202010302020500000005ff
+057201000500020201030202000005ff057401000202010302020500000005ff05720100
+0500020201030202000005ff057401000202010302020500000005ff0572010005000202
+01030202000005ff057401000202010302020500000005ff057201000500020201030202
+000005ff057401000202010302020500000005ff057201000500020201030202000005ff
+057401000202010302020500000005ff057201000500020201030202000005ff05740100
+0202010302020500000005ff057201000500020201030202000005ff0574010002020103
+02020500000005ff057201000500020201030202000005ff057401000202010302020500
+000005ff052f000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+0500000005000000050b01000500020201030202000005ff052f00000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+0500000005000000050000000500000005000000050000000500000005000100050b0100
+0202010302020500000005ff052f000005340100050b01000500020201030202000005ff
+052f000005360100050b01000202010302020500000005ff052f0000052a060005080100
+050b01000500020201030202000005ff052f0000050906000502060005110600050a0600
+05080100050b01000202010302020500000005ff052f0000050806010501060005110600
+050b060005060100050b01000500020201030202000005ff052f00000509060105010600
+05020602050206000502060005010604050a060005060100050b01000202010302020500
+000005ff052f000005080600050006000500060005010600050206000501060005020600
+05030600050d060005040100050b01000500020201030202000005ff052f000005090600
+05000600050006000501060005020600050206000500060005040600050e060005040100
+050b01000202010302020500000005ff052f000005080600050106010501060405030600
+05050600050d060005040100050b01000500020201030202000005ff052f000005090600
+0501060105010600050606000500060005040600050c060005060100050b010002020103
+02020500000005ff052f0000050806000502060005010600050206000501060005020600
+05030600050b060005060100050b01000500020201030202000005ff052f000005090600
+05020600050206020502060005020600050406010508060005080100050b010002020103
+02020500000005ff052f0000052a060005080100050b01000500020201030202000005ff
+052f000005360100050b01000202010302020500000005ff052f000005340100050b0100
+0500020201030202000005ff052f000005360100050b01000202010302020500000005ff
+052f000005340100050b01000500020201030202000005ff052f000005360100050b0100
+0202010302020500000005ff052f00000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+05000100050001000500010005000100050b01000500020201030202000005ff052f0000
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+05000100050b01000202010302020500000005ff057201000500020201030202000005ff
+057401000202010302020500000005ff057201000500020201030202000005ff05740100
+0202010302020500000005ff057201000500020201030202000005ff0574010002020103
+02020500000005ff057201000500020201030202000005ff057401000202010302020500
+000005ff057201000500020201030202000005ff057401000202010302020500000005ff
+057201000500020201030202000005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100020201030202050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500020201030202050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500020201030202000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+0000050001000202010302020500000005ff057201000500020201030202000005ff0574
+01000202010302020500000005ff057201000500020201030202000005ff057401000202
+010302020500000005ff057201000500020201030202000005ff05740100020201030202
+0500000005ff057201000500020201030202000005ff0574010002020103020205000000
+05ff057201000500020201030202000005ff057401000202010302020500000005ff0572
+01000500020201030202000005ff057401000202010302020500000005ff057201000500
+020201030202000005ff057401000202010302020500000005ff05720100050002020103
+0202000005ff057401000202010302020500000005ff0572010005000202010302020000
+05ff057401000202010302020500000005ff057201000500020201030202000005ff0574
+01000202010302020500000005ff057201000500020201030202000005ff057401000202
+010302020500000005ff0572010005000202010302020000052e00000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000517000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005170000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+0528010002020103020205000000052c0000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000051700000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000517000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005280100050002020103
+02020000052e0000054c010005170000054c010005170000054c01000528010002020103
+020205000000052c0000054c010005170000054c010005170000054c0100052801000500
+0202010302020000052e0000054c010005170000054c010005170000054c010005280100
+02020103020205000000052c0000054c010005170000054c010005170000054c01000528
+010005000202010302020000052e0000054c010005170000054c010005170000054c0100
+0528010002020103020205000000052c0000054c010005170000054c010005170000054c
+01000528010005000202010302020000052e0000054c010005170000054c010005170000
+054c01000528010002020103020205000000052c000005110104051f0100051401000517
+000005120102051f01020513010005170000051401030519010005180100052801000500
+0202010302020000052e0000051201000521010005150100051700000510010005020100
+052001000514010005170000051301000502010005180100051901000528010002020103
+020205000000052c00000513010005030100050001010503010205030102050201000500
+010105020104051201000517000005110100050201000502010205020100050001010503
+010205030102050501000513010005170000051401000502010005020102050301020503
+010205020104051601000528010005000202010302020000052e00000512010005030101
+050101000501010005020100050101000502010005010101050101000503010005150100
+051700000510010005050100050201000501010105010100050101000502010005010100
+050201000504010005140100051700000513010005020100050101000502010005010100
+05020100050101000502010005030100051901000528010002020103020205000000052c
+000005130100050301000502010005010100050501000502010005010100050701000514
+010005170000051101000509010005010100050201000501010005050100050201000504
+010005130100051700000514010305020100050201000501010005050100050201000503
+0100051801000528010005000202010302020000052e0000051201000503010005020100
+050201020502010405010100050701000515010005170000051001000506010305010100
+050201000501010005050104050401000514010005170000051301000501010005020104
+050201020502010405030100051901000528010002020103020205000000052c00000513
+010005030100050201000505010005010100050501000507010005140100051700000511
+010005020100050101000502010005010100050201000501010005050100050801000513
+010005170000051401000502010005010100050901000501010005070100051801000528
+010005000202010302020000052e00000512010005030100050201000501010005020100
+050101000502010005010100050701000515010005170000051001000502010005010100
+050201000501010005020100050101000502010005010100050201000504010005140100
+051700000513010005020100050101000502010005010100050201000501010005020100
+05030100051901000528010002020103020205000000052c000005110104050101000502
+010005020102050301020502010005080101051201000517000005120102050301030501
+010005020100050201020503010205050100051301000517000005140100050201000502
+0102050301020503010205050101051601000528010005000202010302020000052e0000
+054c010005170000054c010005170000054c01000528010002020103020205000000052c
+0000054c010005170000054c010005170000054c01000528010005000202010302020000
+052e0000054c010005170000054c010005170000054c0100052801000202010302020500
+0000052c0000054c010005170000054c010005170000054c010005280100050002020103
+02020000052e0000054c010005170000054c010005170000054c01000528010002020103
+020205000000052c0000054c010005170000054c010005170000054c0100052801000500
+0202010302020000052e0000054c010005170000054c010005170000054c010005280100
+02020103020205000000052c0000054c010005170000054c010005170000054c01000528
+010005000202010302020000052e0000054c010005170000054c010005170000054c0100
+0528010002020103020205000000052c0000054c010005170000054c010005170000054c
+01000528010005000202010302020000052e000005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005170000
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100051700000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000528010002020103
+020205000000052c00000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000517000005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005170000050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100052801000500020201030202000005ff0574
+01000202010302020500000005ff057201000500020201030202000005ff057401000202
+010302020500000005ff057201000500020201030202000005ff05740100020201030202
+0500000005ff057201000500020201030202000005ff0574010002020103020205000000
+05ff057201000500020201030202000005ff057401000202010302020500000005ff0572
+01000500020201030202000005ff057401000202010302020500000005ff057201000500
+020201030202000005ff057401000202010302020500000005ff05720100050002020103
+0202000005ff057401000202010100040500000005ff0572010005000005020204000000
+05ff057401000000020204000000020204000500000005ff057201000500000002020400
+000002020400000005ff0574010000000202040000000202040005000000050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050000000202040000000202040000000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010000000202040000000202
+0400000502ff026a00060202040000000208040002ff026a000002080400000002080400
+02ff026a00000208040000000208040001ff016a0000020804000000040901ff016a0000
+0409
+%%EndData
+end
+%%PageTrailer
+%%Trailer
+%%BoundingBox: 0 41 300 330
+%%EOF
diff --git a/lib/tv/doc/src/tv_row_marked.gif b/lib/tv/doc/src/tv_row_marked.gif
new file mode 100644
index 0000000000..bc80eb34f1
--- /dev/null
+++ b/lib/tv/doc/src/tv_row_marked.gif
Binary files differ
diff --git a/lib/tv/doc/src/tv_row_marked.ps b/lib/tv/doc/src/tv_row_marked.ps
new file mode 100644
index 0000000000..99631c5046
--- /dev/null
+++ b/lib/tv/doc/src/tv_row_marked.ps
@@ -0,0 +1,1611 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (ImageMagick)
+%%Title: (./tv_row_marked.tmp.eps)
+%%CreationDate: (Tue Jun 12 16:11:48 2001)
+%%BoundingBox: 0 61 377 359
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 0
+%%EndComments
+
+%%BeginDefaults
+%%PageOrientation: Portrait
+%%EndDefaults
+
+%%BeginProlog
+%
+% Display a color image. The image is displayed in color on
+% Postscript viewers or printers that support color, otherwise
+% it is displayed as grayscale.
+%
+/buffer 512 string def
+/byte 1 string def
+/color_packet 3 string def
+/pixels 768 string def
+
+/DirectClassPacket
+{
+ %
+ % Get a DirectClass packet.
+ %
+ % Parameters:
+ % red.
+ % green.
+ % blue.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/DirectClassImage
+{
+ %
+ % Display a DirectClass image.
+ %
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { DirectClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayDirectClassPacket } image
+ } ifelse
+} bind def
+
+/GrayDirectClassPacket
+{
+ %
+ % Get a DirectClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % red
+ % green
+ % blue
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/GrayPseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassImage
+{
+ %
+ % Display a PseudoClass image.
+ %
+ % Parameters:
+ % class: 0-PseudoClass or 1-Grayscale.
+ %
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ class 0 gt
+ {
+ currentfile buffer readline pop
+ token pop /depth exch def pop
+ /grays columns 8 add depth sub depth mul 8 idiv string def
+ columns rows depth
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { currentfile grays readhexstring pop } image
+ }
+ {
+ %
+ % Parameters:
+ % colors: number of colors in the colormap.
+ % colormap: red, green, blue color packets.
+ %
+ currentfile buffer readline pop
+ token pop /colors exch def pop
+ /colors colors 3 mul def
+ /colormap colors string def
+ currentfile colormap readhexstring pop pop
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { PseudoClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayPseudoClassPacket } image
+ } ifelse
+ } ifelse
+} bind def
+
+/DisplayImage
+{
+ %
+ % Display a DirectClass or PseudoClass image.
+ %
+ % Parameters:
+ % x & y translation.
+ % x & y scale.
+ % label pointsize.
+ % image label.
+ % image columns & rows.
+ % class: 0-DirectClass or 1-PseudoClass.
+ % compression: 0-RunlengthEncodedCompression or 1-NoCompression.
+ % hex color packets.
+ %
+ gsave
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ x y translate
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ currentfile buffer readline pop
+ token pop /pointsize exch def pop
+ /Helvetica findfont pointsize scalefont setfont
+ x y scale
+ currentfile buffer readline pop
+ token pop /columns exch def
+ token pop /rows exch def pop
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ currentfile buffer readline pop
+ token pop /compression exch def pop
+ class 0 gt { PseudoClassImage } { DirectClassImage } ifelse
+ grestore
+} bind def
+%%EndProlog
+%%Page: 1 1
+%%PageBoundingBox: 0 61 377 359
+userdict begin
+%%BeginData:
+DisplayImage
+0 61
+377.000000 298.000000
+12
+719 569
+1
+0
+0
+16
+ffffff
+000000
+d8d8d8
+c2c2c2
+6b6b6b
+d9d9d9
+b22222
+00ff00
+ff0000
+990000
+7f7f7f
+999999
+ff7f7f
+c8ffff
+009900
+7fff7f
+000a01ff01ff01b8000b0208040001ff01ff01b800000208040000000208040002ff02ff
+02b8000002080400000002080400020000ff00ff00b50400020000000208040000000202
+04060200000004ff04ff04b5020000000405020204000000020204000209000d02ff02ff
+02ac00000202040000000202040002080000020d04000274010302110103023201020258
+0102020c010102010101021e010102290101020601010208010102310101022a01010230
+0101028200000202040000000202040002080000020d0400027401010202010702000101
+0203010102010101020e01050200010702010103020d0101020401010204010302030103
+020e010302060103020301030203010302060103020b0101020a01010202010102190100
+02030101021c0100020b01010206010102090101021b010202020100020d0101022a0101
+020c0104021e0101028200000202040000000202040002080000020d0400027401010205
+0101020301010203010102010101020e0101020701010203010102010101020c01010202
+010302030101020101010201010102010101020801010201010102010101020401010201
+01010201010102010101020101010201010102040101020101010201010102060101020a
+0101020201010218010102210101020b01010206010102090101021b010202020100020d
+01010238010102020101021d010102820000020204000000020204000208000002020406
+020304000274010102050101020301010203010102010101020e01010207010102030101
+020501010209010102030101020701010201010102010101020601020202010102010101
+020801010201010102010101020101010201010102040101020101010202010202030101
+020a01010203010102020103020301030202010302010104020101010202010302030101
+02000101020a0104020101030203010102000101020301010202010302030101021a0100
+020001010201010002020103020301040202010302020101020901010200010102010101
+020301030203010102020101020001010202010102010103020201010200010102010101
+020301030202010102000101020101010202010302020101020201010271000002020400
+000004030208000002020400030400000203040002740101020501010204010102020100
+02020101020e0101020701010203010202040101020a0100020301010207010102010101
+020101010205010102040101020101010208010102010101020101010201010102010101
+02040101020101010204010102020100020b010102030101020101010201010102010101
+020101010200010102010101020101010203010102010101020101010202010202000101
+020a01010202010102010101020201020200010102020101020101010201010102020101
+021a01000200010102010100020101010201010102010101020101010201010102010101
+020101010209010202000102020001010201010102010101020201010202010202000101
+020101010200010102000101020201020200010202000101020101010201010102010101
+0200010102010101020101010201010102010101020201010271000004030101020b0000
+0203040003020000020404000274010102050101020401010201010102020101020e0104
+0204010102040103020d0101020401010205010202020101020101010204010102050101
+020101010207010102020101020101010202010402040101020101010205010102020101
+020901010203010102010101020101010201010102080101020101010203010102010101
+020101010202010102010101020a01010206010102020101020101010202010102010101
+0201010102020101021a0100020001020200010002010101020101010201010102010101
+0201010102010101020d0101020101010201010102050101020201010202010102010101
+020101010200010102000101020201010201010102010101020501010201010202030101
+0201010102010101020101010202010002750103020b0000020304000302000002040400
+0274010102050101020501010200010002030101020e01010207010102060102020e0100
+020301010207010102010101020101010205010102040101020101010206010102030101
+020101010205010102040101020101010204010102020100020b01010203010102010101
+020101010201010102050104020101010203010102010101020101010202010102010101
+020a0101020301040202010102010101020201010201010502020101021a010002010101
+020001000201010102010101020101010201010102010105020d01010201010102010101
+020201040202010102020101020101010201010102000101020001010202010102010101
+0201010102020104020101010204010102010105020201010200010102750103020b0000
+02040400030000000205040002740101020501010205010302030101020e010102070101
+02070101020d010102030101020701010201010102010101020601020202010102010101
+0205010102040101020101010205010102040101020101010202010202030101020a0101
+020301010201010102010101020101010204010102010101020101010203010102010101
+020101010202010102010101020a01010202010102010101020201010201010102020101
+0201010102060101021a0100020201020201010102010101020101010201010102010101
+021101010201010102010101020101010201010102020101020201010201010102010101
+020101010200010102010101020101010201010102010101020101010201010102040101
+02010101020601010200010002760103020b000002040400030000000205040002740101
+020501010206010102040101020e01010207010102030101020101010201010102080101
+020401010203010102010101020101010201010102010101020401010201010102010101
+020101010200010502010101020101010201010102010101020101010200010102010101
+0201010102060101020a0101020201010201010102010101020101010202010002000101
+02010101020101010203010102010101020101010202010102010101020a010102020101
+02010101020201010201010102020101020101010202010002010101021b010002020102
+020101010201010102010101020001020201010102020100020101010209010102010101
+020101010201010102010101020201010202010102010101020201010207010102010101
+020101010201010102010101020101010204010102010101020201000203010202760103
+020b0000020500000206040002740101020501010206010102040101020e010502030101
+020401030202010102080101020401010204010302030103020201010209010302020101
+0200010502020103020301030202010102010103020b0101020a01010202010102020103
+0203010302020102020001010201010202010101020201030203010102010101020b0102
+020101020200010102010104020301010202010302020101021b01000203010102020103
+020301010200010102020103020201010209010102010101020101010202010202000101
+020101010202010102010101020301050202010102010101020101010202010202000101
+0200010102040101020201030204010102770103020b0000020d04000274010302110103
+0232010202190100023d0102020c01010237010602230101029e010102780103020b0000
+020d040002dd010002ff0254010102780103020b0000020d040002ff02ff02ae0103020c
+040d02ff02ff02af010302ff02ff02ca010302ff02ff02ca0103020200ff00ff00c30400
+020201030202000004ff04ff04c30202010302ff02ff02ca010302020500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500020201030202000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500010002020103020205000000
+05ff05ff05c001000500020201030202000005ff05ff05c2010002020103020205000000
+05ff05ff05c001000500020201030202000005ff05ff05c2010002020103020205000000
+05ff05ff05c0010005000202010302020000050c06040504060005030602051f06040505
+0600050406000504060005190600050206000504060005270602050b06000506060005ff
+05df060005020600050906020514010002020103020205000000050b0600050f0600051f
+060005090600050a06000519060005020600052c060005020600050a060005ff05e70600
+05020600050b06000513010005000202010302020000050c060005060602050506000503
+060205180600050606010500060005020602050206040517060005020600050206020503
+060205020600050206000517060005020600050106000500060105020604050206020503
+060205020600050006010503060205ff05ca060005020600050206020505060005020600
+05000601050d010002020103020205000000050b06000508060005050600050206000502
+06000517060005050600050106010504060005040600051a060005000600050506000502
+060005020600050106000502060005170600050206000501060105010600050306000506
+060005020600050206000501060105010600050106000502060005ff05c9060005020600
+0501060005020600050406000502060105010600050b010005000202010302020000050c
+060305050600050506000502060005020600051706030502060005020600050406000504
+0600051a0600050006000505060005020600050206000501060005000600050006000517
+060005020600050106000502060005030600050606000502060005020600050106000502
+06000501060005ff05cd06040501060005020600050406000502060005020600050c0100
+02020103020205000000050b060005080600050506000502060405170600050506000502
+06000504060005040600051a060005000600050506000502060405010600050006000500
+060005170600050206000501060005020600050306000506060005020600050206000501
+0600050206000502060205ff05ca06000502060005010604050406000502060005020600
+050b010005000202010302020000050c0600050806000505060005020600051b06000505
+0600050206000504060005040600051b0600050606000502060005050600050006000500
+060005170600050206000501060005020600050306000506060005020600050206000501
+0600050206000505060005ff05c906000502060005010600050806000502060005020600
+050c010002020103020205000000050b0600050806000505060005020600050206000517
+060005050600050106010504060005040600051b06000506060005020600050206000501
+060005000600050006000517060005020600050106010501060005030600050606000502
+0600050206000501060005020600050106000502060005ff05c906000502060005010600
+05020600050406000502060105010600050b010005000202010302020000050c06000508
+060005050600050306020518060405020601050006000504060005050601051906000506
+060005030602050306000500060005190602050206000500060105050601050406000503
+060205020600050206000502060205ff05ca060005020600050206020505060005020600
+05000601050d01000202010302020500000005a8060005ff05ff05050600050f01000500
+0202010302020000050b0606052a0606052a0606052a06060500060005ff05ef0606050e
+06000510010002020103020205000000050a0606052a0606052a0606052a060605000600
+05ff05ef0606050e0600050f01000500020201030202000005ff05ff05c2010002020103
+02020500000005ff05ff05c001000500020201030202000005ff05ff05c2010002020103
+020205000000050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000202010302020000050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+02020103020205ff05ff05c402020103020205ff05ff05c402020103020205ff05ff05c4
+02020103020205ff05ff05c402020103020205ff05ff05c402020103020205ff05ff05c4
+02020103020205ff05ff05c402020103020205ff05ff05c4020201030202053600000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000051a00000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050100000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050100000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000051a00000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000051a00000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000051a00000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+00000500000005ff057c0202010302020535000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500010005180000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000100000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500010000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050001000518000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500010005180000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000100
+051800000500000005000000050000000500000005000000050000000500000005000000
+0500000005000000050000000500010005ff057b0202010302020536000005140100051a
+00000514010005010000051401000501000005140100051a000005140100051a00000514
+0100051a00000514010005ff057c02020103020205350000051601000518000005160100
+000005160100000005160100051800000516010005180000051601000518000005160100
+05ff057b0202010302020536000005140100051a00000514010005010000051401000501
+000005140100051a000005140100051a000005140100051a00000514010005ff057c0202
+010302020535000005050602050306020506010005180000051601000000051601000000
+0516010005180000051601000518000005160100051800000516010005ff057b02020103
+020205360000050406020503060205050100051a00000514010005010000051401000501
+000005140100051a00000506060405080100051a00000508060105090100051a00000508
+06030507010005ff057c0202010302020535000005040604050106040505010005180000
+051006000504010000000510060005040100000005040600051001000518000005050608
+0507010005180000050806030509010005180000050706070506010005ff057b02020103
+0202053600000503060005010601050106000501060105040100051a0000050f06000503
+010005010000050f0600050301000501000005030600050f0100051a00000503060a0505
+0100051a00000507060305080100051a000005050603050106030504010005ff057c0202
+01030202053500000503060d0504010005180000050d0600050106000504010000000504
+0600050a06000504010000000504060005010600050d0100051800000504060305020603
+050601000518000005090601050a01000518000005060602050306020505010005ff057b
+020201030202053600000501060005000603050006020500060405020100051a0000050c
+060005010600050301000501000005030600050a06000503010005010000050306000501
+0600050c0100051a0000050206030504060305040100051a000005140100051a00000505
+0602050306020504010005ff057c02020103020205350000050206000500060305000602
+050006040503010005180000050a06000501060005010600050401000000050406000504
+060005040600050401000000050406000501060005010600050a01000518000005030602
+050306070503010005180000050706040509010005180000050706010502060205060100
+05ff057b020201030202053600000501060005000603050006020500060405020100051a
+000005090600050106000501060005030100050100000503060005040600050406000503
+01000501000005030600050106000501060005090100051a000005020602050406050503
+0100051a00000507060305080100051a0000050a06020506010005ff057c020201030202
+053500000502060005000603050006020500060405030100051800000507060005010600
+050106000501060005040100000005040600050406000501060005010600050401000000
+050406000501060005010600050106000507010005180000050306020505060305050100
+05180000050906020509010005180000050a06020508010005ff057b0202010302020536
+000005010600050006070500060405020100051a00000506060005010600050106000501
+060005030100050100000503060005040600050106000501060005030100050100000503
+060005010600050106000501060005060100051a0000050206030505060105050100051a
+00000508060205080100051a0000050806020508010005ff057c02020103020205350000
+050206000500060405010600050006040503010005180000050406000501060005010600
+050106000501060005040100000005040600050106000501060005010600050106000504
+010000000504060005010600050106000501060005010600050401000518000005040603
+050d010005180000050906020509010005180000050906020509010005ff057b02020103
+020205360000050106060501060605020100051a00000503060005010600050106000501
+060005010600050301000501000005030600050106000501060005010600050106000503
+010005010000050306000501060005010600050106000501060005030100051a00000503
+060905060100051a00000508060205080100051a00000514010005ff057c020201030202
+053500000502060005000602050506000500060205030100051800000504060005010600
+050106000501060005010600050401000000050406000501060005010600050106000501
+060005040100000005040600050106000501060005010600050106000504010005180000
+050506070508010005180000050806040508010005180000050906020509010005ff057b
+020201030202053600000501060005000602050506000500060205020100051a00000503
+060005010600050106000501060005010600050301000501000005030600050106000501
+060005010600050106000503010005010000050306000501060005010600050106000501
+060005030100051a00000506060405080100051a00000506060605060100051a00000508
+06020508010005ff057c0202010302020535000005020604050506040503010005180000
+051601000000051601000000051601000518000005160100051800000516010005180000
+0516010005ff057b0202010302020536000005140100051a000005140100050100000514
+01000501000005140100051a000005140100051a000005140100051a00000514010005ff
+057c02020103020205350000051601000518000005160100000005160100000005160100
+05180000051601000518000005160100051800000516010005ff057b0202010302020536
+000005140100051a00000514010005010000051401000501000005140100051a00000514
+0100051a000005140100051a00000514010005ff057c0202010302020535000005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005180000050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100000005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010000000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000518000005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005180000
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100051800000500010005000100050001000500010005000100
+0500010005000100050001000500010005000100050001000500010005ff057b02020103
+020205360100050001000500010005000100050001000500010005000100050001000500
+0100050001000500010005000100051a0100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005010100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005010100050001000500010005000100050001000500010005000100050001000500
+0100050001000500010005000100051a0100050001000500010005000100050001000500
+0100050001000500010005000100050001000500010005000100051a0100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+0100051a0100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005ff057c02020103020205ff05ff05c4020201030202
+05ff05ff05c402020103020205ff05ff05c402020103020205ff05ff05c4020201030202
+05ff05ff05c402020103020205ff05ff05c402020103020205ff05ff05c4020201030202
+05ff05ff05c402020103020205ff05ff05c402020103020205ff05ff05c4020201030202
+05ff05ff05c4020201030202050301ff01ff01bc0503020201030202050301ff01ff01a8
+050000000500000005000000050000000500000005000000050000000500000005000000
+050001000503020201030202050301ff01ff01a800000500000005000000050000000500
+000005000000050000000500000005000000050001010503020201030202050301020bff
+0bff0ba2010205000000050e0100050001000503020201030202050301020bff0bff0ba1
+000001020000051001010503020201030202050301020b0100ff00ff00a0010205000000
+050e0100050001000503020201030202050301020b0100040101007101010002010100ff
+00ff002001020000051001010503020201030202050301020b0100030100007501000001
+010100ff00ff0020010205000000050e0100050001000503020201030202050301020b01
+000301000003010000160100001001000006010200100100000c0100001c010000010101
+00ff00ff002001020000051001010503020201030202050301020b010003010000030100
+002801000008010000100100000c0100001c01000001010100ff00ff0020010205000000
+050e0100050001000503020201030202050301020b010003010000030100000101000003
+010200020100000001010003010200020100000001010009010000000101000501000003
+010200030102000201000001010000030102000201000000010100030102000201000000
+01010003010100000100000301000001010100ff00ff0020010200000502010a05020101
+0503020201030202050301020b0100030100000301000000010000030100000201000001
+010100010100000401000002010100010100000801010001010000040100000201000002
+010000010100000201000001010000000100000301000002010000010101000101000001
+01000002010000010101000101000001010000010101000301000001010100ff00ff0020
+0102050000000502010805020100050001000503020201030202050301020b0100010101
+000401010008010000010100000801000002010000020100000801000002010000040100
+000601000001010000050101000401000002010000010100000201000001010000020100
+0001010000050100000201000004010300ff00ff00200102000005040106050401010503
+020201030202050301020b01000301000003010100050103000101000008010000020100
+000201000008010000020100000401000003010300010100000501010004010400010100
+0002010000010104000101000005010000020100000301000001010100ff00ff00200102
+050000000504010405040100050001000503020201030202050301020b01000301000003
+010000000100000301000002010000010100000801000002010000020100000801000002
+010000040100000201000002010000010100000501000000010000030100000501000002
+010000010100000501000005010000020100000301000001010100ff00ff002001020000
+05060102050601010503020201030202050301020b010003010000030100000101000002
+010000020100000101000008010000020100000201000003010100020101000101000004
+010000020100000201000001010000020100000101000001010000020100000201000001
+0101000101000001010000020100000101000005010000010101000301000001010100ff
+00ff00200102050000000506010005060100050001000503020201030202050301020b01
+000301000003010000020100000201030001010000080100000201000002010000030101
+000201000000010100050100000301030002010200020100000201000002010200020100
+0000010100030102000201000006010100000100000301000001010100ff00ff00200102
+0000051001010503020201030202050301020b0100030100002901000045010000030100
+0001010100ff00ff0020010205000000050e010005000100050302020103020205030102
+0b0100040101002501010042010000020100000101010002010100ff00ff002001020000
+051001010503020201030202050301020b01007201020007010100ff00ff002001020500
+0000050e0100050001000503020201030202050301020b0100ff00ff00a0010200000510
+01010503020201030202050301020b0100ff00ff00a0010205000000050e010005000100
+0503020201030202050301020b0000ff00ff00a101020000051001010503020201030202
+050301ff01ff01a805000000050001000500010005000100050001000500010005000100
+0500010005000100050001000503020201030202050301ff01ff01a80000050001000500
+010005000100050001000500010005000100050001000500010005000101050302020103
+0202050301ff01ff01bc05030202010302020503010005ff05ff05a80100050001000500
+010005000100050001000500010005000100050001000500010005000100050302020103
+02020503010005ff05ff05a7010005000100050001000500010005000100050001000500
+0100050001000500010005000000010005030202010302020503010005010bff0bff0ba3
+0502010003060100030600000500010005030202010302020503010005010bff0bff0ba2
+000005010100050003050000050003060500000001000503020201030202050301000501
+0b0100ff00ff00a105020100030505000100050003050000050001000503020201030202
+0503010005010b0100ff00ff00a105010100050003040500000005000100030505000000
+010005030202010302020503010005010b0100ff00ff00a1050201000304000005020100
+030400000500010005030202010302020503010005010b0100ff00ff00a1050101000500
+03030000050201000500030405000000010005030202010302020503010005010b0100ff
+00ff00a10502010003030500000005020100050003030000050001000503020201030202
+0503010005010b0100ff00ff00a105010100050003020500000005040100030305000000
+010005030202010302020503010005010b0100ff00ff00a1050201000302000005060100
+030200000500010005030202010302020503010005010b0100ff00ff00a1050101000500
+03010000050601000500030205000000010005030202010302020503010005010b0100ff
+00ff00a10502010003010500000005060100050003010000050001000503020201030202
+0503010005010b0100ff00ff00a105010100050003000500000005080100030105000000
+010005030202010302020503010005010b0100ff00ff00a10502010003000000050a0100
+030000000500010005030202010302020503010005010b0100ff00ff00a1050101000500
+000005000100050001000500010005000100050001000500010005000300050000000100
+05030202010302020503010005010b0100ff00ff00a10502010005000100050001000500
+010005000100050001000500010005000100050000000500010005030202010302020503
+010005010b0100ff00ff00a1050101000500030e05000000010005030202010302020503
+010005010b01000301010071010100ff00ff002705020100050000000500000005000000
+050000000500000005000000050000000500000005000100050302020103020205030100
+05010b01000201000075010000ff00ff0026050101000500000005000000050000000500
+000005000000050000000500000005000100050000000100050302020103020205030100
+05010b01000201000003010000160100001001000006010200100100000c0100001c0100
+00ff00ff00260502010005000000050a0100050000000500010005030202010302020503
+010005010b010002010000030100002801000008010000100100000c0100001c010000ff
+00ff00260501010005000000050c01000500000001000503020201030202050301000501
+0b0100020100000301000001010000030102000201000000010100030102000201000000
+010100090100000001010005010000030102000301020002010000010100000301020002
+01000000010100030102000201000000010100030101000001000003010000ff00ff0026
+0502010005000000050a0100050000000500010005030202010302020503010005010b01
+000201000003010000000100000301000002010000010101000101000004010000020101
+000101000008010100010100000401000002010000020100000101000002010000010100
+000001000003010000020100000101010001010000010100000201000001010100010100
+00010100000101010003010000ff00ff00260501010005000000050c0100050000000100
+05030202010302020503010005010b010000010100040101000801000001010000080100
+000201000002010000080100000201000004010000060100000101000005010100040100
+000201000001010000020100000101000002010000010100000501000002010000040101
+00ff00ff00240502010005000000050a0100050000000500010005030202010302020503
+010005010b01000201000003010100050103000101000008010000020100000201000008
+010000020100000401000003010300010100000501010004010400010100000201000001
+01040001010000050100000201000003010000ff00ff00260501010005000000050c0100
+05000000010005030202010302020503010005010b010002010000030100000001000003
+010000020100000101000008010000020100000201000008010000020100000401000002
+010000020100000101000005010000000100000301000005010000020100000101000005
+010000050100000201000003010000ff00ff00260502010005000000050a010005000000
+0500010005030202010302020503010005010b0100020100000301000001010000020100
+000201000001010000080100000201000002010000030101000201010001010000040100
+000201000002010000010100000201000001010000010100000201000002010000010101
+0001010000010100000201000001010000050100000101010003010000ff00ff00260501
+010005000000050c010005000000010005030202010302020503010005010b0100020100
+000301000002010000020103000101000008010000020100000201000003010100020100
+000001010005010000030103000201020002010000020100000201020002010000000101
+000301020002010000060101000001000003010000ff00ff00260502010005000000050a
+0100050000000500010005030202010302020503010005010b0100020100002901000045
+01000003010000ff00ff00260501010005000000050c0100050000000100050302020103
+02020503010005010b01000301010025010100420100000201000001010100ff00ff0027
+0502010005000000050a0100050000000500010005030202010302020503010005010b01
+0071010200ff00ff002c0501010005000000050c01000500000001000503020201030202
+0503010005010b0100ff00ff00a10502010005000000050a010005000000050001000503
+0202010302020503010005010b0100ff00ff00a10501010005000000050c010005000000
+010005030202010302020503010005010b0100ff00ff00a10502010005000000050a0100
+050000000500010005030202010302020503010005010b0100ff00ff00a1050101000500
+0000050c010005000000010005030202010302020503010005010b0100ff00ff00a10502
+010005000000050a0100050000000500010005030202010302020503010005010b0100ff
+00ff00a10501010005000000050c01000500000001000503020201030202050301000501
+0b0100ff00ff00a10502010005000000050a010005000000050001000503020201030202
+0503010005010b0100ff00ff00a10501010005000000050c010005000000010005030202
+010302020503010005010b0100ff00ff00a10502010005000000050a0100050000000500
+010005030202010302020503010005010b0100ff00ff00a10501010005000000050c0100
+05000000010005030202010302020503010005010b0100ff00ff00a10502010005000000
+050a0100050000000500010005030202010302020503010005010b0100ff00ff00a10501
+010005000000050c010005000000010005030202010302020503010005010b0100ff00ff
+00a10502010005000000050a010005000000050001000503020201030202050301000501
+0b0100ff00ff00a10501010005000000050c010005000000010005030202010302020503
+010005010b0100ff00ff00a10502010005000000050a0100050000000500010005030202
+010302020503010005010b0100ff00ff00a10501010005000000050c0100050000000100
+05030202010302020503010005010b0100ff00ff00a10502010005000000050a01000500
+00000500010005030202010302020503010005010b0100ff00ff00a10501010005000000
+050c010005000000010005030202010302020503010005010b0100ff00ff00a105020100
+05000000050a0100050000000500010005030202010302020503010005010b0100ff00ff
+00a10501010005000000050c010005000000010005030202010302020503010005010b01
+00ff00ff00a10502010005000000050a0100050000000500010005030202010302020503
+010005010b0100ff00ff00a10501010005000000050c0100050000000100050302020103
+02020503010005010b0100ff00ff00a10502010005000000050a01000500000005000100
+05030202010302020503010005010b0100ff00ff00a10501010005000000050c01000500
+0000010005030202010302020503010005010b0100ff00ff00a10502010005000000050a
+0100050000000500010005030202010302020503010005010b0100ff00ff00a105010100
+05000000050c010005000000010005030202010302020503010005010b0100ff00ff00a1
+0502010005000000050a0100050000000500010005030202010302020503010005010b01
+00ff00ff00a10501010005000000050c0100050000000100050302020103020205030100
+05010b0100ff00ff00a10502010005000000050a01000500000005000100050302020103
+02020503010005010b0100ff00ff00a10501010005000000050c01000500000001000503
+0202010302020503010005010b0100ff00ff00a10502010005000000050a010005000000
+0500010005030202010302020503010005010b0100ff00ff00a10501010005000000050c
+010005000000010005030202010302020503010005010b0100ff00ff00a1050201000500
+0000050a0100050000000500010005030202010302020503010005010b0100ff00ff00a1
+0501010005000000050c010005000000010005030202010302020503010005010b0100ff
+00ff00a10502010005000000050a01000500000005000100050302020103020205030100
+05010b0100ff00ff00a10501010005000000050c01000500000001000503020201030202
+0503010005010b0100ff00ff00a10502010005000000050a010005000000050001000503
+0202010302020503010005010b0100ff00ff00a10501010005000000050c010005000000
+010005030202010302020503010005010b0100ff00ff00a10502010005000000050a0100
+050000000500010005030202010302020503010005010b0100ff00ff00a1050101000500
+0000050c010005000000010005030202010302020503010005010b0100ff00ff00a10502
+010005000000050a0100050000000500010005030202010302020503010005010b0100ff
+00ff00a10501010005000000050c01000500000001000503020201030202050301000501
+0b0100ff00ff00a10502010005000000050a010005000000050001000503020201030202
+0503010005010b0100ff00ff00a10501010005000000050c010005000000010005030202
+010302020503010005010b0100ff00ff00a10502010005000000050a0100050000000500
+010005030202010302020503010005010b0100ff00ff00a10501010005000000050c0100
+05000000010005030202010302020503010005010b0100ff00ff00a10502010005000000
+050a0100050000000500010005030202010302020503010005010b0100ff00ff00a10501
+010005000000050c010005000000010005030202010302020503010005010b0100ff00ff
+00a10502010005000000050a010005000000050001000503020201030202050301000501
+0b0100ff00ff00a10501010005000000050c010005000000010005030202010302020503
+010005010b0100ff00ff00a10502010005000000050a0100050000000500010005030202
+010302020503010005010b0100ff00ff00a10501010005000000050c0100050000000100
+05030202010302020503010005010b0100ff00ff00a10502010005000000050a01000500
+00000500010005030202010302020503010005010b0100ff00ff00a10501010005000000
+050c010005000000010005030202010302020503010005010b0100ff00ff00a105020100
+05000000050a0100050000000500010005030202010302020503010005010b0100ff00ff
+00a10501010005000000050c010005000000010005030202010302020503010005010b01
+00ff00ff00a10502010005000000050a0100050000000500010005030202010302020503
+010005010b0100ff00ff00a10501010005000000050c0100050000000100050302020103
+02020503010005010b0100ff00ff00a10502010005000000050a01000500000005000100
+05030202010302020503010005010b0100ff00ff00a10501010005000000050c01000500
+0000010005030202010302020503010005010b0100ff00ff00a10502010005000000050a
+0100050000000500010005030202010302020503010005010b0100ff00ff00a105010100
+05000000050c010005000000010005030202010302020503010005010b0100ff00ff00a1
+0502010005000000050a0100050000000500010005030202010302020503010005010b01
+00ff00ff00a10501010005000000050c0100050000000100050302020103020205030100
+05010b0100ff00ff00a10502010005000000050a01000500000005000100050302020103
+02020503010005010b0100ff00ff00a10501010005000000050c01000500000001000503
+0202010302020503010005010b0100ff00ff00a10502010005000000050a010005000000
+0500010005030202010302020503010005010b0100ff00ff00a10501010005000000050c
+010005000000010005030202010302020503010005010b0100ff00ff00a1050201000500
+0000050a0100050000000500010005030202010302020503010005010b0100ff00ff00a1
+0501010005000000050c010005000000010005030202010302020503010005010b0100ff
+00ff00a10502010005000000050a01000500000005000100050302020103020205030100
+05010b0100ff00ff00a10501010005000000050c01000500000001000503020201030202
+0503010005010b0100ff00ff00a10502010005000000050a010005000000050001000503
+0202010302020503010005010b0100ff00ff00a10501010005000000050c010005000000
+010005030202010302020503010005010b0100ff00ff00a10502010005000000050a0100
+050000000500010005030202010302020503010005010b0100ff00ff00a1050101000500
+0000050c010005000000010005030202010302020503010005010b0100ff00ff00a10502
+010005000000050a0100050000000500010005030202010302020503010005010b0100ff
+00ff00a10501010005000000050c01000500000001000503020201030202050301000501
+0b0100ff00ff00a10502010005000000050a010005000000050001000503020201030202
+0503010005010b0100ff00ff00a10501010005000000050c010005000000010005030202
+010302020503010005010b0100ff00ff00a10502010005000000050a0100050000000500
+010005030202010302020503010005010b0100ff00ff00a10501010005000000050c0100
+05000000010005030202010302020503010005010b0100ff00ff00a10502010005000000
+050a0100050000000500010005030202010302020503010005010b0100ff00ff00a10501
+010005000000050c010005000000010005030202010302020503010005010b0100ff00ff
+00a10502010005000000050a010005000000050001000503020201030202050301000501
+0b0100ff00ff00a10501010005000000050c010005000000010005030202010302020503
+010005010b0100ff00ff00a10502010005000000050a0100050000000500010005030202
+010302020503010005010b0100ff00ff00a10501010005000000050c0100050000000100
+05030202010302020503010005010b0100ff00ff00a10502010005000000050a01000500
+00000500010005030202010302020503010005010b0100ff00ff00a10501010005000000
+050c010005000000010005030202010302020503010005010b0100ff00ff00a105020100
+05000000050a0100050000000500010005030202010302020503010005010b0100ff00ff
+00a10501010005000000050c010005000000010005030202010302020503010005010b01
+00ff00ff00a10502010005000000050a0100050000000500010005030202010302020503
+010005010b0100ff00ff00a10501010005000000050c0100050000000100050302020103
+02020503010005010b0100ff00ff00a10502010005000000050a01000500000005000100
+05030202010302020503010005010b0100ff00ff00a10501010005000000050c01000500
+0000010005030202010302020503010005010b0100ff00ff00a10502010005000000050a
+0100050000000500010005030202010302020503010005010b0100ff00ff00a105010100
+05000000050c010005000000010005030202010302020503010005010b0100ff00ff00a1
+0502010005000000050a0100050000000500010005030202010302020503010005010b01
+00ff00ff00a10501010005000000050c0100050000000100050302020103020205030100
+05010b0100ff00ff00a10502010005000000050a01000500000005000100050302020103
+02020503010005010b0100ff00ff00a10501010005000000050c01000500000001000503
+0202010302020503010005010b0100ff00ff00a10502010005000000050a010005000000
+0500010005030202010302020503010005010b0100ff00ff00a10501010005000000050c
+010005000000010005030202010302020503010005010b0100ff00ff00a1050201000500
+0000050a0100050000000500010005030202010302020503010005010b0100ff00ff00a1
+0501010005000000050c010005000000010005030202010302020503010005010b0100ff
+00ff00a10502010005000000050a01000500000005000100050302020103020205030100
+05010b0100ff00ff00a10501010005000000050c01000500000001000503020201030202
+0503010005010b0100ff00ff00a10502010005000000050a010005000000050001000503
+0202010302020503010005010b0100ff00ff00a10501010005000000050c010005000000
+010005030202010302020503010005010b0100ff00ff00a10502010005000000050a0100
+050000000500010005030202010302020503010005010b0100ff00ff00a1050101000500
+0000050c010005000000010005030202010302020503010005010b0100ff00ff00a10502
+010005000000050a0100050000000500010005030202010302020503010005010b0100ff
+00ff00a10501010005000000050c01000500000001000503020201030202050301000501
+0b0100ff00ff00a10502010005000000050a010005000000050001000503020201030202
+0503010005010b0100ff00ff00a10501010005000000050c010005000000010005030202
+010302020503010005010b0100ff00ff00a10502010005000000050a0100050000000500
+010005030202010302020503010005010b0100ff00ff00a10501010005000000050c0100
+05000000010005030202010302020503010005010b0100ff00ff00a10502010005000000
+050a0100050000000500010005030202010302020503010005010b0100ff00ff00a10501
+010005000000050c010005000000010005030202010302020503010005010b0100ff00ff
+00a10502010005000000050a010005000000050001000503020201030202050301000501
+0b0100ff00ff00a10501010005000000050c010005000000010005030202010302020503
+010005010b0100ff00ff00a10502010005000000050a0100050000000500010005030202
+010302020503010005010b0100ff00ff00a10501010005000000050c0100050000000100
+05030202010302020503010005010b0100ff00ff00a10502010005000000050a01000500
+00000500010005030202010302020503010005010b0100ff00ff00a10501010005000000
+050c010005000000010005030202010302020503010005010b0100ff00ff00a105020100
+05000000050a0100050000000500010005030202010302020503010005010b0100ff00ff
+00a10501010005000000050c010005000000010005030202010302020503010005010b01
+00ff00ff00a10502010005000000050a0100050000000500010005030202010302020503
+010005010b0100ff00ff00a10501010005000000050c0100050000000100050302020103
+02020503010005010b0100ff00ff00a10502010005000000050a01000500000005000100
+05030202010302020503010005010b0100ff00ff00a10501010005000000050c01000500
+0000010005030202010302020503010005010b0100ff00ff00a10502010005000000050a
+0100050000000500010005030202010302020503010005010b0100ff00ff00a105010100
+05000000050c010005000000010005030202010302020503010005010b0100ff00ff00a1
+0502010005000000050a0100050000000500010005030202010302020503010005010b01
+00ff00ff00a10501010005000000050c0100050000000100050302020103020205030100
+05010b0100ff00ff00a10502010005000000050a01000500000005000100050302020103
+02020503010005010b0100ff00ff00a10501010005000000050c01000500000001000503
+0202010302020503010005010b0100ff00ff00a10502010005000000050a010005000000
+0500010005030202010302020503010005010b0100ff00ff00a10501010005000000050c
+010005000000010005030202010302020503010005010b0100ff00ff00a1050201000500
+0000050a0100050000000500010005030202010302020503010005010b0100ff00ff00a1
+0501010005000000050c010005000000010005030202010302020503010005010b0100ff
+00ff00a10502010005000000050a01000500000005000100050302020103020205030100
+05010b0100ff00ff00a10501010005000000050c01000500000001000503020201030202
+0503010005010b0100ff00ff00a10502010005000000050a010005000000050001000503
+0202010302020503010005010b0100ff00ff00a10501010005000000050c010005000000
+010005030202010302020503010005010b0100ff00ff00a1050201000500000005000100
+050001000500010005000100050001000500010005000000050001000503020201030202
+0503010005010b0100ff00ff00a105010100050000000500010005000100050001000500
+010005000100050001000500010005000000010005030202010302020503010005010b01
+00ff00ff00a105020100030e00000500010005030202010302020503010005010b0100ff
+00ff00a10501010005000000050000000500000005000000050000000500000005000000
+0500000005000000010005030202010302020503010005010b0100ff00ff00a105020100
+030000000500000005000000050000000500000005000000050000000500000005000100
+05030202010302020503010005010b0100ff00ff00a10501010005000300050000000508
+01000500030005000000010005030202010302020503010005010b0100ff00ff00a10502
+010003010500000005080100030000000500010005030202010302020503010005010b01
+00ff00ff00a1050101000500030100000508010003010500000001000503020201030202
+0503010005010b0100ff00ff00a105020100030200000506010005000301000005000100
+05030202010302020503010005010b0100ff00ff00a10501010005000302050000000504
+01000500030205000000010005030202010302020503010005010b0100ff00ff00a10502
+010003030500000005040100030200000500010005030202010302020503010005010b01
+00ff00ff00a1050101000500030300000504010003030500000001000503020201030202
+0503010005010b0100ff00ff00a105020100030400000502010005000303000005000100
+05030202010302020503010005010b0100ff00ff00a10501010005000304050000000500
+01000500030405000000010005030202010302020503010005010b0100ff00ff00a10502
+010003050500010005000100030400000500010005030202010302020503010005010b01
+00ff00ff00a1050101000500030500000500010003050500000001000503020201030202
+0503010005010b0100ff00ff00a105020100030601000500030500000500010005030202
+010302020503010005010b0000ff00ff00a2050101000500030605000306050000000100
+05030202010302020503010005ff05ff05a8010005000000050000000500000005000000
+050000000500000005000000050000000500010005030202010302020503010005ff05ff
+05a701000500000005000000050000000500000005000000050000000500000005000000
+0500000001000503020201030202050301ff01ff01bc0503020201030202050301000f01
+0717010007190e01000a0100000201000002010000050100000101000007010000060100
+000201000002010000010100002901000008010000000100000201000002010000050100
+000101000002010000050100000301000003010000020100000101000002010000250100
+006301000063010000630100003e0100051301000500030e050000000523010005030202
+01030202050301000f010717010007190e01000a01000002010000020100000101000002
+010000010100000201000003010000060100000201000002010000010100000201000025
+010000090100000301000002010000010100000201000001010000020100000101000002
+010000030100000301000002010000010100000201000025010000630100006301000063
+0100003e010005140100030e0000052401000503020201030202050301000f0107320e01
+000a01000003010200030102000301020004010000060100000201000002010000020102
+002601000009010000040103000201020003010300020102000501010002010300010100
+0002010000250100006301000063010000630100003e0100051301000500030e05000000
+052301000503020201030202050301000f0107320e01000a010000570100006301000063
+01000063010000630100003e010005140100030e00000524010005030202010302020503
+01000f0107320e0100070100000101000057010000630100006301000063010000630100
+003e0100051301000500030e05000000052301000503020201030202050301000f010732
+0e01000801010058010000630100006301000063010000630100003e010005140100030e
+0000052401000503020201030202050301000f0107320e01006301000063010000630100
+0063010000630100003e0100051301000500030e05000000052301000503020201030202
+050301000f0107320e010063010000630100006301000063010000630100003e01000514
+0100030e0000052401000503020201030202050301000f010e3400630100006301000063
+01000063010000630100003e0100051301000500030e0500000005230100050302020103
+0202050301000f000e3501ff01ff013805140100030e0000052401000503020201030202
+050301000c360d6301000d6301000d6301000d6301000d6301000d3e0100051301000500
+030e05000000052301000503020201030202050301000c3509000d6301000d6301000d63
+01000d6301000d6301000d3e010005140100030e00000524010005030202010302020503
+01000c01083209010d6301000d6301000d6301000d6301000d6301000d3e010005130100
+0500030e05000000052301000503020201030202050301000c01083209010d6301000d63
+01000d6301000d6301000d6301000d3e010005140100030e000005240100050302020103
+0202050301000c0108160102081809010d6301000d6301000d6301000d6301000d630100
+0d3e0100051301000500030e05000000052301000503020201030202050301000c010815
+010008020100081709010d0701000d1601000d4201000d0701000d0601020d1001000d0c
+01000d3001000d6301000d6301000d6301000d3e010005140100030e0000052401000503
+020201030202050301000c010815010008020100081709010d0701000d5a01000d070100
+0d0801000d1001000d0c01000d3001000d6301000d6301000d6301000d3e010005130100
+0500030e05000000052301000503020201030202050301000c0108150100080201000817
+09010d0701000d0101000d0301020d0201000d0001010d0301020d0201000d0001010d3b
+01000d0701000d0001010d0501000d0301020d0301020d0201000d0101000d0301020d02
+01000d0001010d0301020d0201000d0001010d0301010d0001000d1701000d6301000d63
+01000d6301000d3e010005140100030e0000052401000503020201030202050301000c01
+08160102081809010d0701000d0001000d0301000d0201000d0101010d0101000d040100
+0d0201010d0101000d3a01000d0701010d0101000d0401000d0201000d0201000d010100
+0d0201000d0101000d0001000d0301000d0201000d0101010d0101000d0101000d020100
+0d0101010d0101000d0101000d0101010d1701000d6301000d6301000d6301000d3e0100
+051301000500030e05000000052301000503020201030202050301000c01081501000802
+0100081709010d0701010d0801000d0101000d0801000d0201000d0201000d3a01000d07
+01000d0201000d0401000d0601000d0101000d0501010d0401000d0201000d0101000d02
+01000d0101000d0201000d0101000d0501000d0201000d1701000d6301000d6301000d63
+01000d3e010005140100030e0000052401000503020201030202050301000c0108150100
+08020100081709010d0701010d0501030d0101000d0801000d0201000d0201000d3a0100
+0d0701000d0201000d0401000d0301030d0101000d0501010d0401040d0101000d020100
+0d0101040d0101000d0501000d0201000d1701000d6301000d6301000d6301000d3e0100
+051301000500030e05000000052301000503020201030202050301000c01081501000802
+0100081709010d0701000d0001000d0301000d0201000d0101000d0801000d0201000d02
+01000d3a01000d0701000d0201000d0401000d0201000d0201000d0101000d0501000d00
+01000d0301000d0501000d0201000d0101000d0501000d0501000d0201000d1701000d63
+01000d6301000d6301000d3e010005140100030e00000524010005030202010302020503
+01000c0108160102081809010d0701000d0101000d0201000d0201000d0101000d080100
+0d0201000d0201000d3a01000d0701010d0101000d0401000d0201000d0201000d010100
+0d0201000d0101000d0101000d0201000d0201000d0101010d0101000d0101000d020100
+0d0101000d0501000d0101010d1701000d6301000d6301000d6301000d3e010005130100
+0500030e05000000052301000503020201030202050301000c01083209010d0701000d02
+01000d0201030d0101000d0801000d0201000d0201000d3a01000d0701000d0001010d05
+01000d0301030d0201020d0201000d0201000d0201020d0201000d0001010d0301020d02
+01000d0601010d0001000d1701000d6301000d6301000d6301000d3e010005140100030e
+0000052401000503020201030202050301000c01083209010d6301000d4a01000d170100
+0d6301000d6301000d6301000d3e0100051301000500030e050000000523010005030202
+01030202050301000c01083209010d6301000d4601000d0201000d1701000d6301000d63
+01000d6301000d3e010005140100030e0000052401000503020201030202050301000c01
+083209010d6301000d4701020d1801000d6301000d6301000d6301000d3e010005130100
+0500030e05000000052301000503020201030202050301000c01083209010d6301000d63
+01000d6301000d6301000d6301000d3e010005140100030e000005240100050302020103
+0202050301000c01083209010d6301000d6301000d6301000d6301000d6301000d3e0100
+051301000500030e05000000052301000503020201030202050301000c0109340d630100
+0d6301000d6301000d6301000d6301000d3e010005140100030e00000524010005030202
+01030202050301000c00093501ff01ff0138051301000500030e05000000052301000503
+020201030202050301000a360063010000630100006301000063010000630100003e0100
+05140100030e0000052401000503020201030202050301000a3501000063010000630100
+006301000063010000630100003e0100051301000500030e050000000523010005030202
+01030202050301000a0101340063010000630100006301000063010000630100003e0100
+05140100030e0000052401000503020201030202050301000a0101340063010000630100
+006301000063010000630100003e0100051301000500030e050000000523010005030202
+01030202050301000a0101160002011a0063010000630100006301000063010000630100
+003e010005140100030e0000052401000503020201030202050301000a01011500000102
+0000011900070100000e01000014010000340100002b0102003401000063010000630100
+00630100003e0100051301000500030e0500000005230100050302020103020205030100
+0a010115000001020000011900070100000e0100004a0100002d01000034010000630100
+0063010000630100003e010005140100030e000005240100050302020103020205030100
+0a0101150000010200000119000701000001010000030102000201040002010200020100
+000001010003010200020100000001010003010200260100000701000002010000010100
+00000101000201000000010100030102000301020005010000030102002d010000630100
+0063010000630100003e0100051301000500030e05000000052301000503020201030202
+050301000a01011500000102000001190007010000000100000301000002010000030100
+000301000002010000010101000101000004010000020101000101000001010000020100
+002501000007010000020100000101010001010000010101000101000001010000020100
+0001010000020100000401000002010000020100002c0100006301000063010000630100
+003e010005140100030e0000052401000503020201030202050301000a01011600030119
+000701010008010000030100000701000001010000080100000201000002010000050100
+002501000007010000020100000101000002010000010100000201000001010000090100
+0004010000060100002c0100006301000063010000630100003e0100051301000500030e
+05000000052301000503020201030202050301000a010119000001190007010100050103
+000301000004010300010100000801000002010000020100000201030025010000070100
+000201000001010000020100000101000002010000020102000301030004010000030103
+002c0100006301000063010000630100003e010005140100030e00000524010005030202
+01030202050301000a0101180000011a0007010000000100000301000002010000030100
+000301000002010000010100000801000002010000020100000101000002010000250100
+000701000002010000010100000201000001010000020100000501000001010000020100
+000401000002010000020100002c0100006301000063010000630100003e010005130100
+0500030e05000000052301000503020201030202050301000a0101150002011b00070100
+000101000002010000020100000301000003010000020100000101000008010000020100
+000201000001010000020100002501000007010000010101000101010001010000010101
+0001010000010100000201000001010000020100000401000002010000020100002c0100
+006301000063010000630100003e010005140100030e0000052401000503020201030202
+050301000a01013400070100000201000002010300040101000201030001010000080100
+000201000002010000020103002501000008010100000100000101000000010100020100
+0000010100030102000301030004010000030103002c0100006301000063010000630100
+003e0100051301000500030e05000000052301000503020201030202050301000a010134
+00630100000e010000050100004c0100006301000063010000630100003e010005140100
+030e0000052401000503020201030202050301000a01013400630100000e010000050100
+004c0100006301000063010000630100003e0100051301000500030e0500000005230100
+0503020201030202050301000a01013400630100000e010000050100004c010000630100
+0063010000630100003e010005140100030e000005240100050302020103020205030100
+0a0101340063010000630100006301000063010000630100003e0100051301000500030e
+05000000052301000503020201030202050301000a010134006301000063010000630100
+0063010000630100003e010005140100030e000005240100050302020103020205030100
+0a0101340063010000630100006301000063010000630100003e0100051301000500030e
+05000000052301000503020201030202050301000a0001ff01ff016e05140100030e0000
+052401000503020201030202050301000c36006301000063010000630100006301000063
+0100003e0100051301000500030e05000000052301000503020201030202050301000c35
+09000063010000630100006301000063010000630100003e010005140100030e00000524
+01000503020201030202050301000c010832090100630100006301000063010000630100
+00630100003e0100051301000500030e0500000005230100050302020103020205030100
+0c01083209010063010000630100006301000063010000630100003e010005140100030e
+0000052401000503020201030202050301000c0108130100080401020815090100630100
+00630100006301000063010000630100003e0100051301000500030e0500000005230100
+0503020201030202050301000c0108110102080301000802010008140901006301000032
+0102002d0100006301000063010000630100003e010005140100030e0000052401000503
+020201030202050301000c01081301000803010008020100081409010063010000340100
+002d0100006301000063010000630100003e0100051301000500030e0500000005230100
+0503020201030202050301000c0108130100080301000802010008140901000701010000
+010000030102000301010000010000010100000001010002010000020100000201020034
+010000070100000001010003010200020100000001010002010000000101000201010000
+01000003010200050100000201010000010000260100006301000063010000630100003e
+010005140100030e0000052401000503020201030202050301000c010813010008030100
+080201000814090100070100000001000000010000010100000201000001010000010101
+000101010001010000010100000201000001010000020100003301000007010100010100
+000101000002010000010101000101000001010100010100000101000000010000000100
+000101000002010000040100000201000000010000000100002501000063010000630100
+00630100003e0100051301000500030e0500000005230100050302020103020205030100
+0c0108130100080301000802010008140901000701000000010000000100000501000001
+010000020100000101000002010000010100000201000001010000370100000701000002
+010000010100000201000001010000050100000501000000010000000100000501000004
+010000020100000001000000010000250100006301000063010000630100003e01000514
+0100030e0000052401000503020201030202050301000c01081301000803010008020100
+081409010007010000000100000001000002010300010100000201000001010000020100
+000101000002010000020102003401000007010000020100000101000002010000010100
+000501000005010000000100000001000002010300040100000201000000010000000100
+00250100006301000063010000630100003e0100051301000500030e0500000005230100
+0503020201030202050301000c0108130100080301000802010008140901000701000000
+010000000100000101000002010000010100000201000001010000020100000101000002
+010000050100003301000007010000020100000101000002010000010100000501000005
+010000000100000001000001010000020100000401000002010000000100000001000025
+0100006301000063010000630100003e010005140100030e000005240100050302020103
+0202050301000c0108110104080201020815090100070100000001000000010000010100
+000201000001010000010101000101000002010000010100000101010001010000020100
+003301000007010000020100000101000002010000010100000501000005010000000100
+000001000001010000020100000401000002010000000100000001000025010000630100
+0063010000630100003e0100051301000500030e05000000052301000503020201030202
+050301000c01083209010007010000000100000001000002010300020101000001000001
+010000020100000201010000010000020102003401000007010000020100000201020002
+010000050100000501000000010000000100000201030004010000020100000001000000
+010000250100006301000063010000630100003e010005140100030e0000052401000503
+020201030202050301000c01083209010019010000480100006301000063010000630100
+00630100003e0100051301000500030e0500000005230100050302020103020205030100
+0c010832090100150100000201000048010000630100006301000063010000630100003e
+010005140100030e0000052401000503020201030202050301000c010832090100160102
+0049010000630100006301000063010000630100003e0100051301000500030e05000000
+052301000503020201030202050301000c01083209010063010000630100006301000063
+010000630100003e010005140100030e0000052401000503020201030202050301000c01
+083209010063010000630100006301000063010000630100003e0100051301000500030e
+05000000052301000503020201030202050301000c010934006301000063010000630100
+0063010000630100003e010005140100030e000005240100050302020103020205030100
+0c00093501ff01ff0138051301000500030e050000000523010005030202010302020503
+01000c360063010000630100006301000063010000630100003e010005140100030e0000
+052401000503020201030202050301000c35090000630100006301000063010000630100
+00630100003e0100051301000500030e0500000005230100050302020103020205030100
+0c01083209010063010000630100006301000063010000630100003e010005140100030e
+0000052401000503020201030202050301000c0108320901006301000063010000630100
+0063010000630100003e0100051301000500030e05000000052301000503020201030202
+050301000c01081301000805010008160901006301000063010000630100006301000063
+0100003e010005140100030e0000052401000503020201030202050301000c0108110102
+0803010208160901001601020005010000420100002b0102003401000063010000630100
+00630100003e0100051301000500030e0500000005230100050302020103020205030100
+0c010813010008050100081609010018010000490100002d010000340100006301000063
+010000630100003e010005140100030e0000052401000503020201030202050301000c01
+081301000805010008160901000701010000010000030102000501000003010200020100
+00000101003b010000070100000201000001010000000101000201000000010100030102
+000301020005010000030102002d0100006301000063010000630100003e010005130100
+0500030e05000000052301000503020201030202050301000c0108130100080501000816
+090100070100000001000000010000010100000201000004010000050100000201010001
+0100003a0100000701000002010000010101000101000001010100010100000101000002
+01000001010000020100000401000002010000020100002c010000630100006301000063
+0100003e010005140100030e0000052401000503020201030202050301000c0108130100
+080501000816090100070100000001000000010000050100000401000005010000020100
+00020100003a010000070100000201000001010000020100000101000002010000010100
+000901000004010000060100002c0100006301000063010000630100003e010005130100
+0500030e05000000052301000503020201030202050301000c0108130100080501000816
+09010007010000000100000001000002010300040100000501000002010000020100003a
+010000070100000201000001010000020100000101000002010000020102000301030004
+010000030103002c0100006301000063010000630100003e010005140100030e00000524
+01000503020201030202050301000c010813010008050100081609010007010000000100
+00000100000101000002010000040100000501000002010000020100003a010000070100
+000201000001010000020100000101000002010000050100000101000002010000040100
+0002010000020100002c0100006301000063010000630100003e0100051301000500030e
+05000000052301000503020201030202050301000c010811010408010104081409010007
+01000000010000000100000101000002010000040100000501000002010000020100003a
+010000070100000101010001010100010100000101010001010000010100000201000001
+010000020100000401000002010000020100002c0100006301000063010000630100003e
+010005140100030e0000052401000503020201030202050301000c010832090100070100
+00000100000001000002010300040100000501000002010000020100003a010000080101
+000001000001010000000101000201000000010100030102000301030004010000030103
+002c0100006301000063010000630100003e0100051301000500030e0500000005230100
+0503020201030202050301000c010832090100630100000e010000050100004c01000063
+01000063010000630100003e010005140100030e00000524010005030202010302020503
+01000c010832090100630100000e010000050100004c0100006301000063010000630100
+003e0100051301000500030e05000000052301000503020201030202050301000c010832
+090100630100000e010000050100004c0100006301000063010000630100003e01000514
+0100030e0000052401000503020201030202050301000c01083209010063010000630100
+006301000063010000630100003e0100051301000500030e050000000523010005030202
+01030202050301000c01083209010063010000630100006301000063010000630100003e
+010005140100030e0000052401000503020201030202050301000c010934006301000063
+0100006301000063010000630100003e0100051301000500030e05000000052301000503
+020201030202050301000c00093501ff01ff013805140100030e00000524010005030202
+010302020503010005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000063010000630100006301000063010000630100003e01000513
+01000500030e050000000523010005030202010302020503010000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050001000063010000630100
+006301000063010000630100003e010005140100030e0000052401000503020201030202
+05030100050000000532010005000063010000630100006301000063010000630100003e
+0100051301000500030e0500000005230100050302020103020205030100000005340100
+0063010000630100006301000063010000630100003e010005140100030e000005240100
+050302020103020205030100050000000513010005040102051501000500006301000063
+0100006301000063010000630100003e0100051301000500030e05000000052301000503
+02020103020205030100000005120102050301000502010005150100001f010000420100
+001201000017010200340100006301000063010000630100003e010005140100030e0000
+052401000503020201030202050301000500000005130100050301000502010005140100
+050000630100001201000019010000340100006301000063010000630100003e01000513
+01000500030e050000000523010005030202010302020503010000000514010005030100
+050201000515010000070101000001000003010200020100000001010003010200030102
+003b01000008010200030101000001000002010200020100000001010002010000000101
+0005010000030102000201000000010100260100006301000063010000630100003e0100
+05140100030e000005240100050302020103020205030100050000000513010005060100
+051501000500000701000000010000000100000101000002010000010101000101000004
+01000002010000020100003a010000070100000201000001010000010101000101000002
+010000010101000101000001010100010100000401000002010000020100000101010001
+010000250100006301000063010000630100003e0100051301000500030e050000000523
+010005030202010302020503010000000514010005050100051701000007010000000100
+0000010000050100000101000008010000060100003a0100000701000002010000010100
+000201000001010000020100000101000002010000010100000201000004010000060100
+000101000002010000250100006301000063010000630100003e010005140100030e0000
+052401000503020201030202050301000500000005130100050401000517010005000007
+0100000001000000010000020103000101000008010000030103003a0100000701000002
+010000010100000201000001010400010100000201000001010000020100000401000003
+0103000101000002010000250100006301000063010000630100003e0100051301000500
+030e05000000052301000503020201030202050301000000051401000503010005020100
+051501000007010000000100000001000001010000020100000101000008010000020100
+00020100003a010000070100000201000001010000020100000101000005010000020100
+000101000002010000040100000201000002010000010100000201000025010000630100
+0063010000630100003e010005140100030e000005240100050302020103020205030100
+050000000511010405010104051401000500000701000000010000000100000101000002
+010000010100000801000002010000020100003a01000007010000020100000101000001
+010100010100000201000001010000020100000101010001010000040100000201000002
+0100000101000002010000250100006301000063010000630100003e0100051301000500
+030e05000000052301000503020201030202050301000000053401000007010000000100
+0000010000020103000101000008010000030103003a0100000801020003010100000100
+000201020002010000020100000101000000010100050100000301030001010000020100
+00250100006301000063010000630100003e010005140100030e00000524010005030202
+0103020205030100050000000532010005000063010000230100003e0100006301000063
+010000630100003e0100051301000500030e050000000523010005030202010302020503
+01000000053401000063010000230100003e0100006301000063010000630100003e0100
+05140100030e000005240100050302020103020205030100050000000532010005000063
+010000230100003e0100006301000063010000630100003e0100051301000500030e0500
+000005230100050302020103020205030100000005340100006301000063010000630100
+0063010000630100003e010005140100030e000005240100050302020103020205030100
+050000000532010005000063010000630100006301000063010000630100003e01000513
+01000500030e050000000523010005030202010302020503010000000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000063010000630100
+006301000063010000630100003e010005140100030e0000052401000503020201030202
+050301000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+05000100050001ff01ff0138051301000500030e05000000052301000503020201030202
+050301000c360063010000630100006301000063010000630100003e010005140100030e
+0000052401000503020201030202050301000c3509000063010000630100006301000063
+010000630100003e0100051301000500030e050000000523010005030202010302020503
+01000c01083209010063010000630100006301000063010000630100003e010005140100
+030e0000052401000503020201030202050301000c010832090100630100006301000063
+01000063010000630100003e0100051301000500030e0500000005230100050302020103
+0202050301000c0108130100080401020815090100630100006301000063010000630100
+00630100003e010005140100030e0000052401000503020201030202050301000c010811
+010208030100080201000814090100170100004a01000007010000300102002601000063
+01000063010000630100003e0100051301000500030e0500000005230100050302020103
+0202050301000c0108130100080701000814090100170100004a01000007010000320100
+00260100006301000063010000630100003e010005140100030e00000524010005030202
+01030202050301000c010813010008070100081409010007010100000100000301020002
+010400020102004201000007010000000101000201000000010100030102000201010000
+010000020101000001000003010200020100000001010005010000030102000201000000
+010100180100006301000063010000630100003e0100051301000500030e050000000523
+01000503020201030202050301000c010813010008050101081509010007010000000100
+000001000001010000020100000301000003010000020100004101000007010100010100
+000101010001010000010100000201000001010000000100000001000001010000000100
+000001000001010000020100000101010001010000040100000201000002010000010101
+0001010000170100006301000063010000630100003e010005140100030e000005240100
+0503020201030202050301000c0108130100080701000814090100070100000001000000
+010000050100000301000003010000450100000701000002010000010100000501000002
+010000010100000001000000010000010100000001000000010000050100000101000002
+01000004010000060100000101000002010000170100006301000063010000630100003e
+0100051301000500030e05000000052301000503020201030202050301000c0108130100
+080701000814090100070100000001000000010000020103000301000004010200420100
+000701000002010000010100000501000002010000010100000001000000010000010100
+000001000000010000020103000101000002010000040100000301030001010000020100
+00170100006301000063010000630100003e010005140100030e00000524010005030202
+01030202050301000c010813010008030100080201000814090100070100000001000000
+010000010100000201000003010000070100004101000007010000020100000101000005
+010000020100000101000000010000000100000101000000010000000100000101000002
+010000010100000201000004010000020100000201000001010000020100001701000063
+01000063010000630100003e0100051301000500030e0500000005230100050302020103
+0202050301000c0108110104080201020815090100070100000001000000010000010100
+000201000003010000030100000201000041010000070101000101000001010000050100
+000201000001010000000100000001000001010000000100000001000001010000020100
+000101010001010000040100000201000002010000010100000201000017010000630100
+0063010000630100003e010005140100030e000005240100050302020103020205030100
+0c0108320901000701000000010000000100000201030004010100020102004201000007
+010000000101000201000006010200020100000001000000010000010100000001000000
+010000020103000101000000010100050100000301030001010000020100001701000063
+01000063010000630100003e0100051301000500030e0500000005230100050302020103
+0202050301000c0108320901006301000031010000300100006301000063010000630100
+003e010005140100030e0000052401000503020201030202050301000c01083209010063
+01000031010000300100006301000063010000630100003e0100051301000500030e0500
+0000052301000503020201030202050301000c0108320901006301000031010000300100
+006301000063010000630100003e010005140100030e0000052401000503020201030202
+050301000c01083209010063010000630100006301000063010000630100003e01000513
+01000500030e05000000052301000503020201030202050301000c010832090100630100
+00630100006301000063010000630100003e010005140100030e00000524010005030202
+01030202050301000c0109340063010000630100006301000063010000630100003e0100
+051301000500030e05000000052301000503020201030202050301000c00093501ff01ff
+013805140100030e0000052401000503020201030202050301000c360063010000630100
+006301000063010000630100003e0100051301000500030e050000000523010005030202
+01030202050301000c3509000063010000630100006301000063010000630100003e0100
+05140100030e0000052401000503020201030202050301000c0108320901006301000063
+0100006301000063010000630100003e0100051301000500030e05000000052301000503
+020201030202050301000c01083209010063010000630100006301000063010000630100
+003e010005140100030e0000052401000503020201030202050301000c01081301000806
+0100081509010063010000630100006301000063010000630100003e0100051301000500
+030e05000000052301000503020201030202050301000c01081101020805010108150901
+0011010000500100001e01000018010000290100006301000063010000630100003e0100
+05140100030e0000052401000503020201030202050301000c0108130100080401000800
+01000815090100630100001e01000018010000290100006301000063010000630100003e
+0100051301000500030e05000000052301000503020201030202050301000c0108130100
+080401000800010008150901000701000000010100030102000201000000010100030102
+004201000008010100000100000101000002010000020102000201040002010200020100
+000201000002010200020100000001010003010200020100000001010003010100000100
+00100100006301000063010000630100003e010005140100030e00000524010005030202
+01030202050301000c010813010008030100080101000815090100070101000101000004
+010000020101000101000001010000020100004101000007010000010101000101000002
+010000010100000201000003010000030100000201000001010000020100000101000002
+010000010101000101000001010000020100000101010001010000010100000101010010
+0100006301000063010000630100003e0100051301000500030e05000000052301000503
+020201030202050301000c01081301000802010008020100081509010007010000020100
+000401000002010000020100000501000041010000070100000201000001010000020100
+000101000007010000070100000101000002010000010100000501000002010000010100
+0002010000010100000501000002010000100100006301000063010000630100003e0100
+05140100030e0000052401000503020201030202050301000c0108130100080201050814
+090100070100000201000004010000020100000201000002010300410100000701000002
+010000010100000201000002010200040100000401030002010000000100000301020002
+010000020100000101040001010000050100000201000010010000630100006301000063
+0100003e0100051301000500030e05000000052301000503020201030202050301000c01
+081301000806010008150901000701000002010000040100000201000002010000010100
+000201000041010000070100000201000001010000020100000501000003010000030100
+000201000002010000000100000601000001010000020100000101000005010000050100
+0002010000100100006301000063010000630100003e010005140100030e000005240100
+0503020201030202050301000c0108110104080301020814090100070100000201000004
+010000020100000201000001010000020100004101000007010000010101000101000001
+010100010100000201000003010000030100000201000003010000030100000201000001
+010100010100000101000002010000010100000501000001010100100100006301000063
+010000630100003e0100051301000500030e050000000523010005030202010302020503
+01000c010832090100070100000201000004010000020100000201000002010300410100
+000801010000010000020101000001000002010200050101000201030003010000040102
+000201000000010100030102000201000006010100000100001001000063010000630100
+00630100003e010005140100030e0000052401000503020201030202050301000c010832
+090100630100000b01000044010000100100006301000063010000630100003e01000513
+01000500030e05000000052301000503020201030202050301000c010832090100630100
+0007010000020100004001000002010000100100006301000063010000630100003e0100
+05140100030e0000052401000503020201030202050301000c0108320901006301000008
+01020042010200110100006301000063010000630100003e0100051301000500030e0500
+0000052301000503020201030202050301000c0108320901006301000063010000630100
+0063010000630100003e010005140100030e000005240100050302020103020205030100
+0c01083209010063010000630100006301000063010000630100003e0100051301000500
+030e05000000052301000503020201030202050301000c01093400630100006301000063
+01000063010000630100003e010005140100030e00000524010005030202010302020503
+01000c00093501ff01ff0138051301000500030e05000000052301000503020201030202
+050301000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+0500000005000063010000630100006301000063010000630100003e010005140100030e
+000005240100050302020103020205030100000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500010000630100006301000063010000630100
+00630100003e0100051301000500030e0500000005230100050302020103020205030100
+050000000532010005000063010000630100006301000063010000630100003e01000514
+0100030e0000052401000503020201030202050301000000053401000063010000630100
+006301000063010000630100003e0100051301000500030e050000000523010005030202
+010302020503010005000000051301000503010405140100050000630100006301000063
+01000063010000630100003e010005140100030e00000524010005030202010302020503
+01000000051201020503010005190100000f010200030102004901000007010000230100
+000b010200030102001f0100006301000063010000630100003e0100051301000500030e
+050000000523010005030202010302020503010005000000051301000503010005180100
+05000011010000050100004901000007010000230100000d010000050100001f01000063
+01000063010000630100003e010005140100030e00000524010005030202010302020503
+010000000514010005030100051901000008010200050100000501000003010200420100
+000701000000010100030102000201000000010100020100000001010003010200020104
+00010100000201000004010000050100001f0100006301000063010000630100003e0100
+051301000500000005000000050000000500000005000000050000000500000005000000
+05000000052301000503020201030202050301ff01ff0170051400000500000005000000
+050000000500000005000000050000000500000005000000052401000503020201030202
+0503010005ff05ff05ba010005030202010302020503010005ff05ff05ba010005030202
+010302020503010005ff05ff05ba010005030202010302020503010005ff05ff05ba0100
+05030202010302020503010005ff05ff05ba010005030202010302020503010005ff05ff
+05ba010005030202010302020503010005ff05ff05ba0100050302020103020205030100
+05ff05ff05ba01000503020201030202050301000549010005ff05ff056f010005030202
+01030202050301000548010105ff05ff056f010005030202010302020503010005470100
+0500010005ff05ff056f01000503020201030202050301000549010005ff05ff056f0100
+0503020201030202050301000549010005ff05ff056f0100050302020103020205030100
+0549010005ff05ff056f01000503020201030202050301000549010005ff05ff056f0100
+0503020201030202050301000549010005ff05ff056f0100050302020103020205030100
+0547010405ff05ff056d010005030202010302020503010005ff05ff05ba010005030202
+010302020503010005ff05ff05ba010005030202010302020503010005ff05ff05ba0100
+05030202010302020503010005ff05ff05ba010005030202010302020503010005ff05ff
+05ba01000503020201030202050301000538010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+054a01000503020201030202050301000537010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+054b01000503020201030202050301000538010005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000003ff03ff031505000000054a01000503020201030202050301000537
+010005000000050000000500000005000000050000000500000005000000050000000500
+0000050000000500000005000000050000000500000005000000050003ff03ff03150000
+054b01000503020201030202050301000538010005000000050c0000050c010003ff03ff
+031505000000054a01000503020201030202050301000537010005000000050c0100050c
+0100050003ff03ff03150000054b01000503020201030202050301000538010005000000
+050c0000050c010003ff03ff031505000000054a01000503020201030202050301000537
+010005000000050c0100050c0100050003ff03ff03150000054b01000503020201030202
+050301000538010005000000050c0000050c010003ff03ff031505000000054a01000503
+020201030202050301000537010005000000050c0100050c0100050003ff03ff03150000
+054b01000503020201030202050301000538010005000000050c0000050c010003ff03ff
+031505000000054a01000503020201030202050301000537010005000000050c0100050c
+0100050003ff03ff03150000054b01000503020201030202050301000538010005000000
+050c0000050c010003ff03ff031505000000054a01000503020201030202050301000537
+010005000000050c0100050c0100050003ff03ff03150000054b01000503020201030202
+050301000538010005000000050c0000050c010003ff03ff031505000000054a01000503
+020201030202050301000537010005000000050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+0100050003ff03ff03150000054b01000503020201030202050301000538010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010003ff03ff031505000000054a01000503
+020201030202050301000537010005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000054b01000503
+020201030202050301000538000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000054a01000503
+0202010302020503010005ff05ff05ba010005030202010302020503010005ff05ff05ba
+010005030202010302020503010005ff05ff05ba010005030202010302020503010005ff
+05ff05ba010005030202010302020503010005ff05ff05ba010005030202010302020503
+010005ff05ff05ba010005030202010302020503010005ff05ff05ba0100050302020103
+02020503010005ff05ff05ba010005030202010302020503010005ff05ff05ba01000503
+0202010302020503010005ff05ff05ba010005030202010302020503010005ff05ff05ba
+010005030202010302020503010005ff05ff05ba010005030202010302020503010005ff
+05ff05ba010005030202010302020503010005ff05ff05ba010005030202010302020503
+010005ff05ff05ba010005030202010302020503010005ff05ff05ba0100050302020103
+02020503010005ff05ff05ba010005030202010302020503010005ff05ff05ba01000503
+0202010302020503010005ff05ff05ba010005030202010302020503010005ff05ff05ba
+010005030202010302020503010005ff05ff05ba010005030202010302020503010005ff
+05ff05ba010005030202010302020503010005ff05ff05ba010005030202010302020503
+010005ff05ff05ba010005030202010302020503010005ff05ff05ba0100050302020103
+02020503010005ff05ff05ba010005030202010302020503010005ff05ff05ba01000503
+0202010302020503010005ff05ff05ba010005030202010302020503010005ff05ff05ba
+010005030202010302020503010005ff05ff05ba010005030202010302020503010005ff
+05ff05ba010005030202010302020503010005ff05ff05ba010005030202010302020503
+010005ff05ff05ba010005030202010100040503010005ff05ff05ba0100050300050202
+0400050301ff01ff01bc050300000202040000000202040005ff05ff05c4000002020400
+00000202040005ff05ff05c400000202040000000202040005ff05ff05c4000002020400
+00000202040005ff05ff05c4000002020400000002020400000502ff02ff02b800060202
+040000000208040002ff02ff02b800000208040000000208040002ff02ff02b800000208
+040000000208040001ff01ff01b80000020804000000040901ff01ff01b800000409
+%%EndData
+end
+%%PageTrailer
+%%Trailer
+%%BoundingBox: 0 61 377 359
+%%EOF
diff --git a/lib/tv/doc/src/tv_row_marked_popup.gif b/lib/tv/doc/src/tv_row_marked_popup.gif
new file mode 100644
index 0000000000..9b3bc87959
--- /dev/null
+++ b/lib/tv/doc/src/tv_row_marked_popup.gif
Binary files differ
diff --git a/lib/tv/doc/src/tv_row_marked_popup.ps b/lib/tv/doc/src/tv_row_marked_popup.ps
new file mode 100644
index 0000000000..7a909110d9
--- /dev/null
+++ b/lib/tv/doc/src/tv_row_marked_popup.ps
@@ -0,0 +1,1324 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (ImageMagick)
+%%Title: (./tv_row_marked_popup.tmp.eps)
+%%CreationDate: (Tue Jun 12 16:12:10 2001)
+%%BoundingBox: 0 64 377 377
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 0
+%%EndComments
+
+%%BeginDefaults
+%%PageOrientation: Portrait
+%%EndDefaults
+
+%%BeginProlog
+%
+% Display a color image. The image is displayed in color on
+% Postscript viewers or printers that support color, otherwise
+% it is displayed as grayscale.
+%
+/buffer 512 string def
+/byte 1 string def
+/color_packet 3 string def
+/pixels 768 string def
+
+/DirectClassPacket
+{
+ %
+ % Get a DirectClass packet.
+ %
+ % Parameters:
+ % red.
+ % green.
+ % blue.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/DirectClassImage
+{
+ %
+ % Display a DirectClass image.
+ %
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { DirectClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayDirectClassPacket } image
+ } ifelse
+} bind def
+
+/GrayDirectClassPacket
+{
+ %
+ % Get a DirectClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % red
+ % green
+ % blue
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/GrayPseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassImage
+{
+ %
+ % Display a PseudoClass image.
+ %
+ % Parameters:
+ % class: 0-PseudoClass or 1-Grayscale.
+ %
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ class 0 gt
+ {
+ currentfile buffer readline pop
+ token pop /depth exch def pop
+ /grays columns 8 add depth sub depth mul 8 idiv string def
+ columns rows depth
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { currentfile grays readhexstring pop } image
+ }
+ {
+ %
+ % Parameters:
+ % colors: number of colors in the colormap.
+ % colormap: red, green, blue color packets.
+ %
+ currentfile buffer readline pop
+ token pop /colors exch def pop
+ /colors colors 3 mul def
+ /colormap colors string def
+ currentfile colormap readhexstring pop pop
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { PseudoClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayPseudoClassPacket } image
+ } ifelse
+ } ifelse
+} bind def
+
+/DisplayImage
+{
+ %
+ % Display a DirectClass or PseudoClass image.
+ %
+ % Parameters:
+ % x & y translation.
+ % x & y scale.
+ % label pointsize.
+ % image label.
+ % image columns & rows.
+ % class: 0-DirectClass or 1-PseudoClass.
+ % compression: 0-RunlengthEncodedCompression or 1-NoCompression.
+ % hex color packets.
+ %
+ gsave
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ x y translate
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ currentfile buffer readline pop
+ token pop /pointsize exch def pop
+ /Helvetica findfont pointsize scalefont setfont
+ x y scale
+ currentfile buffer readline pop
+ token pop /columns exch def
+ token pop /rows exch def pop
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ currentfile buffer readline pop
+ token pop /compression exch def pop
+ class 0 gt { PseudoClassImage } { DirectClassImage } ifelse
+ grestore
+} bind def
+%%EndProlog
+%%Page: 1 1
+%%PageBoundingBox: 0 64 377 377
+userdict begin
+%%BeginData:
+DisplayImage
+0 64
+377.000000 313.000000
+12
+760 630
+1
+0
+0
+16
+ffffff
+000000
+d8d8d8
+c2c2c2
+6b6b6b
+ff0000
+d9d9d9
+b22222
+828282
+00ff00
+009100
+90ee90
+c3c3c3
+999999
+757575
+c8ffff
+000a01ff01ff01e1000b0208040001ff01ff01e100000208040000000208040002ff02ff
+02e1000002080400000002080400020000ff00ff00de0400020000000208040000000202
+04060200000004ff04ff04de020000000405020204000000020204000209000d02ff02ff
+02d500000202040000000202040002080000020d040002a501010206010102150101021e
+0101022901010206010102430101022a010102260101023201010233010102ae00000202
+040000000202040002080000020d04000277010502000107020101030206010702090101
+02060101021501010219010002030101021c0100020b010102060101022e010202020100
+020d0101022a0101020c0104021401010232010102160100021b010102ae000002020400
+00000202040002080000020d04000277010102070101020301010201010102080101020c
+010102060101021501010218010102210101020b010102060101022e010202020100020d
+01010238010102020101024801010215010102cc00000202040000000202040002080000
+0202040602030400027701010207010102030101020c0101020401030203010102000101
+020301010202010302020101020901010202010302030103020201030201010402010101
+020201030203010102000101020a01040201010302030101020001010203010102020103
+022701000200010102010100020201030203010402020103020201010209010102000101
+020101010203010302030101020201010200010102020101020101030202010402020101
+020101010202010102020101020001010203010102000101020301030203010402020104
+020501040202010102010101020501030201010402000101020101010204010302020101
+020001010201010102020103020201040202010402020103020301010200010102060104
+020201030274000002020400000004030208000002020400030400000203040002770101
+0207010102030102020b0101020301010201010102020102020001010202010102010101
+020101010201010102090101020101010201010102010101020101010200010102010101
+020101010203010102010101020101010202010202000101020a01010202010102010101
+020201020200010102020101020101010201010102260100020001010201010002010101
+020101010201010102010101020101010201010102010101020901020200010202000101
+020101010201010102020101020201020200010102010101020001010200010102010101
+020101010202010102010101020201010202010202000101020201020200010102010101
+020101010201010102050101020801010201010102020101020101010204010102010101
+020101010202010102010101020301010201010102010101020001010201010102010101
+020101010200010102050101020501010201010102020102020001010204010102050101
+020101010273000004030101020b00000203040003020000020404000277010402040101
+0204010302090101020701010202010102010101020201010201010102010101020d0101
+020101010201010102010101020801010201010102030101020101010201010102020101
+02010101020a010102060101020201010201010102020101020101010201010102260100
+0200010202000100020101010201010102010101020101010201010102010101020d0101
+020101010201010102050101020201010202010102010101020101010200010102000101
+020101010201010102020101020101010202010102020101020101010202010102010101
+020101010201010102010102020401020207010102010101020201010201010102040101
+020101010201010102030101020001000204010102010101020101020203010102010101
+020401020204010202040101020101010202010102010101020401020204010102010101
+02760103020b000002030400030200000204040002770101020701010206010202080101
+0204010402020101020101010202010102010105020d0101020101010201010102010101
+02050104020101010203010102010101020101010202010102010101020a010102030104
+020201010201010102020101020101050226010002010101020001000201010102010101
+020101010201010102010105020d01010201010102010101020201040202010102020101
+020101010201010102000101020001010201010102010101020201010201010102020101
+020201010201010102020101020101010201010502020103020301030205010102010101
+020201010201010102040105020101010204010102050105020101010204010102010101
+020501030203010302020101020101010202010102010101020501030202010502760103
+020b00000204040003000000020504000277010102070101020701010208010102030101
+020101010202010102010101020201010201010102110101020101010201010102010101
+0204010102010101020101010203010102010101020101010202010102010101020a0101
+020201010201010102020101020101010202010102010101022a01000202010202010101
+020101010201010102010101020101010211010102010101020101010201010102010101
+020201010202010102010101020101010201010102000101020001010200010202020101
+020101010202010102020101020101010202010102010101020101010208010202040102
+020401010201010102020101020101010204010102050101020301000200010102040101
+020501010204010102010101020701020204010202010101020101010202010102010101
+0207010202010101027a0103020b00000204040003000000020504000277010102070101
+020301010201010102080101020301010201010102020101020101010202010102010101
+020201000201010102090101020101010201010102010101020201000200010102010101
+020101010203010102010101020101010202010102010101020a01010202010102010101
+020201010201010102020101020101010202010002260100020201020201010102010101
+020101010200010202010101020201000201010102090101020101010201010102010101
+020101010202010102020101020101010202010102070101020001010202010102000102
+020201010202010102010101020201010201010102010101020201000205010102050101
+020101010200010102000102020201010200010202010101020001010202010002010101
+020201010201010102000101020001010202010002010101020401010201010102020100
+020401010205010102010101020101010202010102010101020101010204010102010101
+0202010002760103020b0000020500000206040002770105020301010204010302090101
+020401020200010102010104020301010202010302020101020901010202010302030103
+02020102020001010201010202010101020201030203010102010101020b010202010102
+020001010201010402030101020201030227010002030101020201030203010102000101
+020201030202010102090101020101010201010102020102020001010201010102020101
+020101010203010502050101020301010200010102020101020201010201010102020101
+020101010202010302020104020201040202010102010101020001010203010102000101
+020101010201010302030102020001010201010102000101020101030202010102040101
+020201030201010402020104020301030203010102010101020101010200010402030103
+02770103020b0000020d040002fc010602a201010201010102ff022a0103020b0000020d
+040002ff02a7010302ff022b0103020b0000020d040002ff02ff02d70103020c040d02ff
+02ff02d8010302ff02ff02f3010302ff02ff02f30103020200ff00ff00ec040002020103
+0202000004ff04ff04ec0202010302ff02ff02f30103020200ff00ff00ed020201030202
+00ff00ff00ec0800020201030202000106ff06ff06e90801020201030202000106ff06ff
+06e90801020201030202000106ff06ff06e90801020201030202000106ff06ff06e90801
+020201030202000106ff06ff06e908010202010302020001060b07040604070006030702
+061f07040610070206200702060b070006060700062d0700060207000604070006ff06fa
+07000602070006090702061308010202010302020001060b0700060f0700062107000614
+0700061f070006020700060a0700063507000602070006ff06ff0600070006020700060b
+0700061308010202010302020001060b0700060607020605070006030702061a07000604
+070206030702060507000603070206180700060207000601070006000701060207040602
+070206030702060207000600070106030702061807000602070006020702060307020602
+07000602070006ff06eb07000602070006020702060507000602070006000701060c0801
+0202010302020001060b0700060807000605070006020700060207000619070006030700
+060207000601070006020700060407000602070006020700061707000602070006010701
+060107000603070006060700060207000602070006010701060107000601070006020700
+0618070006000700060507000602070006020700060107000602070006ff06eb07000602
+07000601070006020700060407000602070106010700060b08010202010302020001060b
+070306050700060507000602070006020700061907000603070006020700060107000602
+07000604070006020700061b070006020700060107000602070006030700060607000602
+070006020700060107000602070006010700061c07000600070006050700060207000602
+070006010700060007000600070006ff06eb070406010700060207000604070006020700
+06020700060b08010202010302020001060b070006080700060507000602070406190700
+060307000602070006010700060207000604070006030702061807000602070006010700
+060207000603070006060700060207000602070006010700060207000602070206190700
+06000700060507000602070406010700060007000600070006ff06eb0700060207000601
+0704060407000602070006020700060b08010202010302020001060b0700060807000605
+070006020700061d07000603070006020700060107000602070006040700060607000617
+070006020700060107000602070006030700060607000602070006020700060107000602
+07000605070006190700060607000602070006050700060007000600070006ff06eb0700
+0602070006010700060807000602070006020700060b08010202010302020001060b0700
+060807000605070006020700060207000619070006030700060207000601070006020700
+060407000602070006020700061707000602070006010701060107000603070006060700
+060207000602070006010700060207000601070006020700061907000606070006020700
+0602070006010700060007000600070006ff06eb07000602070006010700060207000604
+07000602070106010700060b08010202010302020001060b070006080700060507000603
+0702061a0700060407020603070206050700060307020619070206020700060007010605
+07010604070006030702060207000602070006020702061a070006060700060307020603
+07000600070006ff06ec07000602070006020702060507000602070006000701060c0801
+0202010302020001067d070006ff06ff06590700060f08010202010302020001060a0706
+062a07060631070606000700063d070606ff06fe0706060e0700060f0801020201030202
+0001060a0706062a07060631070606000700063d070606ff06fe0706060e0700060f0801
+020201030202000106ff06ff06e90801020201030202000106ff06ff06e9080102020103
+0202000106ff06ff06e90801020201030202000108ff08ff08eb020201030202000008ff
+08ff08ec02020103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff
+06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff
+06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202010302020603
+0016061600160616004406160016061600160616001606ff06be02020103020206030015
+080006160015080006160015080000150800001508000616001508000616001508000616
+0015080006ff06be02020103020206030001061208010616000106120801061600010612
+080100010612080100010612080106160001061208010616000106120801061600010612
+080106ff06be020201030202060300010612080106160001061208010616000106120801
+000106120801000106120801061600010612080106160001061208010616000106120801
+06ff06be0202010302020603000106120801061600010603070206030702060408010616
+000106120801000106120801000106120801061600010612080106160001061208010616
+00010612080106ff06be0202010302020603000106080702060608010616000106030702
+060307020604080106160001061208010001061208010001061208010616000106050704
+0607080106160001060707010608080106160001060707030606080106ff06be02020103
+020206030001060b0701060408010616000106020704060107040603080106160001060e
+0700060208010001060e070006020801000106020700060e080106160001060307080605
+080106160001060607030607080106160001060507070604080106ff06be020201030202
+06030001060d070006000700060108010616000106020700060107010601070006010701
+0603080106160001060e0700060208010001060e070006020801000106020700060e0801
+061600010602070a06040801061600010606070306070801061600010604070306010703
+0603080106ff06be02020103020206030001060207020608070106010801061600010601
+070d0602080106160001060b07000601070006020801000106020700060a070006020801
+00010602070006010700060b080106160001060207030602070306040801061600010607
+0701060808010616000106040702060307020603080106ff06be02020103020206030001
+060107080602070206010801061600010600070006000703060007020600070406010801
+06160001060b07000601070006020801000106020700060a070006020801000106020700
+06010700060b080106160001060107030604070306030801061600010612080106160001
+06040702060307020603080106ff06be0202010302020603000106010709060608010616
+000106000700060007030600070206000704060108010616000106080700060107000601
+070006020801000106020700060407000604070006020801000106020700060107000601
+070006080801061600010601070206030707060108010616000106050704060708010616
+000106050701060207020604080106ff06be020201030202060300010601070906060801
+061600010600070006000703060007020600070406010801061600010608070006010700
+060107000602080100010602070006040700060407000602080100010602070006010700
+060107000608080106160001060107020604070506020801061600010606070306070801
+06160001060907020605080106ff06be0202010302020603000106010709060608010616
+000106000700060007030600070206000704060108010616000106050700060107000601
+070006010700060208010001060207000604070006010700060107000602080100010602
+070006010700060107000601070006050801061600010601070206050703060308010616
+0001060707020607080106160001060807020606080106ff06be02020103020206030001
+0601070d0602080106160001060007000600070706000704060108010616000106050700
+060107000601070006010700060208010001060207000604070006010700060107000602
+080100010602070006010700060107000601070006050801061600010601070306050701
+0604080106160001060707020607080106160001060707020607080106ff06be02020103
+020206030001060107030607070006030801061600010600070006000704060107000600
+070406010801061600010602070006010700060107000601070006010700060208010001
+060207000601070006010700060107000601070006020801000106020700060107000601
+07000601070006010700060208010616000106020703060b080106160001060707020607
+080106160001060707020607080106ff06be020201030202060300010601070206070700
+060408010616000106000706060107060601080106160001060207000601070006010700
+060107000601070006020801000106020700060107000601070006010700060107000602
+080100010602070006010700060107000601070006010700060208010616000106020709
+06050801061600010607070206070801061600010612080106ff06be0202010302020603
+000106010701060707000605080106160001060007000600070206050700060007020601
+080106160001060207000601070006010700060107000601070006020801000106020700
+060107000601070006010700060107000602080100010602070006010700060107000601
+070006010700060208010616000106030707060608010616000106060704060608010616
+0001060707020607080106ff06be02020103020206030001060107090606080106160001
+060007000600070206050700060007020601080106160001060207000601070006010700
+060107000601070006020801000106020700060107000601070006010700060107000602
+080100010602070006010700060107000601070006010700060208010616000106050704
+0607080106160001060507060605080106160001060707020607080106ff06be02020103
+020206030001061208010616000106000704060507040601080106160001061208010001
+0612080100010612080106160001061208010616000106120801061600010612080106ff
+06be02020103020206030001061208010616000106120801061600010612080100010612
+080100010612080106160001061208010616000106120801061600010612080106ff06be
+020201030202060300010612080106160001061208010616000106120801000106120801
+00010612080106160001061208010616000106120801061600010612080106ff06be0202
+010302020603000108140616000108140616000108140001081400010814061600010814
+06160001081406160001081406ff06be0202010302020603000008150616000008150616
+00000815000008150000081506160000081506160000081506160000081506ff06be0202
+0103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202
+0103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202
+0103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202
+0103020206ff06ff06ed02020103020206ff06ff06ed020201030202060301ff01ff01e5
+06030202010302020603010000ff00ff00cf010000120100060302020103020206030100
+00ff00ff00cf010000110800010006030202010302020603010000ff00ff00cf01000001
+060e0801010006030202010302020603010000ff00ff00cf01000001060e080101000603
+0202010302020603010000ff00ff00cf01000001060e0801010006030202010302020603
+0100003401010071010100ff00ff002401000001060e0801010006030202010302020603
+0100003301000075010000ff00ff002301000001060e0801010006030202010302020603
+010000070103000401000005010100190100000301000016010000100100000601020010
+0100000c0100001c010000ff00ff002301000001060e0801010006030202010302020603
+010000070100000201000002010100040100000101000018010000030100002801000008
+010000100100000c0100001c010000ff00ff002301000001060e08010100060302020103
+020206030100000701000002010000010100000001000004010000010100000301010012
+010000030100000101000003010200020100000001010003010200020100000001010009
+010000000101000501000003010200030102000201000001010000030102000201000000
+010100030102000201000000010100030101000001000003010000ff00ff002301000001
+0601010a0601080101000603020201030202060301000007010000020100000301000004
+010000010100000301010012010000030100000001000003010000020100000101010001
+010000040100000201010001010000080101000101000004010000020100000201000001
+010000020100000101000000010000030100000201000001010100010100000101000002
+0100000101010001010000010100000101010003010000ff00ff00230100000106020108
+060208010100060302020103020206030100000701030004010000040100000101000016
+010100040101000801000001010000080100000201000002010000080100000201000004
+010000060100000101000005010100040100000201000001010000020100000101000002
+01000001010000050100000201000004010100ff00ff0021010000010603010606030801
+010006030202010302020603010000070100000101000004010000040100000101000018
+010000030101000501030001010000080100000201000002010000080100000201000004
+010000030103000101000005010100040104000101000002010000010104000101000005
+0100000201000003010000ff00ff00230100000106040104060408010100060302020103
+020206030100000701000002010000030100000401000001010000180100000301000000
+010000030100000201000001010000080100000201000002010000080100000201000004
+010000020100000201000001010000050100000001000003010000050100000201000001
+01000005010000050100000201000003010000ff00ff0023010000010605010206050801
+010006030202010302020603010000070100000201000003010000040100000101000003
+010100120100000301000001010000020100000201000001010000080100000201000002
+010000030101000201010001010000040100000201000002010000010100000201000001
+010000010100000201000002010000010101000101000001010000020100000101000005
+0100000101010003010000ff00ff00230100000106060100060608010100060302020103
+020206030100000701000002010000010104000301010004010100120100000301000002
+010000020103000101000008010000020100000201000003010100020100000001010005
+010000030103000201020002010000020100000201020002010000000101000301020002
+010000060101000001000003010000ff00ff002301000001060e08010100060302020103
+0202060301000033010000290100004501000003010000ff00ff002301000001060e0801
+0100060302020103020206030100003401010025010100420100000201000001010100ff
+00ff002401000001060e0801010006030202010302020603010000a2010200ff00ff0029
+01000001060e0801010006030202010302020603010000ff00ff00cf01000001060e0801
+010006030202010302020603010000ff00ff00cf01000001060e08010100060302020103
+02020603010000ff00ff00cf01000001060e0801010006030202010302020603010000ff
+00ff00cf010000010810010006030202010302020603010000ff00ff00cf010000000811
+01000603020201030202060301ff01ff01e50603020201030202060301ff01ff01d10617
+0202010302020603010006ff06ff06bc0812010006170202010302020603010006ff06ff
+06bc08110000010006170202010302020603010006010dff0dff0db8060108010c060800
+0c060001010006170202010302020603010006010dff0dff0db70000060108010c050000
+08000c060001010006170202010302020603010006010d0100ff00ff00b6060108010c05
+000008010c050001010006170202010302020603010006010d0100ff00ff00b606010801
+0c04000108010c050001010006170202010302020603010006010d0100ff00ff00b60601
+08010c040001060008010c040001010006170202010302020603010006010d0100ff00ff
+00b6060108010c030001060108010c040001011406030202010302020603010006010d01
+00ff00ff00b6060108010c030001060208010c0300010100061201000603020201030202
+0603010006010d0100ff00ff00b6060108010c020001060308010c030001010006120100
+06030202010302020603010006010d0100ff00ff00b6060108010c020001060408010c02
+000101000612010006030202010302020603010006010d0100ff00ff00b6060108010c01
+0001060508010c02000101000612010006030202010302020603010006010d0100ff00ff
+00b6060108010c010001060608010c010001010006120100060302020103020206030100
+06010d0100ff00ff00b6060108010c000001060708010c01000101000612010006030202
+010302020603010006010d0100ff00ff00b6060108010c000001060808010c0000010100
+0612010006030202010302020603010006010d0100ff00ff00b6060108010001080b0c00
+000101000612010006030202010302020603010006010d0100ff00ff00b6060108010000
+080d000101000612010006030202010302020603010006010d0100ff00ff00b606010801
+0c0e000101000612010006030202010302020603010006010d01000301010071010100ff
+00ff003c06010801001001000612010006030202010302020603010006010d0100000c01
+01000c7501000c010e0000ff00ff003806010801000d0800000101000612010006030202
+010302020603010006010d0100000c0101000c0301000c1601000c1001000c0601020c10
+01000c0c01000c1c01000c010e0000ff00ff0038060108010001060a0801000101000612
+010006030202010302020603010006010d0100000c0101000c0301000c2801000c080100
+0c1001000c0c01000c1c01000c010e0000ff00ff0038060108010001060a080100010100
+0612010006030202010302020603010006010d0100000c0101000c0301000c0101000c03
+01020c0201000c0001010c0301020c0201000c0001010c0901000c0001010c0501000c03
+01020c0301020c0201000c0101000c0301020c0201000c0001010c0301020c0201000c00
+01010c0301010c0001000c0301000c010e0000ff00ff0038060108010001060a08010001
+01000612010006030202010302020603010006010d0100000c0101000c0301000c000100
+0c0301000c0201000c0101010c0101000c0401000c0201010c0101000c0801010c010100
+0c0401000c0201000c0201000c0101000c0201000c0101000c0001000c0301000c020100
+0c0101010c0101000c0101000c0201000c0101010c0101000c0101000c0101010c030100
+0c010e0000ff00ff0038060108010001060a080100010100061201000603020201030202
+0603010006010d01000001010c0401010c0801000c0101000c0801000c0201000c020100
+0c0801000c0201000c0401000c0601000c0101000c0501010c0401000c0201000c010100
+0c0201000c0101000c0201000c0101000c0501000c0201000c0401010e0000ff00ff0038
+060108010001060a0801000101000612010006030202010302020603010006010d010000
+0c0101000c0301010c0501030c0101000c0801000c0201000c0201000c0801000c020100
+0c0401000c0301030c0101000c0501010c0401040c0101000c0201000c0101040c010100
+0c0501000c0201000c0301000c010e0000ff00ff0038060108010001060a080100010100
+0612010006030202010302020603010006010d0100000c0101000c0301000c0001000c03
+01000c0201000c0101000c0801000c0201000c0201000c0801000c0201000c0401000c02
+01000c0201000c0101000c0501000c0001000c0301000c0501000c0201000c0101000c05
+01000c0501000c0201000c0301000c010e0000ff00ff0038060108010001060a08010001
+01000612010006030202010302020603010006010d0100000c0101000c0301000c010100
+0c0201000c0201000c0101000c0801000c0201000c0201000c0301010c0201010c010100
+0c0401000c0201000c0201000c0101000c0201000c0101000c0101000c0201000c020100
+0c0101010c0101000c0101000c0201000c0101000c0501000c0101010c0301000c010e00
+00ff00ff0038060108010001060a08010001010006120100060302020103020206030100
+06010d0100000c0101000c0301000c0201000c0201030c0101000c0801000c0201000c02
+01000c0301010c0201000c0001010c0501000c0301030c0201020c0201000c0201000c02
+01020c0201000c0001010c0301020c0201000c0601010c0001000c0301000c010e0000ff
+00ff0038060108010001060a080100010100061201000603020201030202060301000601
+0d0100000c0101000c2901000c4501000c0301000c010e0000ff00ff0038060108010001
+060a0801000101000612010006030202010302020603010006010d0100000c0201010c25
+01010c4201000c0201000c0101010c020e0000ff00ff0038060108010001060a08010001
+01000612010006030202010302020603010006010d0100000e7001020e0800ff00ff0038
+060108010001060a0801000101000612010006030202010302020603010006010d0100ff
+00ff00b6060108010001060a080100010100061201000603020201030202060301000601
+0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603
+010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103
+02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603
+0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612
+010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001
+01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a
+0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801
+0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6
+060108010001060a0801000101000612010006030202010302020603010006010d0100ff
+00ff00b6060108010001060a080100010100061201000603020201030202060301000601
+0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603
+010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103
+02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603
+0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612
+010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001
+01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a
+0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801
+0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6
+060108010001060a0801000101000612010006030202010302020603010006010d0100ff
+00ff00b6060108010001060a080100010100061201000603020201030202060301000601
+0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603
+010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103
+02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603
+0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612
+010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001
+01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a
+0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801
+0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6
+060108010001060a0801000101000612010006030202010302020603010006010d0100ff
+00ff00b6060108010001060a080100010100061201000603020201030202060301000601
+0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603
+010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103
+02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603
+0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612
+010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001
+01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a
+0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801
+0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6
+060108010001060a0801000101000612010006030202010302020603010006010d0100ff
+00ff00b6060108010001060a080100010100061201000603020201030202060301000601
+0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603
+010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103
+02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603
+0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612
+010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001
+01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a
+0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801
+0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6
+060108010001060a0801000101000612010006030202010302020603010006010d0100ff
+00ff00b6060108010001060a080100010100061201000603020201030202060301000601
+0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603
+010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103
+02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603
+0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612
+010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001
+01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a
+0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801
+0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6
+060108010001060a0801000101000612010006030202010302020603010006010d0100ff
+00ff00b6060108010001060a080100010100061201000603020201030202060301000601
+0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603
+010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103
+02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603
+0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612
+010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001
+01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a
+0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801
+0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6
+060108010001060a0801000101000612010006030202010302020603010006010d0100ff
+00ff00b6060108010001060a080100010100061201000603020201030202060301000601
+0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603
+010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103
+02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603
+0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612
+010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001
+01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a
+0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801
+0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6
+060108010001060a0801000101000612010006030202010302020603010006010d0100ff
+00ff00b6060108010001060a080100010100061201000603020201030202060301000601
+0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603
+010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103
+02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603
+0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612
+010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001
+01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a
+0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801
+0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6
+060108010001060a0801000101000612010006030202010302020603010006010d0100ff
+00ff00b6060108010001060a080100010100061201000603020201030202060301000601
+0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603
+010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103
+02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603
+0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612
+010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001
+01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a
+0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801
+0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6
+060108010001060a0801000101000612010006030202010302020603010006010d0100ff
+00ff00b6060108010001060a080100010100061201000603020201030202060301000601
+0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603
+010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103
+02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603
+0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612
+010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001
+01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a
+0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801
+0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6
+060108010001060a0801000101000612010006030202010302020603010006010d0100ff
+00ff00b6060108010001060a080100010100061201000603020201030202060301000601
+0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603
+010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103
+02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603
+0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612
+010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001
+01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a
+0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801
+0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6
+060108010001060a0801000101000612010006030202010302020603010006010d0100ff
+00ff00b6060108010001060a080100010100061201000603020201030202060301000601
+0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603
+010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103
+02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603
+0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612
+010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001
+01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a
+0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801
+0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6
+060108010001060a0801000101000612010006030202010302020603010006010d0100ff
+00ff00b6060108010001060a080100010100061201000603020201030202060301000601
+0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603
+010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103
+02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603
+0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612
+010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001
+01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a
+0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801
+0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6
+060108010001060a0801000101000612010006030202010302020603010006010d0100ff
+00ff00b6060108010001060a080100010100061201000603020201030202060301000601
+0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603
+010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103
+02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603
+0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612
+010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001
+01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a
+0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801
+0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6
+060108010001060a0801000101000612010006030202010302020603010006010d0100ff
+00ff00b6060108010001060a080100010100061201000603020201030202060301000601
+0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603
+010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103
+02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603
+0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612
+010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001
+01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a
+0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801
+0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6
+060108010001060a0801000101000612010006030202010302020603010006010d0100ff
+00ff00b6060108010001060a080100010100061201000603020201030202060301000601
+0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603
+010006010d0100ff00ff00b6060108010001080c00010100061201000603020201030202
+0603010006010d0100ff00ff00b6060108010000080d0001010006120100060302020103
+02020603010006010d0100ff00ff00b6060108010c0e0001010006120100060302020103
+02020603010006010d0100ff00ff00b60601080100100100061201000603020201030202
+0603010006010d0100ff00ff00b6060108010c00000c0800000101000612010006030202
+010302020603010006010d0100ff00ff00b6060108010c000001060808010c0000010100
+0612010006030202010302020603010006010d0100ff00ff00b6060108010c0100010607
+08010c00000101000612010006030202010302020603010006010d0100ff00ff00b60601
+08010c010001060608010c01000101000612010006030202010302020603010006010d01
+00ff00ff00b6060108010c020001060508010c0100010100061201000603020201030202
+0603010006010d0100ff00ff00b6060108010c020001060408010c020001010006120100
+06030202010302020603010006010d0100ff00ff00b6060108010c030001060308010c02
+000101000612010006030202010302020603010006010d0100ff00ff00b6060108010c03
+0001060208010c03000101000612010006030202010302020603010006010d0100ff00ff
+00b6060108010c040001060108010c030001010006120100060302020103020206030100
+06010d0100ff00ff00b6060108010c040001060008010c04000101000612010006030202
+010302020603010006010d0100ff00ff00b6060108010c05000008020c04000101000612
+010006030202010302020603010006010d0100ff00ff00b6060108010c05000008010c05
+000101000612010006030202010302020603010006010d0100ff00ff00b6060108010c06
+08010c05000101000612010006030202010302020603010006010d0000ff00ff00b70601
+08010c0608000c06000101000612010006030202010302020603010006ff06ff06bc0801
+001001000612010006030202010302020603010006ff06ff06bc08000011010006120100
+0603020201030202060301ff01ff01d1061201000603020201030202060301000b010932
+0a0100630100006301000063010000630100006301000063010000020100061308010c0e
+0001062301000603020201030202060301000b010916010209180a010063010000630100
+0063010000630100006301000063010000020100061308010c0e00010623010006030202
+01030202060301000b01091501000902010009170a010063010000170100002001020026
+01000063010000630100006301000063010000020100061308010c0e0001062301000603
+020201030202060301000b01091501000902010009170a01006301000017010000220100
+002601000063010000630100006301000063010000020100061308010c0e000106230100
+0603020201030202060301000b01091501000902010009170a01000e0100000001010003
+0102000201000000010100420100000f0102000201040001010000020100000101000000
+010100030102000201000000010100050100000301020002010000000101001801000063
+010000630100006301000063010000020100061308010c0e000106230100060302020103
+0202060301000b010916010209180a01000e010100010100000101000002010000010101
+0001010000410100000e0100000201000003010000030100000201000001010100010100
+000101000002010000010101000101000004010000020100000201000001010100010100
+001701000063010000630100006301000063010000020100061308010c0e000106230100
+0603020201030202060301000b01091501000902010009170a01000e0100000201000001
+0100000201000001010000450100000e0100000701000003010000020100000101000005
+010000020100000101000002010000040100000601000001010000020100001701000063
+010000630100006301000063010000020100061308010c0e000106230100060302020103
+0202060301000b01091501000902010009170a01000e0100000201000001010400010100
+00450100000f010200040100000301000002010000010100000501040001010000020100
+000401000003010300010100000201000017010000630100006301000063010000630100
+00020100061308010c0e0001062301000603020201030202060301000b01091501000902
+010009170a01000e01000002010000010100000501000045010000120100000301000003
+010000020100000101000005010000050100000201000004010000020100000201000001
+010000020100001701000063010000630100006301000063010000020100061308010c0e
+0001062301000603020201030202060301000b010916010209180a01000e010100010100
+00010100000201000001010000450100000e010000020100000301000003010000010101
+000101000005010000020100000101010001010000040100000201000002010000010100
+00020100001701000063010000630100006301000063010000020100061308010c0e0001
+062301000603020201030202060301000b0109320a01000e010000000101000301020002
+010000450100000f01020005010100020101000001000001010000060102000201000000
+010100050100000301030001010000020100001701000063010000630100006301000063
+010000020100061308010c0e0001062301000603020201030202060301000b0109320a01
+000e01000053010000310100003001000063010000630100006301000063010000020100
+061308010c0e0001062301000603020201030202060301000b0109320a01000e01000053
+010000310100003001000063010000630100006301000063010000020100061308010c0e
+0001062301000603020201030202060301000b0109320a01000e01000053010000310100
+003001000063010000630100006301000063010000020100061308010c0e000106230100
+0603020201030202060301000b0109320a01006301000063010000630100006301000063
+01000063010000020100061308010c0e0001062301000603020201030202060301000b01
+09320a010063010000630100006301000063010000630100006301000002010006130801
+0c0e0001062301000603020201030202060301000b010a34006301000063010000630100
+00630100006301000063010000020100061308010c0e0001062301000603020201030202
+060301000b000a3501ff01ff0161061308010c0e00010623010006030202010302020603
+0100009a0100006301000063010000630100006301000063010000020100061308010c0e
+000106230100060302020103020206030100003508000063010000630100006301000063
+0100006301000063010000020100061308010c0e00010623010006030202010302020603
+010000010632080100630100006301000063010000630100006301000063010000020100
+061308010c0e000106230100060302020103020206030100000106320801006301000063
+01000063010000630100006301000063010000020100061308010c0e0001062301000603
+020201030202060301000001061601020618080100630100006301000063010000630100
+006301000063010000020100061308010c0e000106230100060302020103020206030100
+000106150100060201000617080100260100003b01000019010000170102002d01000063
+010000630100006301000063010000020100061308010c0e000106230100060302020103
+0202060301000001061501000602010006170801006301000019010000190100002d0100
+0063010000630100006301000063010000020100061308010c0e00010623010006030202
+01030202060301000001061501000602010006170801000e010100000100000301020002
+010000000101000301020003010200340100000f01020003010100000100000201020002
+010000000101000201000000010100050100000301020002010000000101001f01000063
+010000630100006301000063010000020100061308010c0e000106230100060302020103
+0202060301000001061501000602010006170801000e0100000001000000010000010100
+00020100000101010001010000040100000201000002010000330100000e010000020100
+000101000001010100010100000201000001010100010100000101010001010000040100
+00020100000201000001010100010100001e010000630100006301000063010000630100
+00020100061308010c0e0001062301000603020201030202060301000001061601030617
+0801000e010000000100000001000005010000010100000801000006010000330100000e
+010000020100000101000002010000010100000201000001010000020100000101000002
+010000040100000601000001010000020100001e01000063010000630100006301000063
+010000020100061308010c0e000106230100060302020103020206030100000106190100
+06170801000e010000000100000001000002010300010100000801000003010300330100
+000e01000002010000010100000201000001010400010100000201000001010000020100
+00040100000301030001010000020100001e010000630100006301000063010000630100
+00020100061308010c0e0001062301000603020201030202060301000001061801000618
+0801000e0100000001000000010000010100000201000001010000080100000201000002
+010000330100000e01000002010000010100000201000001010000050100000201000001
+0100000201000004010000020100000201000001010000020100001e0100006301000063
+0100006301000063010000020100061308010c0e00010623010006030202010302020603
+010000010615010206190801000e01000000010000000100000101000002010000010100
+00080100000201000002010000330100000e010000020100000101000001010100010100
+000201000001010000020100000101010001010000040100000201000002010000010100
+00020100001e01000063010000630100006301000063010000020100061308010c0e0001
+06230100060302020103020206030100000106320801000e010000000100000001000002
+010300010100000801000003010300330100000f01020003010100000100000201020002
+010000020100000101000000010100050100000301030001010000020100001e01000063
+010000630100006301000063010000020100061308010c0e000106230100060302020103
+02020603010000010632080100630100002a010000370100006301000063010000630100
+0063010000020100061308010c0e00010623010006030202010302020603010000010632
+080100630100002a01000037010000630100006301000063010000630100000201000613
+08010c0e00010623010006030202010302020603010000010632080100630100002a0100
+003701000063010000630100006301000063010000020100061308010c0e000106230100
+060302020103020206030100000106320801006301000063010000630100006301000063
+01000063010000020100061308010c0e0001062301000603020201030202060301000001
+063208010063010000630100006301000063010000630100006301000002010006130801
+0c0e00010623010006030202010302020603010000010834006301000063010000630100
+00630100006301000063010000020100061308010c0e0001062301000603020201030202
+060301000000083501ff01ff0161061308010c0e00010623010006030202010302020603
+010005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000f6301000f6301000f6301000f6301000f6301000f6301000f02010006130801
+0c0e00010623010006030202010302020603010000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050001000f6301000f6301000f6301000f63
+01000f6301000f6301000f020100061308010c0e00010623010006030202010302020603
+0100050000000532010005000f6301000f6301000f6301000f6301000f6301000f630100
+0f020100061308010c0e0001062301000603020201030202060301000000053401000f63
+01000f6301000f6301000f6301000f6301000f6301000f020100061308010c0e00010623
+01000603020201030202060301000500000005130100050401020515010005000f630100
+0f6301000f6301000f6301000f6301000f6301000f020100061308010c0e000106230100
+0603020201030202060301000000051201020503010005020100051501000f0e01000f16
+01000f3b01000f0e01000f0601020f1001000f0c01000f2901000f6301000f6301000f63
+01000f6301000f020100061308010c0e0001062301000603020201030202060301000500
+00000513010005030100050201000514010005000f0e01000f5301000f0e01000f080100
+0f1001000f0c01000f2901000f6301000f6301000f6301000f6301000f02010006130801
+0c0e00010623010006030202010302020603010000000514010005030100050201000515
+01000f0e01000f0101000f0301020f0201000f0001010f0301020f0201000f0001010f34
+01000f0e01000f0001010f0501000f0301020f0301020f0201000f0101000f0301020f02
+01000f0001010f0301020f0201000f0001010f0301010f0001000f1001000f6301000f63
+01000f6301000f6301000f020100061308010c0e00010623010006030202010302020603
+0100050000000513010005030100050201000514010005000f0e01000f0001000f030100
+0f0201000f0101010f0101000f0401000f0201010f0101000f3301000f0e01010f010100
+0f0401000f0201000f0201000f0101000f0201000f0101000f0001000f0301000f020100
+0f0101010f0101000f0101000f0201000f0101010f0101000f0101000f0101010f100100
+0f6301000f6301000f6301000f6301000f020100061308010c0e00010623010006030202
+01030202060301000000051401000503010005020100051501000f0e01010f0801000f01
+01000f0801000f0201000f0201000f3301000f0e01000f0201000f0401000f0601000f01
+01000f0501010f0401000f0201000f0101000f0201000f0101000f0201000f0101000f05
+01000f0201000f1001000f6301000f6301000f6301000f6301000f020100061308010c0e
+000106230100060302020103020206030100050000000513010005030100050201000514
+010005000f0e01010f0501030f0101000f0801000f0201000f0201000f3301000f0e0100
+0f0201000f0401000f0301030f0101000f0501010f0401040f0101000f0201000f010104
+0f0101000f0501000f0201000f1001000f6301000f6301000f6301000f6301000f020100
+061308010c0e000106230100060302020103020206030100000005140100050301000502
+0100051501000f0e01000f0001000f0301000f0201000f0101000f0801000f0201000f02
+01000f3301000f0e01000f0201000f0401000f0201000f0201000f0101000f0501000f00
+01000f0301000f0501000f0201000f0101000f0501000f0501000f0201000f1001000f63
+01000f6301000f6301000f6301000f020100061308010c0e000106230100060302020103
+0202060301000500000005110104050201020515010005000f0e01000f0101000f020100
+0f0201000f0101000f0801000f0201000f0201000f3301000f0e01010f0101000f040100
+0f0201000f0201000f0101000f0201000f0101000f0101000f0201000f0201000f010101
+0f0101000f0101000f0201000f0101000f0501000f0101010f1001000f6301000f630100
+0f6301000f6301000f020100061308010c0e000106230100060302020103020206030100
+0000053401000f0e01000f0201000f0201030f0101000f0801000f0201000f0201000f33
+01000f0e01000f0001010f0501000f0301030f0201020f0201000f0201000f0201020f02
+01000f0001010f0301020f0201000f0601010f0001000f1001000f6301000f6301000f63
+01000f6301000f020100061308010c0e0001062301000603020201030202060301000500
+00000532010005000f6301000f5101000f1001000f6301000f6301000f6301000f630100
+0f020100061308010c0e0001062301000603020201030202060301000000053401000f63
+01000f4d01000f0201000f1001000f6301000f6301000f6301000f6301000f0201000613
+08010c0e000106230100060302020103020206030100050000000532010005000f630100
+0f4e01020f1101000f6301000f6301000f6301000f6301000f020100061308010c0e0001
+062301000603020201030202060301000000053401000f6301000f6301000f6301000f63
+01000f6301000f6301000f020100061308010c0e00010623010006030202010302020603
+0100050000000532010005000f6301000f6301000f6301000f6301000f6301000f630100
+0f020100061308010c0e0001062301000603020201030202060301000000050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+0100050001000500010005000100050001000500010005000100050001000f6301000f63
+01000f6301000f6301000f6301000f6301000f020100061308010c0e0001062301000603
+020201030202060301000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+01000500010005000100050001ff01ff0161061308010c0e000106230100060302020103
+020206030100050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000630100006301000063010000630100006301000063010000020100
+061308010c0e000106230100060302020103020206030100000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500010000630100006301000063
+010000630100006301000063010000020100061308010c0e000106230100060302020103
+020206030100050000000532010005000063010000630100006301000063010000630100
+0063010000020100061308010c0e00010623010006030202010302020603010000000534
+010000630100006301000063010000630100006301000063010000020100061308010c0e
+000106230100060302020103020206030100050000000513010005050100051601000500
+00630100006301000063010000630100006301000063010000020100061308010c0e0001
+062301000603020201030202060301000000051201020503010205170100001e01000043
+0100000e01000006010200100100000c0100002901000063010000630100006301000063
+010000020100061308010c0e000106230100060302020103020206030100050000000513
+010005050100051601000500001e010000430100000e01000008010000100100000c0100
+002901000063010000630100006301000063010000020100061308010c0e000106230100
+0603020201030202060301000000051401000505010005170100000e0101000001000003
+01020002010400020102003b0100000e0100000001010005010000030102000301020002
+010000010100000301020002010000000101000301020002010000000101000301010000
+0100001001000063010000630100006301000063010000020100061308010c0e00010623
+0100060302020103020206030100050000000513010005050100051601000500000e0100
+00000100000001000001010000020100000301000003010000020100003a0100000e0101
+000101000004010000020100000201000001010000020100000101000000010000030100
+000201000001010100010100000101000002010000010101000101000001010000010101
+001001000063010000630100006301000063010000020100061308010c0e000106230100
+0603020201030202060301000000051401000505010005170100000e0100000001000000
+0100000501000003010000030100003e0100000e01000002010000040100000601000001
+010000050101000401000002010000010100000201000001010000020100000101000005
+010000020100001001000063010000630100006301000063010000020100061308010c0e
+000106230100060302020103020206030100050000000513010005050100051601000500
+000e01000000010000000100000201030003010000040102003b0100000e010000020100
+000401000003010300010100000501010004010400010100000201000001010400010100
+000501000002010000100100006301000063010000630100006301000002010006130801
+0c0e0001062301000603020201030202060301000000051401000505010005170100000e
+0100000001000000010000010100000201000003010000070100003a0100000e01000002
+010000040100000201000002010000010100000501000000010000030100000501000002
+010000010100000501000005010000020100001001000063010000630100006301000063
+010000020100061308010c0e000106230100060302020103020206030100050000000511
+010405010104051401000500000e01000000010000000100000101000002010000030100
+0003010000020100003a0100000e01010001010000040100000201000002010000010100
+000201000001010000010100000201000002010000010101000101000001010000020100
+000101000005010000010101001001000063010000630100006301000063010000020100
+061308010c0e000106230100060302020103020206030100000005340100000e01000000
+010000000100000201030004010100020102003b0100000e010000000101000501000003
+010300020102000201000002010000020102000201000000010100030102000201000006
+010100000100001001000063010000630100006301000063010000020100061308010c0e
+000106230100060302020103020206030100050000000532010005000063010000510100
+001001000063010000630100006301000063010000020100061308010c0e000106230100
+06030202010302020603010000000534010000630100004d010000020100001001000063
+010000630100006301000063010000020100061308010c0e000106230100060302020103
+0202060301000500000005320100050000630100004e0102001101000063010000630100
+006301000063010000020100061308010c0e000106230100060302020103020206030100
+000005340100006301000063010000630100006301000063010000630100000201000613
+08010c0e0001062301000603020201030202060301000500000005320100050000630100
+006301000063010000630100006301000063010000020100061308010c0e000106230100
+060302020103020206030100000005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010000630100006301000063010000630100006301000063
+010000020100061308010c0e000106230100060302020103020206030100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001ff01ff
+0161061308010c0e000106230100060302020103020206030100009a0100006301000063
+010000630100006301000063010000020100061308010c0e000106230100060302020103
+020206030100003508000063010000630100006301000063010000630100006301000002
+0100061308010c0e00010623010006030202010302020603010000010632080100630100
+006301000063010000630100006301000063010000020100061308010c0e000106230100
+060302020103020206030100000106320801006301000063010000630100006301000063
+01000063010000020100061308010c0e0001062301000603020201030202060301000001
+061301000604010206150801006301000063010000630100006301000063010000630100
+00020100061308010c0e0001062301000603020201030202060301000001061101020603
+010006020100061408010063010000630100006301000063010000630100006301000002
+0100061308010c0e00010623010006030202010302020603010000010613010006030100
+060201000614080100630100006301000063010000630100006301000063010000020100
+061308010c0e000106230100060302020103020206030100000106130100060301000602
+010006140801006301000063010000630100006301000063010000630100000201000613
+08010c0e0001062301000603020201030202060301000001061301000606010006150801
+00630100006301000063010000630100006301000063010000020100061308010c0e0001
+062301000603020201030202060301000001061301000605010006160801006301000063
+01000063010000630100006301000063010000020100061308010c0e0001062301000603
+020201030202060301000001061301000604010006170801006301000063010000630100
+00630100006301000063010000020100061308010c0e0001062301000603020201030202
+060301000001061301000603010006020100061408010063010000630100006301000063
+0100006301000063010000020100061308010c0e00010623010006030202010302020603
+010000010611010406010104061408010063010000630100006301000063010000630100
+0063010000020100061308010c0e00010623010006030202010302020603010000010632
+080100630100006301000063010000630100006301000063010000020100061308010c0e
+000106230100060302020103020206030100000106320801006301000063010000630100
+00630100006301000063010000020100061308010c0e0001062301000603020201030202
+060301000001063208010063010000630100006301000063010000630100006301000002
+0100061308010c0e00010623010006030202010302020603010000010632080100630100
+006301000063010000630100006301000063010000020100061308010c0e000106230100
+060302020103020206030100000106320801006301000063010000630100006301000063
+01000063010000020100061308010c0e0001062301000603020201030202060301000001
+063208010063010000630100006301000063010000630100006301000002010006130801
+0c0e00010623010006030202010302020603010000010834006301000063010000630100
+00630100006301000063010000020100061308010c0e0001062301000603020201030202
+060301000000083501ff01ff0161061308010c0e00010623010006030202010302020603
+0100009a0100006301000063010000630100006301000063010000020100061308010c0e
+000106230100060302020103020206030100003508000063010000630100006301000063
+0100006301000063010000020100061308010c0e00010623010006030202010302020603
+010000010632080100630100006301000063010000630100006301000063010000020100
+061308010c0e000106230100060302020103020206030100000106320801006301000063
+01000063010000630100006301000063010000020100061308010c0e0001062301000603
+020201030202060301000001061301000604010206150801006301000063010000630100
+00630100006301000063010000020100061308010c0e0001062301000603020201030202
+060301000001061101020603010006020100061408010063010000630100006301000063
+0100006301000063010000020100061308010c0e00010623010006030202010302020603
+010000010613010006070100061408010063010000630100006301000063010000630100
+0063010000020100061308010c0e00010623010006030202010302020603010000010613
+010006070100061408010063010000630100006301000063010000630100006301000002
+0100061308010c0e00010623010006030202010302020603010000010613010006050101
+061508010063010000630100006301000063010000630100006301000002010006130801
+0c0e00010623010006030202010302020603010000010613010006070100061408010063
+0100006301000063010000630100006301000063010000020100061308010c0e00010623
+010006030202010302020603010000010613010006070100061408010063010000630100
+0063010000630100006301000063010000020100061308010c0e00010623010006030202
+010302020603010000010613010006030100060201000614080100630100006301000063
+010000630100006301000063010000020100061308010c0e000106230100060302020103
+020206030100000106110104060201020615080100630100006301000063010000630100
+006301000063010000020100061308010c0e000106230100060302020103020206030100
+000106320801006301000063010000630100006301000063010000630100000201000613
+08010c0e0001062301000603020201030202060301000001063208010063010000630100
+0063010000630100006301000063010000020100061308010c0e00010623010006030202
+010302020603010000010632080100630100006301000063010000630100006301000063
+010000020100061308010c0e000106230100060302020103020206030100000106320801
+00630100006301000063010000630100006301000063010000020100061308010c0e0001
+062301000603020201030202060301000001063208010063010000630100006301000063
+0100006301000063010000020100061308010c0e00010623010006030202010302020603
+010000010632080100630100006301000063010000630100006301000063010000020100
+061308010c0e000106230100060302020103020206030100000108340063010000630100
+0063010000630100006301000063010000020100061308010c0e00010623010006030202
+01030202060301000000083501ff01ff0161061308010c0e000106230100060302020103
+020206030100009a01000063010000630100006301000063010000630100000201000613
+08010c0e0001062301000603020201030202060301000035080000630100006301000063
+010000630100006301000063010000020100061308010c0e000106230100060302020103
+020206030100000106320801006301000063010000630100006301000063010000630100
+00020100061308010c0e0001062301000603020201030202060301000001063208010063
+0100006301000063010000630100006301000063010000020100061308010c0e00010623
+010006030202010302020603010000010613010006060100061508010063010000630100
+0063010000630100006301000063010000020100061308010c0e00010623010006030202
+010302020603010000010611010206050101061508010063010000630100006301000063
+0100006301000063010000020100061308010c0e00010623010006030202010302020603
+010000010613010006040100060001000615080100630100006301000063010000630100
+006301000063010000020100061308010c0e000106230100060302020103020206030100
+000106130100060401000600010006150801006301000063010000630100006301000063
+01000063010000020100061308010c0e0001062301000603020201030202060301000001
+061301000603010006010100061508010063010000630100006301000063010000630100
+0063010000020100061308010c0e00010623010006030202010302020603010000010613
+010006020100060201000615080100630100006301000063010000630100006301000063
+010000020100061308010c0e000106230100060302020103020206030100000106130100
+060201050614080100630100006301000063010000630100006301000063010000020100
+061308010c0e000106230100060302020103020206030100000106130100060601000615
+080100630100006301000063010000630100006301000063010000020100061308010c0e
+000106230100060302020103020206030100000106110104060301020614080100630100
+006301000063010000630100006301000063010000020100061308010c0e000106230100
+060302020103020206030100000106320801006301000063010000630100006301000063
+01000063010000020100061308010c0e0001062301000603020201030202060301000001
+063208010063010000630100006301000063010000630100006301000002010006130801
+0c0e00010623010006030202010302020603010000010632080100630100006301000063
+010000630100006301000063010000020100061308010c0e000106230100060302020103
+020206030100000106320801006301000063010000630100006301000063010000630100
+00020100061308010c0e0001062301000603020201030202060301000001063208010063
+0100006301000063010000630100006301000063010000020100061308010c0e00010623
+010006030202010302020603010000010632080100630100006301000063010000630100
+006301000063010000020100061308010c0e000106230100060302020103020206030100
+000108340063010000630100006301000063010000630100006301000002010006130801
+0c0e0001062301000603020201030202060301000000083501ff01ff0161061308010c0e
+000106230100060302020103020206030100009a01000063010000630100006301000063
+01000063010000020100061308010c0e0001062301000603020201030202060301000035
+080000630100006301000063010000630100006301000063010000020100061308010c0e
+000106230100060302020103020206030100000106320801006301000063010000630100
+00630100006301000063010000020100061308010c0e0001062301000603020201030202
+060301000001063208010063010000630100006301000063010000630100006301000002
+0100061308010c0e00010623010006030202010302020603010000010613010006030104
+061408010063010000630100006301000063010000630100006301000002010006130801
+0c0e00010623010006030202010302020603010000010611010206030100061808010063
+0100006301000063010000630100006301000063010000020100061308010c0e00010623
+010006030202010302020603010000010613010006030100061808010063010000630100
+0063010000630100006301000063010000020100061308010c0e00010623010006030202
+010302020603010000010613010006030100061808010063010000630100006301000063
+0100006301000063010000020100061308010c0e00010623010006030202010302020603
+010000010613010006030103061508010063010000630100006301000063010000630100
+0063010000020100061308010c0e00010623010006030202010302020603010000010613
+010006070100061408010063010000630100006301000063010000630100006301000002
+0100061308010c0e00010623010006030202010302020603010000010613010006070100
+061408010063010000630100006301000063010000630100006301000002010006130801
+0c0e00010623010006030202010302020603010000010613010006020100060301000614
+080100630100006301000063010000630100006301000063010000020100061308010c0e
+000106230100060302020103020206030100000106110104060101030615080100630100
+006301000063010000630100006301000063010000020100061308010c0e000106230100
+060302020103020206030100000106320801006301000063010000630100006301000063
+01000063010000020100061308010c0e0001062301000603020201030202060301000001
+063208010063010000630100006301000063010000630100006301000002010006130801
+0c0e00010623010006030202010302020603010000010632080100630100006301000063
+010000630100006301000063010000020100061308010c0e000106230100060302020103
+020206030100000106320801006301000063010000630100006301000063010000630100
+00020100061308010c0e0001062301000603020201030202060301000001063208010063
+0100006301000063010000630100006301000063010000020100061308010c0e00010623
+010006030202010302020603010000010632080100630100006301000063010000630100
+006301000063010000020100061308010c0e000106230100060302020103020206030100
+000108340063010000630100006301000063010000630100006301000002010006130801
+0c0e0001062301000603020201030202060301000000083501ff01ff0161061308010c0e
+000106230100060302020103020206030100009a01000063010000630100006301000063
+01000063010000020100061308010c0e0001062301000603020201030202060301000035
+080000630100006301000063010000630100006301000063010000020100061308010c0e
+000106230100060302020103020206030100000106320801006301000063010000630100
+00630100006301000063010000020100061308010c0e0001062301000603020201030202
+060301000001063208010063010000630100006301000063010000630100006301000002
+0100061308010c0e00010623010006030202010302020603010000010613010006050102
+061408010063010000630100006301000063010000630100006301000002010006130801
+0c0e00010623010006030202010302020603010000010611010206040100061708010063
+0100006301000063010000630100006301000063010000020100061308010c0e00010623
+010006030202010302020603010000010613010006030100061808010063010000630100
+0063010000630100006301000063010000020100061308010c0e00010623010006030202
+010302020603010000010613010006030100061808010063010000630100006301000063
+0100006301000063010000020100061308010c0e00010623010006030202010302020603
+010000010613010006030103061508010063010000630100006301000063010000630100
+0063010000020100061308010c0e00010623010006030202010302020603010000010613
+010006030100060201000614080100630100006301000063010000630100006301000063
+010000020100061308010c0e000106230100060302020103020206030100000106130100
+060301000602010006140801006301000063010000630100006301000063010000630100
+00020100061308010c0e0001062301000603020201030202060301000001061301000603
+010006020100061408010063010000630100006301000063010000630100006301000002
+0100061308010c0e00010623010006030202010302020603010000010611010406020102
+061508010063010000630100006301000063010000630100006301000002010006130801
+0c0e00010623010006030202010302020603010000010632080100630100006301000063
+010000630100006301000063010000020100061308010c0e000106230100060302020103
+020206030100000106320801006301000063010000630100006301000063010000630100
+00020100061308010c0e0001062301000603020201030202060301000001063208010063
+0100006301000063010000630100006301000063010000020100061308010c0e00010623
+010006030202010302020603010000010632080100630100006301000063010000630100
+006301000063010000020100061308010c0e000106230100060302020103020206030100
+000106320801006301000063010000630100006301000063010000630100000201000613
+08010c0e0001062301000603020201030202060301000001063208010063010000630100
+0063010000630100006301000063010000020100061308010c0e00010623010006030202
+010302020603010000010834006301000063010000630100006301000063010000630100
+00020100061308010c0e0001062301000603020201030202060301000000083501ff01ff
+0161061308010c0e000106230100060302020103020206030100009a0100006301000063
+010000630100006301000063010000020100061308010c0e000106230100060302020103
+020206030100003508000063010000630100006301000063010000630100006301000002
+0100061308010c0e00010623010006030202010302020603010000010632080100630100
+006301000063010000630100006301000063010000020100061308010c0e000106230100
+060302020103020206030100000106320801006301000063010000630100006301000063
+01000063010000020100061308010c0e0001062301000603020201030202060301000001
+061301000603010406140801006301000063010000630100006301000063010000630100
+00020100061308010c0e0001062301000603020201030202060301000001061101020603
+010006020100061408010063010000630100006301000063010000630100006301000002
+0100061308010c0e00010623010006030202010302020603010000010613010006060100
+061508010063010000630100006301000063010000630100006301000002010006130801
+0c0e00010623010006030202010302020603010000010613010006060100061508010063
+0100006301000063010000630100006301000063010000020100061308010c0e00010623
+010006030202010302020603010000010613010006060100061508010063010000630100
+0063010000630100006301000063010000020100061308010c0e00010623010006030202
+010302020603010000010613010006060100061508010063010000630100006301000063
+0100006301000063010000020100061308010c0e00010623010006030202010302020603
+010000010613010006050100061608010063010000630100006301000063010000630100
+0063010000020100061308010c0e00010623010006030202010302020603010000010613
+010006050100061608010063010000630100006301000063010000630100006301000002
+0100061308010c0e00010623010006030202010302020603010000010611010406030100
+061608010063010000630100006301000063010000630100006301000002010006130801
+0c0e00010623010006030202010302020603010000010632080100630100006301000063
+010000630100006301000063010000020100061308010c0e000106230100060302020103
+020206030100000106320801006301000063010000630100006301000063010000630100
+00020100061308010c0e0001062301000603020201030202060301000001063208010063
+0100006301000063010000630100006301000063010000020100061308010c0e00010623
+010006030202010302020603010000010632080100630100006301000063010000630100
+006301000063010000020100061308010c0e000106230100060302020103020206030100
+000106320801006301000063010000630100006301000063010000630100000201000613
+08010c0e0001062301000603020201030202060301000001063208010063010000630100
+0063010000630100006301000063010000020100061308010c0e00010623010006030202
+010302020603010000010834006301000063010000630100006301000063010000630100
+00020100061308010c0e0001062301000603020201030202060301000000083501ff01ff
+0161061308010c0e000106230100060302020103020206030100009a0100006301000063
+010000630100006301000063010000020100061308010c0e000106230100060302020103
+020206030100003508000063010000630100006301000063010000630100006301000002
+0100061308010c0e00010623010006030202010302020603010000010632080100630100
+006301000063010000630100006301000063010000020100061308010c0e000106230100
+060302020103020206030100000106320801006301000063010000630100006301000063
+01000063010000020100061308010c0e0001062301000603020201030202060301000001
+061301000604010206150801006301000063010000630100006301000063010000630100
+00020100061308010c0e0001062301000603020201030202060301000001061101020603
+010006020100061408010063010000630100006301000063010000630100006301000002
+0100061308010c0e00010623010006030202010302020603010000010613010006030100
+060201000614080100630100006301000063010000630100006301000063010000020100
+061308010c0e000106230100060302020103020206030100000106130100060301000602
+010006140801006301000063010000630100006301000063010000630100000201000613
+08010c0e0001062301000603020201030202060301000001061301000604010206150801
+00630100006301000063010000630100006301000063010000020100061308010c0e0001
+062301000603020201030202060301000001061301000603010006020100061408010063
+0100006301000063010000630100006301000063010000020100061308010c0e00010623
+010006030202010302020603010000010613010006030100060201000614080100630100
+006301000063010000630100006301000063010000020100061308010c0e000106230100
+060302020103020206030100000106130100060301000602010006140801006301000063
+01000063010000630100006301000063010000020100061308010c0e0001062301000603
+020201030202060301000001061101040602010206150801006301000063010000630100
+00630100006301000063010000020100061308010c0e0001062301000603020201030202
+060301000001063208010063010000630100006301000063010000630100006301000002
+0100061308010c0e00010623010006030202010302020603010000010632080100630100
+006301000063010000630100006301000063010000020100061308010c0e000106230100
+060302020103020206030100000106320801006301000063010000630100006301000063
+01000063010000020100061308010c0e0001062301000603020201030202060301000001
+063208010063010000630100006301000063010000630100006301000002010006130801
+0c0e00010623010006030202010302020603010000010632080100630100006301000063
+010000630100006301000063010000020100061308010c0e000106230100060302020103
+020206030100000106320801006301000063010000630100006301000063010000630100
+00020100061308010c0e0001062301000603020201030202060301000001083400630100
+006301000063010000630100006301000063010000020100061308010010062301000603
+020201030202060301ff01ff019906130800001106230100060302020103020206030100
+06ff06ff06e3010006030202010302020603010006ff06ff06e301000603020201030202
+0603010006ff06ff06e3010006030202010302020603010006ff06ff06e3010006030202
+010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e30100
+06030202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff
+06e301000603020201030202060301000649010006ff06ff069801000603020201030202
+060301000648010106ff06ff069801000603020201030202060301000647010006000100
+06ff06ff069801000603020201030202060301000649010006ff06ff0698010006030202
+01030202060301000649010006ff06ff0698010006030202010302020603010006490100
+06ff06ff069801000603020201030202060301000649010006ff06ff0698010006030202
+01030202060301000649010006ff06ff0698010006030202010302020603010006470104
+06ff06ff0696010006030202010302020603010006ff06ff06e301000603020201030202
+0603010006ff06ff06e3010006030202010302020603010006ff06ff06e3010006030202
+010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e30100
+060302020103020206030100063708ff08ff0860064a0100060302020103020206030100
+063708ff08ff085f0000064a010006030202010302020603010006370801001d0cff0cff
+0c3e0001064a010006030202010302020603010006370801001c08000cff0cff0c3e0001
+064a0100060302020103020206030100063708010001060b08000000060b08010cff0cff
+0c3e0001064a0100060302020103020206030100063708010001060b08000000060b0801
+0cff0cff0c3e0001064a0100060302020103020206030100063708010001060b08000000
+060b08010cff0cff0c3e0001064a0100060302020103020206030100063708010001060b
+08000000060b08010cff0cff0c3e0001064a010006030202010302020603010006370801
+0001060b08000000060b08010cff0cff0c3e0001064a0100060302020103020206030100
+063708010001060b08000000060b08010cff0cff0c3e0001064a01000603020201030202
+06030100063708010001060b08000000060b08010cff0cff0c3e0001064a010006030202
+0103020206030100063708010001060b08000000060b08010cff0cff0c3e0001064a0100
+060302020103020206030100063708010001060b08000000060b08010cff0cff0c3e0001
+064a0100060302020103020206030100063708010001060b08000000060b08010cff0cff
+0c3e0001064a0100060302020103020206030100063708010001060b08000000060b0801
+0cff0cff0c3e0001064a0100060302020103020206030100063708010001080c0000080d
+0cff0cff0c3e0001064a0100060302020103020206030100063708010000081c0cff0cff
+0c3e0001064a01000603020201030202060301000637080100ff00ff005e064a01000603
+020201030202060301000637080000ff00ff005f064a0100060302020103020206030100
+06ff06ff06e3010006030202010302020603010006ff06ff06e301000603020201030202
+0603010006ff06ff06e3010006030202010302020603010006ff06ff06e3010006030202
+010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e30100
+06030202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff
+06e3010006030202010302020603010006ff06ff06e30100060302020103020206030100
+06ff06ff06e3010006030202010302020603010006ff06ff06e301000603020201030202
+0603010006ff06ff06e3010006030202010302020603010006ff06ff06e3010006030202
+010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e30100
+06030202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff
+06e3010006030202010302020603010006ff06ff06e30100060302020103020206030100
+06ff06ff06e3010006030202010302020603010006ff06ff06e301000603020201030202
+0603010006ff06ff06e3010006030202010302020603010006ff06ff06e3010006030202
+010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e30100
+06030202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff
+06e3010006030202010302020603010006ff06ff06e30100060302020103020206030100
+06ff06ff06e3010006030202010302020603010006ff06ff06e301000603020201030202
+0603010006ff06ff06e3010006030202010302020603010006ff06ff06e3010006030202
+010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e30100
+06030202010100040603010006ff06ff06e301000603000502020400060301ff01ff01e5
+060300000202040000000202040006ff06ff06ed00000202040000000202040006ff06ff
+06ed00000202040000000202040006ff06ff06ed00000202040000000202040006ff06ff
+06ed000002020400000002020400000502ff02ff02e100060202040000000208040002ff
+02ff02e100000208040000000208040002ff02ff02e100000208040000000208040001ff
+01ff01e10000020804000000040901ff01ff01e100000409
+%%EndData
+end
+%%PageTrailer
+%%Trailer
+%%BoundingBox: 0 64 377 377
+%%EOF
diff --git a/lib/tv/doc/src/tv_search_result.gif b/lib/tv/doc/src/tv_search_result.gif
new file mode 100644
index 0000000000..3e615b4875
--- /dev/null
+++ b/lib/tv/doc/src/tv_search_result.gif
Binary files differ
diff --git a/lib/tv/doc/src/tv_search_result.ps b/lib/tv/doc/src/tv_search_result.ps
new file mode 100644
index 0000000000..14d0331a8f
--- /dev/null
+++ b/lib/tv/doc/src/tv_search_result.ps
@@ -0,0 +1,2739 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (ImageMagick)
+%%Title: (./tv_search_result.tmp.eps)
+%%CreationDate: (Tue Jun 12 16:10:46 2001)
+%%BoundingBox: 0 34 400 249
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 0
+%%EndComments
+
+%%BeginDefaults
+%%PageOrientation: Portrait
+%%EndDefaults
+
+%%BeginProlog
+%
+% Display a color image. The image is displayed in color on
+% Postscript viewers or printers that support color, otherwise
+% it is displayed as grayscale.
+%
+/buffer 512 string def
+/byte 1 string def
+/color_packet 3 string def
+/pixels 768 string def
+
+/DirectClassPacket
+{
+ %
+ % Get a DirectClass packet.
+ %
+ % Parameters:
+ % red.
+ % green.
+ % blue.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/DirectClassImage
+{
+ %
+ % Display a DirectClass image.
+ %
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { DirectClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayDirectClassPacket } image
+ } ifelse
+} bind def
+
+/GrayDirectClassPacket
+{
+ %
+ % Get a DirectClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % red
+ % green
+ % blue
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/GrayPseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassImage
+{
+ %
+ % Display a PseudoClass image.
+ %
+ % Parameters:
+ % class: 0-PseudoClass or 1-Grayscale.
+ %
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ class 0 gt
+ {
+ currentfile buffer readline pop
+ token pop /depth exch def pop
+ /grays columns 8 add depth sub depth mul 8 idiv string def
+ columns rows depth
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { currentfile grays readhexstring pop } image
+ }
+ {
+ %
+ % Parameters:
+ % colors: number of colors in the colormap.
+ % colormap: red, green, blue color packets.
+ %
+ currentfile buffer readline pop
+ token pop /colors exch def pop
+ /colors colors 3 mul def
+ /colormap colors string def
+ currentfile colormap readhexstring pop pop
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { PseudoClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayPseudoClassPacket } image
+ } ifelse
+ } ifelse
+} bind def
+
+/DisplayImage
+{
+ %
+ % Display a DirectClass or PseudoClass image.
+ %
+ % Parameters:
+ % x & y translation.
+ % x & y scale.
+ % label pointsize.
+ % image label.
+ % image columns & rows.
+ % class: 0-DirectClass or 1-PseudoClass.
+ % compression: 0-RunlengthEncodedCompression or 1-NoCompression.
+ % hex color packets.
+ %
+ gsave
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ x y translate
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ currentfile buffer readline pop
+ token pop /pointsize exch def pop
+ /Helvetica findfont pointsize scalefont setfont
+ x y scale
+ currentfile buffer readline pop
+ token pop /columns exch def
+ token pop /rows exch def pop
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ currentfile buffer readline pop
+ token pop /compression exch def pop
+ class 0 gt { PseudoClassImage } { DirectClassImage } ifelse
+ grestore
+} bind def
+%%EndProlog
+%%Page: 1 1
+%%PageBoundingBox: 0 34 400 249
+userdict begin
+%%BeginData:
+DisplayImage
+0 34
+400.000000 215.000000
+12
+1051 565
+1
+0
+0
+32
+ffffff
+000000
+d8d8d8
+4ac1df
+c2c2c2
+6b6b6b
+d9d9d9
+b22222
+00ff00
+ff0000
+aa2455
+990000
+7f7f7f
+999999
+ff7f7f
+009900
+7fff7f
+ffd700
+998100
+ffff7f
+000000
+000000
+000000
+000000
+000000
+000000
+000000
+000000
+000000
+000000
+000000
+000000
+03ba01010000010100000100000001000000010000000100000001000000010000000100
+000101000002010103ff03ff03ff03ff0300010200000100000001000000010000000100
+000001000000010000000100000101000002010103f5000a01ff01ff0137000a03be0101
+000101000000010000000100000001000000010000000100000101000002010103f60000
+0208050001ff01ff013700000208050003bf010100010100000001000000010000000100
+00000100000101000002010103f700000208050002ff02ff023700000208050003c00101
+00010100000001000000010000000100000101000002010103f800000208050002ff02ff
+023700000208050003c10101000101000000010000000100000101000002010103f90000
+0202050602ff02ff0237000005050202050003c201010001010000000100000101000002
+010103fa0000020205000209000d02ff02ff022b00000202050003c30101000101000001
+01000002010103fb00000202050002080000020d05000234010302110103023201020258
+0102020c010102010101021e010102290101020601010208010102310101022a01010230
+0101024100000202050003c40101000201000002010103fc00000202050002080000020d
+05000234010102020107020001010203010102010101020e01050200010702010103020d
+0101020401010204010302030103020e010302060103020301030203010302060103020b
+0101020a0101020201010219010002030101021c0100020b01010206010102090101021b
+010202020100020d0101022a0101020c0104021e0101024100000202050003c501010000
+01000002010103fd00000202050002080000020d05000234010102050101020301010203
+010102010101020e0101020701010203010102010101020c010102020103020301010201
+010102010101020101010208010102010101020101010204010102010101020101010201
+0101020101010201010102040101020101010201010102060101020a0101020201010218
+010102210101020b01010206010102090101021b010202020100020d0101023801010202
+0101021d0101024100000202050003c601010002010103fe000002020500020800000202
+0506020305000234010102050101020301010203010102010101020e0101020701010203
+010102050101020901010203010102070101020101010201010102060102020201010201
+010102080101020101010201010102010101020101010204010102010101020201020203
+0101020a0101020301010202010302030103020201030201010402010101020201030203
+010102000101020a0104020101030203010102000101020301010202010302030101021a
+010002000101020101000202010302030104020201030202010102090101020001010201
+010102030103020301010202010102000101020201010201010302020101020001010201
+010102030103020201010200010102010101020201030202010102020101023000000202
+050003c701000001010103ff000005030208000002020500040400000203050002340101
+02050101020401010202010002020101020e0101020701010203010202040101020a0100
+020301010207010102010101020101010205010102040101020101010208010102010101
+02010101020101010201010102040101020101010204010102020100020b010102030101
+020101010201010102010101020101010200010102010101020101010203010102010101
+020101010202010202000101020a01010202010102010101020201020200010102020101
+020101010201010102020101021a01000200010102010100020101010201010102010101
+020101010201010102010101020101010209010202000102020001010201010102010101
+020201010202010202000101020101010200010102000101020201020200010202000101
+020101010201010102010101020001010201010102010101020101010201010102020101
+02300000050303c7010303ff03000101020b000002030500040200000204050002340101
+02050101020401010201010102020101020e01040204010102040103020d010102040101
+020501020202010102010101020401010205010102010101020701010202010102010101
+020201040204010102010101020501010202010102090101020301010201010102010101
+0201010102080101020101010203010102010101020101010202010102010101020a0101
+02060101020201010201010102020101020101010201010102020101021a010002000102
+02000100020101010201010102010101020101010201010102010101020d010102010101
+020101010205010102020101020201010201010102010101020001010200010102020101
+020101010201010102050101020101020203010102010101020101010201010102020100
+0234010103c8010103ff03010101020b0000020305000402000002040500023401010205
+0101020501010200010002030101020e01010207010102060102020e0100020301010207
+010102010101020101010205010102040101020101010206010102030101020101010205
+010102040101020101010204010102020100020b01010203010102010101020101010201
+010102050104020101010203010102010101020101010202010102010101020a01010203
+01040202010102010101020201010201010502020101021a010002010101020001000201
+010102010101020101010201010102010105020d01010201010102010101020201040202
+010102020101020101010201010102000101020001010202010102010101020101010202
+010402010101020401010201010502020101020001010234010103ff03cc0101020b0000
+02040500040000000205050002340101020501010205010302030101020e010102070101
+02070101020d010102030101020701010201010102010101020601020202010102010101
+0205010102040101020101010205010102040101020101010202010202030101020a0101
+020301010201010102010101020101010204010102010101020101010203010102010101
+020101010202010102010101020a01010202010102010101020201010201010102020101
+0201010102060101021a0100020201020201010102010101020101010201010102010101
+021101010201010102010101020101010201010102020101020201010201010102010101
+020101010200010102010101020101010201010102010101020101010201010102040101
+0201010102060101020001000235010103ff03cc0101020b000002040500040000000205
+050002340101020501010206010102040101020e01010207010102030101020101010201
+010102080101020401010203010102010101020101010201010102010101020401010201
+010102010101020101010200010502010101020101010201010102010101020101010200
+0101020101010201010102060101020a0101020201010201010102010101020101010202
+01000200010102010101020101010203010102010101020101010202010102010101020a
+01010202010102010101020201010201010102020101020101010202010002010101021b
+010002020102020101010201010102010101020001020201010102020100020101010209
+010102010101020101010201010102010101020201010202010102010101020201010207
+010102010101020101010201010102010101020101010204010102010101020201000203
+01020235010103ff03cc0101020b00000205000002060500023401010205010102060101
+02040101020e010502030101020401030202010102080101020401010204010302030103
+0202010102090103020201010200010502020103020301030202010102010103020b0101
+020a01010202010102020103020301030202010202000101020101020201010102020103
+0203010102010101020b0102020101020200010102010104020301010202010302020101
+021b01000203010102020103020301010200010102020103020201010209010102010101
+020101010202010202000101020101010202010102010101020301050202010102010101
+020101010202010202000101020001010204010102020103020401010236010103ff03cc
+0101020b0000020d050002340103021101030232010202190100023d0102020c01010237
+010602230101029e01010237010103ff03cc0101020b0000020d0500029d010002ff0254
+01010237010103ae0100030801000305010103ff030a0101020b0000020d050002ff02ff
+022d010103ae0100030801000306010003ff030a0101020c050d02ff02ff022e010103ae
+0100030801000306010003ff030a010102ff02ff0249010103ac01040301010303000103
+0303010003030102030201030307010203010100030001010307010003e2010102ff02ff
+0249010103ae010003020100030201000300010003020100030201000302010003020100
+03000100030a01000302010003000101030101000306010003e2010102ff02ff02490101
+03ae01000302010003020100030001000302010003020100030201040301010203070100
+0302010003000100030201000306010003e2010102ff02ff0249010103ae010003020100
+030101010300010003020100030201000302010003080100030601000302010003000100
+030201000306010003e2010102ff02ff0249010103af0101030101010300010003000103
+0302010203020102030101030308010203010100030201000306010003e2010102020600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+0000060000000202010103ff03cc01010202000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+06000000060000000600000006000000060000000600000006000202010103ff03cc0101
+02020600000006ff06ff064001000202010103ff03cc01010202000006ff06ff06400100
+06000202010103ff03cc010102020600000006ff06ff064001000202010103ff03cc0101
+0202000006ff06ff0640010006000202010103ff03cc010102020600000006ff06ff0640
+01000202010103ff03cc010102020000060c07040604070006030702061f070406050700
+060407000604070006190700060207000604070006270702060b07000606070006ff065e
+070006020700060907020613010006000202010103ff03cc0101020206000000060b0700
+060f0700061f070006090700060a07000619070006020700062c070006020700060a0700
+06ff0666070006020700060b0700061401000202010103ff03cc010102020000060c0700
+060607020605070006030702061807000606070106000700060207020602070406170700
+060207000602070206030702060207000602070006170700060207000601070006000701
+06020704060207020603070206020700060007010603070206ff06490700060207000602
+0702060507000602070006000701060c010006000202010103ff03cc0101020206000000
+060b07000608070006050700060207000602070006170700060507000601070106040700
+06040700061a070006000700060507000602070006020700060107000602070006170700
+060207000601070106010700060307000606070006020700060207000601070106010700
+060107000602070006ff0648070006020700060107000602070006040700060207010601
+0700060c01000202010103ff03cc010102020000060c0703060507000605070006020700
+060207000617070306020700060207000604070006040700061a07000600070006050700
+060207000602070006010700060007000600070006170700060207000601070006020700
+0603070006060700060207000602070006010700060207000601070006ff064c07040601
+070006020700060407000602070006020700060b010006000202010103ff03cc01010202
+06000000060b070006080700060507000602070406170700060507000602070006040700
+06040700061a070006000700060507000602070406010700060007000600070006170700
+060207000601070006020700060307000606070006020700060207000601070006020700
+0602070206ff064907000602070006010704060407000602070006020700060c01000202
+010103ff03cc010102020000060c0700060807000605070006020700061b070006050700
+060207000604070006040700061b07000606070006020700060507000600070006000700
+061707000602070006010700060207000603070006060700060207000602070006010700
+060207000605070006ff064807000602070006010700060807000602070006020700060b
+010006000202010103ff03cc0101020206000000060b0700060807000605070006020700
+060207000617070006050700060107010604070006040700061b07000606070006020700
+060207000601070006000700060007000617070006020700060107010601070006030700
+0606070006020700060207000601070006020700060107000602070006ff064807000602
+07000601070006020700060407000602070106010700060c01000202010103ff03cc0101
+02020000060c070006080700060507000603070206180704060207010600070006040700
+060507010619070006060700060307020603070006000700061907020602070006000701
+06050701060407000603070206020700060207000602070206ff06490700060207000602
+0702060507000602070006000701060c010006000202010103ff03cc0101020206000000
+06a8070006ff06840700061001000202010103ff03cc010102020000060b0706062a0706
+062a0706062a07060600070006ff066e0706060e0700060f010006000202010103ff03cc
+0101020206000000060a0706062a0706062a0706062a07060600070006ff066e0706060e
+0700061001000202010103ff03cc01010202000006ff06ff0640010006000202010103ff
+03cc010102020600000006ff06ff064001000202010103ff03cc01010202000006ff06ff
+0640010006000202010103ff03cc01010202060000000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+01000600010006000100060001000600010006000100060001000202010103ff03cc0101
+020200000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000202010103ff03cc0101020206ff06ff06430202010103ff03cc
+0101020206ff06ff06430202010103ff03cc0101020206ff06ff06430202010103ff03cc
+0101020206ff06ff06430202010103ff03cc0101020206ff06ff06430202010103ff03cc
+0101020206ff06ff06430202010103ff03cc0101020206ff06ff06430202010103ff03cc
+0101020206ff06ff06430202010103ff03cc010102020636000006000000060000000600
+00000600000006000000060000000600000006000000060000000600000006000000061a
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000601000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000601000006000000060000000600
+00000600000006000000060000000600000006000000060000000600000006000000061a
+000006000000060000000600000006000000060000000600000006000000060000000600
+00000600000006000000061a000006000000060000000600000006000000060000000600
+00000600000006000000060000000600000006000000061a000006000000060000000600
+0000060000000600000006000000060000000600000006000000060000000600000006fb
+0202010103ff03cc01010202063500000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060001000618000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600010000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060001000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000100
+061800000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060001000618000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600010006180000
+060000000600000006000000060000000600000006000000060000000600000006000000
+06000000060000000600010006fa0202010103ff03cc010102020636000006140100061a
+00000614010006010000061401000601000006140100061a000006140100061a00000614
+0100061a00000614010006fb0202010103ff03cc01010202063500000616010006180000
+061601000000061601000000061601000618000006160100061800000616010006180000
+0616010006fa0202010103ff03cc010102020636000006140100061a0000061401000601
+0000061401000601000006140100061a000006140100061a000006140100061a00000614
+010006fb0202010103ff03cc010102020635000006050702060307020606010006180000
+061601000000061601000000061601000618000006160100061800000616010006180000
+0616010006fa0202010103ff03cc0101020206360000060407020603070206050100061a
+00000614010006010000061401000601000006140100061a00000606070406080100061a
+00000608070106090100061a0000060807030607010006fb0202010103ff03cc01010202
+063500000604070406010704060501000618000006100700060401000000061007000604
+010000000604070006100100061800000605070806070100061800000608070306090100
+06180000060707070606010006fa0202010103ff03cc0101020206360000060307000601
+0701060107000601070106040100061a0000060f07000603010006010000060f07000603
+01000601000006030700060f0100061a00000603070a06050100061a0000060707030608
+0100061a000006050703060107030604010006fb0202010103ff03cc0101020206350000
+0603070d0604010006180000060d07000601070006040100000006040700060a07000604
+010000000604070006010700060d01000618000006040703060207030606010006180000
+06090701060a01000618000006060702060307020605010006fa0202010103ff03cc0101
+0202063600000601070006000703060007020600070406020100061a0000060c07000601
+0700060301000601000006030700060a070006030100060100000603070006010700060c
+0100061a0000060207030604070306040100061a000006140100061a0000060507020603
+07020604010006fb0202010103ff03cc0101020206350000060207000600070306000702
+060007040603010006180000060a07000601070006010700060401000000060407000604
+070006040700060401000000060407000601070006010700060a01000618000006030702
+060307070603010006180000060707040609010006180000060707010602070206060100
+06fa0202010103ff03cc0101020206360000060107000600070306000702060007040602
+0100061a0000060907000601070006010700060301000601000006030700060407000604
+0700060301000601000006030700060107000601070006090100061a0000060207020604
+070506030100061a00000607070306080100061a0000060a07020606010006fb02020101
+03ff03cc0101020206350000060207000600070306000702060007040603010006180000
+060707000601070006010700060107000604010000000604070006040700060107000601
+070006040100000006040700060107000601070006010700060701000618000006030702
+060507030605010006180000060907020609010006180000060a07020608010006fa0202
+010103ff03cc010102020636000006010700060007070600070406020100061a00000606
+070006010700060107000601070006030100060100000603070006040700060107000601
+070006030100060100000603070006010700060107000601070006060100061a00000602
+07030605070106050100061a00000608070206080100061a0000060807020608010006fb
+0202010103ff03cc01010202063500000602070006000704060107000600070406030100
+061800000604070006010700060107000601070006010700060401000000060407000601
+070006010700060107000601070006040100000006040700060107000601070006010700
+06010700060401000618000006040703060d010006180000060907020609010006180000
+060907020609010006fa0202010103ff03cc010102020636000006010706060107060602
+0100061a0000060307000601070006010700060107000601070006030100060100000603
+070006010700060107000601070006010700060301000601000006030700060107000601
+0700060107000601070006030100061a00000603070906060100061a0000060807020608
+0100061a00000614010006fb0202010103ff03cc01010202063500000602070006000702
+060507000600070206030100061800000604070006010700060107000601070006010700
+060401000000060407000601070006010700060107000601070006040100000006040700
+060107000601070006010700060107000604010006180000060507070608010006180000
+060807040608010006180000060907020609010006fa0202010103ff03cc010102020636
+00000601070006000702060507000600070206020100061a000006030700060107000601
+070006010700060107000603010006010000060307000601070006010700060107000601
+07000603010006010000060307000601070006010700060107000601070006030100061a
+00000606070406080100061a00000606070606060100061a0000060807020608010006fb
+0202010103ff03cc01010202063500000602070406050704060301000618000006160100
+000006160100000006160100061800000616010006180000061601000618000006160100
+06fa0202010103ff03cc010102020636000006140100061a000006140100060100000614
+01000601000006140100061a000006140100061a000006140100061a00000614010006fb
+0202010103ff03cc01010202063500000616010006180000061601000000061601000000
+0616010006180000061601000618000006160100061800000616010006fa0202010103ff
+03cc010102020636000006140100061a0000061401000601000006140100060100000614
+0100061a000006140100061a000006140100061a00000614010006fb0202010103ff03cc
+010102020635000006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006180000060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+000006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010000000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000618000006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006180000060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100061800000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+0600010006fa0202010103ff03cc01010202063601000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100061a01000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060101000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060101000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100061a01000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100061a01000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100061a01000600010006000100060001000600
+01000600010006000100060001000600010006000100060001000600010006fb02020101
+03ff03cc0101020206ff06ff06430202010103ff03cc0101020206ff06ff064302020101
+0303000a01ff01b0000a03010101020206ff06ff064302020101030300000208050001ff
+01b000000208050003010101020206ff06ff064302020101030300000208050002ff02b0
+00000208050003010101020206ff06ff064302020101030300000208050002ff02b00000
+0208050003010101020206ff06ff064302020101030300000202050602ff02b000000505
+0202050003010101020206ff06ff06430202010103030000020205000209000d02ff02a4
+00000202050003010101020206ff06ff064302020101030300000202050002080000020d
+0500029001030211010302330101021501010206010102a1000002020500030101010202
+06ff06ff064302020101030300000202050002080000020d050002900101020201070200
+01010203010102010101020e010302200101020c0103020401010206010102110100028e
+00000202050003010101020206ff06ff064302020101030300000202050002080000020d
+05000290010102050101020301010203010102010101020d010102010101021f0101020b
+0101020101010203010102190101028e00000202050003010101020206ff06ff06430202
+010103030000020205000208000002020506020305000290010102050101020301010203
+010102010101020d01010206010302030103020201010200010102010103020201010200
+01010207010102030101020201010200010102030101020201030203010302000104028c
+000002020500030101010202060301ff01ff013b06030202010103030000050302080000
+0202050004040000020305000290010102050101020401010202010002020101020d0102
+020401010201010102010101020101010201010102000101020001010201010102010102
+020001010206010102030101020201020200010102020101020101010201010102010101
+0201010102000101028e000005030301010102020603010006ff06ff0625010006000000
+060000000600000006000000060000000600000006000000060000000600000006000100
+06030202010103030101020b000002030500040200000204050002900101020501010204
+01010201010102020101020e010302020101020101010205010102010102020201010205
+010102010101020601010203010102020101020101010202010102010101020101010201
+010102040101029101010301010102020603010006ff06ff062501000000060000000600
+000006000000060000000600000006000000060000000600000006000101060302020101
+03030101020b000002030500040200000204050002900101020501010205010102000100
+020301010210010202010105020201040201010102030101020501010201010102060101
+020301010202010102010101020201010201010502010101020401010291010103010101
+02020603010006010dff0dff0d210601010006000000060e010006000100060302020101
+03030101020b000002040500040000000205050002900101020501010205010302030101
+021101010201010102050101020101010201010102030101020501010201010102060101
+020301010202010102010101020201010201010102050101020401010291010103010101
+02020603010006010dff0dff0d2000000601010000000610010106030202010103030101
+020b000002040500040000000205050002900101020501010206010102040101020d0101
+020101010201010102020100020101010201010102010101020301010202010002010101
+020101010207010102010101020301010201010102020101020101010202010002010101
+0202010002000101029101010301010102020603010006010d0100ff00ff001f06010100
+06000000060e01000600010006030202010103030101020b000002050000020605000290
+0101020501010206010102040101020e0103020301030203010202000101020001010204
+01030202010102010101020801030204010402030101020201030203010302020102028f
+01010301010102020603010006010d0100ff00ff001f0601010000000610010106030202
+010103030101020b0000020d050002900103021101030254010102a40101030101010202
+0603010006010d0100ff00ff001f0601010006000000060e010006000100060302020101
+03030101020b0000020d050002fd010202a501010301010102020603010006010d0100ff
+00ff001f0601010000000610010106030202010103030101020b0000020d050002ff02a6
+01010301010102020603010006010d0100ff00ff001f0601010006000000060e01000600
+010006030202010103030101020c050d02ff02a701010301010102020603010006010d01
+00ff00ff001f0601010000000602010a060201010603020201010303010102ff02c20101
+0301010102020603010006010d0100ff00ff001f06010100060000000602010806020100
+060001000603020201010303010102ff02c201010301010102020603010006010d0100ff
+00ff001f06010100000006040106060401010603020201010303010102ff02c201010301
+010102020603010006010d0100ff00ff001f060101000600000006040104060401000600
+01000603020201010303010102ff02c201010301010102020603010006010d0100ff00ff
+001f06010100000006060102060601010603020201010303010102ff02c2010103010101
+02020603010006010d0100ff00ff001f0601010006000000060601000606010006000100
+06030202010103030101020206ff06bc020201010301010102020603010006010d0100ff
+00ff001f0601010000000610010106030202010103030101020206ff06bc020201010301
+010102020603010006010d0100ff00ff001f0601010006000000060e0100060001000603
+0202010103030101020206ff06bc020201010301010102020603010006010d0100ff00ff
+001f0601010000000610010106030202010103030101020206ff06bc0202010103010101
+02020603010006010d0100ff00ff001f0601010006000000060e01000600010006030202
+010103030101020206ff06bc020201010301010102020603010006010d0100ff00ff001f
+0601010000000610010106030202010103030101020206ff06bc02020101030101010202
+0603010006010d0100ff00ff001f0601010006000000060e010006000100060302020101
+03030101020206ff06bc020201010301010102020603010006010d0000ff00ff00200601
+010000000610010106030202010103030101020206ff06bc020201010301010102020603
+010006ff06ff062501000600000006000100060001000600010006000100060001000600
+010006000100060001000600010006030202010103030101020206ff06bc020201010301
+010102020603010006ff06ff062501000000060001000600010006000100060001000600
+01000600010006000100060001000600010106030202010103030101020206ff06bc0202
+0101030101010202060301ff01ff013b0603020201010303010102020608000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006080202010103010101020206ff06ff
+064302020101030301010202060700000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600010006070202010103010101020206ff06ff064302020101030301010202
+0608000006ff06a8010006080202010103010101020206ff06ff06430202010103030101
+02020607000006ff06aa010006070202010103010101020206ff06ff0643020201010303
+010102020608000006ff06a8010006080202010103010101020206ff06ff064302020101
+0303010102020607000006ff06aa010006070202010103010101020206ff06ff06430202
+01010303010102020608000006ff06a8010006080202010103010101020206ff06ff0643
+020201010303010102020607000006ff06aa010006070202010103010101020206ff06ff
+0643020201010303010102020608000006ff06a8010006080202010103010101020206ff
+06ff0643020201010303010102020607000006ff06aa0100060702020101030101010202
+06ff06ff0643020201010303010102020608000006ff06a8010006080202010103010101
+020206ff06ff0643020201010303010102020607000006ff06aa01000607020201010301
+0101020206ff06ff0643020201010303010102020608000006ff06a80100060802020101
+03010101020206ff06ff0643020201010303010102020607000006ff0649000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+06000000060000000611010006070202010103010101020206ff06ff0643020201010303
+010102020608000006ff0647000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006110100060802020101
+03010101020206ff06ff0643020201010303010102020607000006ff06490000064c0100
+0611010006070202010103010101020206ff06ff06430202010103030101020206080000
+06ff06470000064c01000611010006080202010103010101020206ff06ff064302020101
+03030101020206070000060d0102061e0100060f010106ff06060000064c010006110100
+06070202010103010101020206ff06ff06430202010103030101020206080000060b0100
+06020100061d0100060e010006ff06070000064c01000611010006080202010103010101
+020206ff06ff06430202010103030101020206070000060c010006060102060301020602
+010006000101060301020602010006000101060b01000604010206020100060001010604
+010106f20000064c01000611010006070202010103010101020206ff06ff064302020101
+03030101020206080000060c010006040100060201000601010006020100060101010601
+010006010100060201000601010106010100060801040601010006020100060101010601
+01000603010106f10000064c010006110100060802020101030101010202060301ff01ff
+013b06030202010103030101020206070000060e01010602010006020100060501000601
+0100060501000605010006020100060a010006030100060201000601010006fc0000064c
+0100061101000607020201010301010102020603010006ff06ed0100064a010006030202
+010103030101020206080000060f01000601010406020103060101000605010006050100
+06020100060a010006030100060201000601010006fb000006120102061e010006160100
+06110100060802020101030101010202060301000663010506ff06830100064a01000603
+0202010103030101020206070000060c0100060201000601010006050100060201000601
+0100060501000605010006020100060a010006030100060201000601010006fc00000610
+010006020100061d01000617010006110100060702020101030101010202060301000662
+010706ff06820100064a010006030202010103030101020206080000060b010006020100
+060101000602010006010100060201000601010006050100060201000601010006020100
+060a01000603010006020100060101000607010106f10000061101000606010206030102
+060201000600010106030102060201000600010106130100061101000608020201010301
+0101020206030100066101020603010206ff06810100064a010006030202010103030101
+020206070000060d0102060301020603010306010100060601020602010006020100060a
+010006040102060201000607010106f20000061101000604010006020100060101000602
+010006010101060101000601010006020100060101010601010006130100061101000607
+0202010103010101020206030100066101010605010106ff06810100064a010006030202
+01010303010102020608000006ff06470000061301010602010006020100060501000601
+010006050100060501000602010006120100061101000608020201010301010102020603
+0100066101020603010206ff06810100064a010006030202010103030101020206070000
+06ff06490000061401000601010406020103060101000605010006050100060201000613
+010006110100060702020101030101010202060301000662010706ff06820100064a0100
+0603020201010303010102020608000006ff064700000611010006020100060101000605
+010006020100060101000605010006050100060201000612010006110100060802020101
+030101010202060301000663010506ff06830100064a0100060302020101030301010202
+0607000006ff064900000610010006020100060101000602010006010100060201000601
+010006050100060201000601010006020100061301000611010006070202010103010101
+0202060301000665010106ff06850100064a010006030202010103030101020206080000
+06ff06470000061201020603010206030103060101000606010206020100060201000612
+010006110100060802020101030101010202060301000665010106ff06850100064a0100
+0603020201010303010102020607000006ff06490000064c010006110100060702020101
+030101010202060301000665010106ff06850100064a0100060302020101030301010202
+0608000006ff06470000064c010006110100060802020101030101010202060301000665
+010106ff06850100064a01000603020201010303010102020607000006ff06490000064c
+010006110100060702020101030101010202060301000665010106ff06850100064a0100
+0603020201010303010102020608000006ff06470000064c010006110100060802020101
+030101010202060301000665010106ff06850100064a0100060302020101030301010202
+06070000060b0dff0d2806140000064c0100061101000607020201010301010102020603
+0100066101010600010206ff06850100064a010006030202010103030101020206080000
+060a0dff0d27000006130000064c01000611010006080202010103010101020206030100
+066101010600010206ff06850100064a010006030202010103030101020206070000060b
+0d0100ff002606140000064c010006110100060702020101030101010202060301000661
+010506ff06850100064a010006030202010103030101020206080000060a0d0100ff0026
+06130000064c010006110100060802020101030101010202060301000661010506ff0685
+0100064a010006030202010103030101020206070000060b0d0100ff002606140000064c
+01000611010006070202010103010101020206030100066101020600010106ff06850100
+064a010006030202010103030101020206080000060a0d0100ff002606130000064c0100
+061101000608020201010301010102020603010006ff06ed0100064a0100060302020101
+03030101020206070000060b0d0100ff0026061400000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000611
+0100060702020101030101010202060301ff01ef064a0100060302020101030301010202
+06080000060a0d0100ff0026061300000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000611010006080202
+010103010101020206030100063513610c04060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+0000060000000600000006000000060000000600000006000000060000000c0406000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+06000000060000000c040600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000c04060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000001000614010006000100060001000600
+010006000100060001000600010006000100060001000624010006030202010103030101
+020206070000060b0d01001f010000ff0005067501000607020201010301010102020603
+01000635136012000c030100000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+0000060000000600000006000000060000000600000006000c0301000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000c03010000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+00000600000006000000060000000600000006000c030100000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060001000613010006000100060001000600
+010006000100060001000600010006000100060001000600000006230100060302020101
+03030101020206080000060a0d01001d0100000001000000010000ff0003067401000608
+020201010301010102020603010006351301115d12010c01010206000000065c01000c01
+010206000000065c01000c01010206000000065c01000c01010206000000061f01000614
+0100040e00000624010006030202010103030101020206070000060b0d01000101000002
+01000002010200030102000301020003010200ff00040675010006070202010103010101
+02020603010006351301112c0100112f12010c0101020000062b0102062d010006000c01
+01020000062b0102062d010006000c0101020000062d0100062d010006000c0101020000
+06200100061301000600040e060000000623010006030202010103030101020206080000
+060a0d010001010000020100000101000002010000010100000201000001010000020100
+0002010200ff0004067401000608020201010301010102020603010006351301112a0102
+112f12010c010102060000000629010006020100062d01000c0101020600000006290100
+06020100062d01000c01010206000000062b0101062e01000c01010206000000061f0100
+06140100040e00000624010006030202010103030101020206070000060b0d0100010100
+0002010000050100000101000009010000010100000001000000010000ff000306750100
+0607020201010301010102020603010006351301112c0100112f12010c0101020000062a
+010006020100062c010006000c0101020000062e0100062c010006000c0101020000062b
+010006000100062d010006000c010102000006200100061301000600040e060000000623
+010006030202010103030101020206080000060a0d010002010000000100000301030002
+0102000301030003010000ff000506740100060802020101030101010202060301000635
+1301112c0100112f12010c010102060000000629010006020100062d01000c0101020600
+0000062d0100062d01000c01010206000000062a010006000100062e01000c0101020600
+0000061f010006140100040e00000624010006030202010103030101020206070000060b
+0d010002010000000100000201000002010000050100000101000002010000ff000a0675
+01000607020201010301010102020603010006351301112c0100112f12010c0101020000
+062d0100062d010006000c0101020000062c0101062d010006000c0101020000062a0100
+06010100062d010006000c010102000006200100061301000600040e0600000006230100
+06030202010103030101020206080000060a0d0100030100000301000002010000010100
+00020100000101000002010000ff000a0674010006080202010103010101020206030100
+06351301112c0100112f12010c01010206000000062b0100062f01000c01010206000000
+062d0100062d01000c010102060000000628010006020100062e01000c01010206000000
+061f010006140100040e00000624010006030202010103030101020206070000060b0d01
+0003010000040103000201020003010300ff000a06750100060702020101030101010202
+0603010006351301112c0100112f12010c0101020000062b0100062f010006000c010102
+0000062e0100062c010006000c010102000006290105062c010006000c01010200000620
+0100061301000600040e060000000623010006030202010103030101020206080000060a
+0d0100ff0026067401000608020201010301010102020603010006351301112c0100112f
+12010c010102060000000629010006020100062d01000c01010206000000062901000602
+0100062d01000c01010206000000062c0100062e01000c01010206000000061f01000614
+0100040e00000624010006030202010103030101020206070000060b0d0100ff00260614
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006110100060702020101030101010202060301000635
+1301112a0104112d12010c0101020000062a0104062c010006000c0101020000062b0102
+062d010006000c0101020000062c0102062c010006000c01010200000620010006130100
+0600040e060000000623010006030202010103030101020206080000060a0d0100ff0026
+061300000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000611010006080202010103010101020206030100
+06351301115d12010c01010206000000065c01000c01010206000000065c01000c010102
+06000000065c01000c01010206000000061f010006140100040e00000624010006030202
+010103030101020206070000060b0d0100ff002606140000064c01000611010006070202
+01010301010102020603010006351301115d12010c0101020000065c010006000c010102
+0000065c010006000c0101020000065c010006000c010102000006200100061301000600
+040e060000000623010006030202010103030101020206080000060a0d0100ff00260613
+0000064c0100061101000608020201010301010102020603010006351301115d12010c01
+010206000000065c01000c01010206000000065c01000c01010206000000065c01000c01
+010206000000061f010006140100040e0000062401000603020201010303010102020607
+0000060b0d0100ff002606140000064c0100061101000607020201010301010102020603
+010006351301115d12010c0101020000065c010006000c0101020000065c010006000c01
+01020000065c010006000c010102000006200100061301000600040e0600000006230100
+06030202010103030101020206080000060a0d0100ff002606130000064c010006110100
+0608020201010301010102020603010006351301115d12010c01010206000000065c0100
+0c01010206000000065c01000c01010206000000065c01000c01010206000000061f0100
+06140100040e00000624010006030202010103030101020206070000060b0d0100ff0026
+06140000064c0100061101000607020201010301010102020603010006351301115d1201
+0c0101020000065c010006000c0101020000065c010006000c0101020000065c01000600
+0c010102000006200100061301000600040e060000000623010006030202010103030101
+020206080000060a0d0000ff002706130000064c01000611010006080202010103010101
+02020603010006351301125f0c0101020600000006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000c01010206000000
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+06000100060001000c010102060000000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+0600010006000100060001000600010006000100060001000c0101020600000006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+06000100060001000600010006000100060001000600010106140100040e000006240100
+0603020201010303010102020607000006ff06490000064c010006110100060702020101
+030101010202060301000635130012600c00010300000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+01000600010006000100060001000600010006000100060001000600010006000c000103
+000006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+0100060001000600010006000c0001030000060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000c00010300000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100061301000600
+040e06000000062301000603020201010303010102020608000006ff0647000006120102
+061f01020613010006110100060802020101030101010202060301001036006301000063
+010000630100006301000022010006140100040e00000624010006030202010103030101
+02020607000006ff06490000061001000602010006200100061401000611010006070202
+01010301010102020603010010350f000063010000630100006301000063010000220100
+061301000600040e06000000062301000603020201010303010102020608000006ff0647
+000006110100060201000602010206020100060001010603010206030102060501000613
+01000611010006080202010103010101020206030100100108320f010063010000630100
+00630100006301000022010006140100040e000006240100060302020101030301010202
+0607000006ff064900000610010006050100060201000601010106010100060101000602
+010006010100060201000604010006140100061101000607020201010301010102020603
+0100100108320f010063010000630100006301000063010000220100061301000600040e
+06000000062301000603020201010303010102020608000006ff06470000061101000609
+010006010100060201000601010006050100060201000604010006130100061101000608
+020201010301010102020603010010010815010408170f01006301000063010000630100
+006301000022010006140100040e00000624010006030202010103030101020206070000
+06ff06490000061001000606010306010100060201000601010006050104060401000614
+010006110100060702020101030101010202060301001001081501000802010008170f01
+000a0100001a01010004010000340100002c010000350100006301000063010000220100
+061301000600040e06000000062301000603020201010303010102020608000006ff0647
+000006110100060201000601010006020100060101000602010006010100060501000608
+010006130100061101000608020201010301010102020603010010010818010008180f01
+00250100003c0100002c01000035010000630100006301000022010006140100040e0000
+062401000603020201010303010102020607000006ff0649000006100100060201000601
+010006020100060101000602010006010100060201000601010006020100060401000614
+0100061101000607020201010301010102020603010010010818010008180f0100080102
+000301020003010200030102000401000004010200020100000001010003010200260100
+000701000002010000020102000301020003010200030102000201040002010200020100
+0000010100260100006301000063010000220100061301000600040e0600000006230100
+0603020201010303010102020608000006ff064700000612010206030103060101000602
+010006020102060301020605010006130100061101000608020201010301010102020603
+010010010818010008180f01000a01000002010000020100000101000002010000010100
+000201000001010400040100000201010001010000010100000201000025010000070100
+000201000001010000020100000101000002010000010100000201000001010000020100
+000301000003010000020100000101010001010000250100006301000063010000220100
+06140100040e0000062401000603020201010303010102020607000006ff06490000064c
+0100061101000607020201010301010102020603010010010818010008180f01000a0100
+000201000002010000010100000501000002010000030100000601000002010000020100
+000101000002010000250100000701000002010000050100000101000009010000010100
+000701000007010000010100000201000025010000630100006301000022010006130100
+0600040e06000000062301000603020201010303010102020608000006ff06470000064c
+0100061101000608020201010301010102020603010010010817010008190f01000a0100
+000201000002010000020102000201040003010000060100000201000002010000010104
+002501000008010000000100000301030002010200030103000201020004010000040103
+00010100000201000025010000630100006301000022010006140100040e000006240100
+0603020201010303010102020607000006ff06490000064c010006110100060702020101
+0301010102020603010010010817010008190f01000a0100000201000002010000050100
+000101000007010000060100000201000002010000010100002901000008010000000100
+000201000002010000050100000101000002010000050100000301000003010000020100
+000101000002010000250100006301000063010000220100061301000600040e06000000
+062301000603020201010303010102020608000006ff06470000064c0100061101000608
+020201010301010102020603010010010817010008190f01000a01000002010000020100
+000101000002010000010100000201000003010000060100000201000002010000010100
+000201000025010000090100000301000002010000010100000201000001010000020100
+000101000002010000030100000301000002010000010100000201000025010000630100
+006301000022010006140100040e00000624010006030202010103030101020206070000
+06ff06490000064c01000611010006070202010103010101020206030100100108320f01
+000a01000003010200030102000301020004010000060100000201000002010000020102
+002601000009010000040103000201020003010300020102000501010002010300010100
+0002010000250100006301000063010000220100061301000600040e0600000006230100
+0603020201010303010102020608000006ff06470000064c010006110100060802020101
+03010101020206030100100108320f01000a010000570100006301000063010000630100
+0022010006140100040e0000062401000603020201010303010102020607000006ff0649
+0000064c01000611010006070202010103010101020206030100100108320f0100070100
+000101000057010000630100006301000063010000220100061301000600040e06000000
+062301000603020201010303010102020608000006ff06470000064c0100061101000608
+0202010103010101020206030100100108320f0100080101005801000063010000630100
+006301000022010006140100040e00000624010006030202010103030101020206070000
+062200000663010006c00000064c01000611010006070202010103010101020206030100
+100108320f010063010000630100006301000063010000220100061301000600040e0600
+00000623010006030202010103030101020206080000062000000600000006230100063c
+010006000100063e0102064b0100062f0000064c01000611010006080202010103010101
+020206030100100108320f01006301000063010000630100006301000022010006140100
+040e00000624010006030202010103030101020206070000062000000600000006000000
+06220100063b01000600010006000100063f0100067d0000060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+061101000607020201010301010102020603010010010f34006301000063010000630100
+0063010000220100061301000600040e0600000006230100060302020101030301010202
+06080000061e00000602000006000000060b010206030102060901040602010206020100
+0600010106020101060001000624010006000a01010006000100060b0102060301020609
+010006000101060301020603010106000100060101000602010006040100060301020602
+010006000101060a01020602010006020100060101000600010106020100060001010603
+010206030102060301020603010206030102060201000600010106210000060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100061101000608020201010301010102020603010010000f3501ff01b70614
+0100040e00000624010006030202010103030101020206070000061e0000060400000600
+000006090100060201000601010006020100060a01000603010006020100060101010601
+01000601010006000100060001000622010006000a030100060001000609010006020100
+060101000602010006080101060101000601010006020100060101000601010106010100
+060201000604010006020100060201000601010106010100060801000602010006010100
+060201000601010106010100060101010601010006010100060201000601010006020100
+060101000602010006040100060201000602010006010101060101000682010006070202
+0101030101010202060301000e3600630100006301000063010000630100002201000613
+01000600040e060000000623010006030202010103030101020206080000061c00000606
+000006000000060c010006010100060e0100060301000602010006010100060501000600
+0100060001000621010006000a05010006000100060c010006010100060c010006050100
+0602010006010100060201000601010006020100060401000606010006010100060c0100
+060201000602010006000100060201000602010006010100060501000602010006010100
+060501000608010006020100060201000601010006020100068101000608020201010301
+01010202060301000e350b00006301000063010000630100006301000022010006140100
+040e00000624010006030202010103030101020206070000061c01000608010006000100
+0608010306020102060b0100060301040601010006050100060001000600010006200000
+06000a070000060000000608010306020102060901000605010406010100060201000601
+010006020100060401000603010306010100060c01040603010006030100060201000601
+010006050104060201020603010206050100060201000602010006010100060201000682
+0100060702020101030101010202060301000e0109320b01006301000063010000630100
+0063010000220100061301000600040e0600000006230100060302020101030301010202
+06080000061c01000606010006000100060801000602010006050100060a010006030100
+060501000605010006000100060001000621000006000a05000006000000060801000602
+010006050100060801000605010006050100060201000601010006020100060401000602
+01000602010006010100060c010006060100060001000602010006020100060101000605
+010006090100060501000604010006020100060201000601010006020100068101000608
+02020101030101010202060301000e0109320b0100630100006301000063010000630100
+0022010006140100040e00000624010006030202010103030101020206070000061e0100
+060401000600010006090100060201000601010006020100060a01000603010006020100
+060101000605010006000100060001000622000006000a03000006000000060901000602
+010006010100060201000608010006050100060201000601010006010101060101000601
+010106040100060201000602010006010100060c01000602010006010100060201000601
+010106010100060101000605010006020100060101000602010006010100060201000604
+010006020100060201000601010006020100068201000607020201010301010102020603
+01000e010916010209180b01006301000063010000630100006301000022010006130100
+0600040e060000000623010006030202010103030101020206080000061e010006020100
+06000100060b010306020102060c01010602010206020100060501000600010006000100
+0623000006000a01000006000000060b0103060201020609010006060102060301010600
+01000602010106000100060401000603010306010100060d010206020100060201000601
+010006000101060201000606010206030102060301020605010006030102060201000602
+010006810100060802020101030101010202060301000e01091501000902010009170b01
+000701000016010000420100000701000006010200100100000c01000030010000630100
+006301000022010006140100040e00000624010006030202010103030101020206070000
+062001000600010006000100065f00000600000006000000063201000632010006b70100
+060702020101030101010202060301000e01091501000902010009170b0100070100005a
+0100000701000008010000100100000c0100003001000063010000630100002201000613
+01000600040e060000000623010006030202010103030101020206080000062001000600
+01000661000006000000062f0100060201000632010006b6010006080202010103010101
+0202060301000e01091501000902010009170b0100070100000101000003010200020100
+00000101000301020002010000000101003b010000070100000001010005010000030102
+000301020002010000010100000301020002010000000101000301020002010000000101
+00030101000001000017010000630100006301000022010006140100040e000006240100
+060302020101030301010202060700000622010006630000063101020633010006b70100
+060702020101030101010202060301000e010916010209180b0100070100000001000003
+0100000201000001010100010100000401000002010100010100003a0100000701010001
+010000040100000201000002010000010100000201000001010000000100000301000002
+010000010101000101000001010000020100000101010001010000010100000101010017
+0100006301000063010000220100061301000600040e0600000006230100060302020101
+0303010102020608000006ff06a80100060802020101030101010202060301000e010915
+01000902010009170b01000701010008010000010100000801000002010000020100003a
+010000070100000201000004010000060100000101000005010100040100000201000001
+010000020100000101000002010000010100000501000002010000170100006301000063
+01000022010006140100040e0000062401000603020201010303010102020607000006ff
+06aa0100060702020101030101010202060301000e01091501000902010009170b010007
+01010005010300010100000801000002010000020100003a010000070100000201000004
+010000030103000101000005010100040104000101000002010000010104000101000005
+01000002010000170100006301000063010000220100061301000600040e060000000623
+01000603020201010303010102020608000006ff06a80100060802020101030101010202
+060301000e01091501000902010009170b01000701000000010000030100000201000001
+0100000801000002010000020100003a0100000701000002010000040100000201000002
+010000010100000501000000010000030100000501000002010000010100000501000005
+0100000201000017010000630100006301000022010006140100040e0000062401000603
+020201010303010102020607000006ff06aa010006070202010103010101020206030100
+0e010916010209180b010007010000010100000201000002010000010100000801000002
+010000020100003a01000007010100010100000401000002010000020100000101000002
+010000010100000101000002010000020100000101010001010000010100000201000001
+0100000501000001010100170100006301000063010000220100061301000600040e0600
+0000062301000603020201010303010102020608000006ff06a801000608020201010301
+01010202060301000e0109320b0100070100000201000002010300010100000801000002
+010000020100003a01000007010000000101000501000003010300020102000201000002
+010000020102000201000000010100030102000201000006010100000100001701000063
+0100006301000022010006140100040e0000062401000603020201010303010102020607
+000006ff06aa0100060702020101030101010202060301000e0109320b0100630100004a
+010000170100006301000063010000220100061301000600040e06000000062301000603
+020201010303010102020608000006ff06a8010006080202010103010101020206030100
+0e0109320b01006301000046010000020100001701000063010000630100002201000614
+0100040e0000062401000603020201010303010102020607000006ff06aa010006070202
+0101030101010202060301000e0109320b01006301000047010200180100006301000063
+010000220100061301000600040e06000000062301000603020201010303010102020608
+000006ff06a80100060802020101030101010202060301000e0109320b01006301000063
+010000630100006301000022010006140100040e00000624010006030202010103030101
+02020607000006ff06aa0100060702020101030101010202060301000e0109320b010063
+010000630100006301000063010000220100061301000600040e06000000062301000603
+020201010303010102020608000006ff06a8010006080202010103010101020206030100
+0e010b34006301000063010000630100006301000022010006140100040e000006240100
+060302020101030301010202060700000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+0600010006000100060702020101030101010202060301000e000b3501ff01b706130100
+0600040e0600000006230100060302020101030301010202060801000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+06000100060001000600010006000100060802020101030101010202060301000c360063
+01000063010000630100006301000022010006140100040e000006240100060302020101
+03030101020206ff06bc02020101030101010202060301000c3501000063010000630100
+006301000063010000220100061301000600040e06000000062301000603020201010303
+0101020206ff06bc02020101030101010202060301000c01013400630100006301000063
+0100006301000022010006140100040e00000624010006030202010103030101020206ff
+06bc02020101030101010202060301000c01013400630100006301000063010000630100
+00220100061301000600040e060000000623010006030202010103030101020206ff06bc
+02020101030101010202060301000c0101160002011a0063010000630100006301000063
+01000022010006140100040e00000624010006030202010103030101020206ff06bc0202
+0101030101010202060301000c010115000001020000011900070100000e010000140100
+00340100002b010200340100006301000063010000220100061301000600040e06000000
+0623010006030202010103030101020206ff06bc02020101030101010202060301000c01
+0115000001020000011900070100000e0100004a0100002d010000340100006301000063
+01000022010006140100040e00000624010006030202010103030101020206ff06bc0202
+0101030101010202060301000c0101150000010200000119000701000001010000030102
+000201040002010200020100000001010003010200020100000001010003010200260100
+000701000002010000010100000001010002010000000101000301020003010200050100
+00030102002d0100006301000063010000220100061301000600040e0600000006230100
+06030202010103030101020206ff06bc02020101030101010202060301000c0101150000
+010200000119000701000000010000030100000201000003010000030100000201000001
+010100010100000401000002010100010100000101000002010000250100000701000002
+010000010101000101000001010100010100000101000002010000010100000201000004
+01000002010000020100002c010000630100006301000022010006140100040e00000624
+010006030202010103030101020206ff06bc02020101030101010202060301000c010116
+000301190007010100080100000301000007010000010100000801000002010000020100
+000501000025010000070100000201000001010000020100000101000002010000010100
+000901000004010000060100002c0100006301000063010000220100061301000600040e
+060000000623010006030202010103030101020206ff06bc020201010301010102020603
+01000c010119000001190007010100050103000301000004010300010100000801000002
+010000020100000201030025010000070100000201000001010000020100000101000002
+010000020102000301030004010000030103002c01000063010000630100002201000614
+0100040e00000624010006030202010103030101020206ff06a101000600010006000100
+060001000600010006000100060001000600010006000100060902020101030101010202
+060301000c0101180000011a000701000000010000030100000201000003010000030100
+000201000001010000080100000201000002010000010100000201000025010000070100
+000201000001010000020100000101000002010000050100000101000002010000040100
+0002010000020100002c0100006301000063010000220100061301000600040e06000000
+0623010006030202010103030101020206ff06a001000600010006000100060001000600
+010006000100060001000600010006000100060000000608020201010301010102020603
+01000c0101150002011b0007010000010100000201000002010000030100000301000002
+010000010100000801000002010000020100000101000002010000250100000701000001
+010100010101000101000001010100010100000101000002010000010100000201000004
+01000002010000020100002c010000630100006301000022010006140100040e00000624
+010006030202010103030101020206070dff0d9606020100060601000606000006090202
+0101030101010202060301000c0101340007010000020100000201030004010100020103
+000101000008010000020100000201000002010300250100000801010000010000010100
+00000101000201000000010100030102000301030004010000030103002c010000630100
+0063010000220100061301000600040e0600000006230100060302020101030301010202
+06070dff0d95000006010100060600000608000006080202010103010101020206030100
+0c01013400630100000e010000050100004c010000630100006301000022010006140100
+040e00000624010006030202010103030101020206070d0100ff00940602010006060100
+06060000060902020101030101010202060301000c01013400630100000e010000050100
+004c0100006301000063010000220100061301000600040e060000000623010006030202
+010103030101020206070d0100580101006a010100cc0601010006060000060001000606
+0000060802020101030101010202060301000c01013400630100000e010000050100004c
+010000630100006301000022010006140100040e00000624010006030202010103030101
+020206070d0100570100006e010000cb0602010006040000060201000604000006090202
+0101030101010202060301000c0101340063010000630100006301000063010000220100
+061301000600040e060000000623010006030202010103030101020206070d01000f0103
+00180102002701000020010200050100002e01000013010000cb06010100060400000602
+010006060000060802020101030101010202060301000c01013400630100006301000063
+0100006301000022010006140100040e0000062401000603020201010303010102020607
+0d01000f01000002010000160100000201000026010000220100003501000013010000cb
+06020100060400000602010006040000060902020101030101010202060301000c010134
+0063010000630100006301000063010000220100061301000600040e0600000006230100
+06030202010103030101020206070d01000f010000020100000201020002010000020100
+000c01000003010100200100000401020002010000000101000201000000010100030102
+000501000003010200090100000201000002010200030102000301020003010200020104
+0002010200020100000001010004010000cb060101000604000006040100060400000608
+02020101030101010202060301000c0001ff01ed06140100040e00000624010006030202
+010103030101020206070d01000f01000002010000010100000201000001010000020100
+000c01000003010100200100000301000002010000010101000101000001010100010100
+000101000002010000040100000501000009010000020100000101000002010000010100
+000201000001010000020100000101000002010000030100000301000002010000010101
+000101000003010000cb0602010006020000060601000602000006090202010103010101
+0202060301000e360063010000630100006301000063010000220100061301000600040e
+060000000623010006030202010103030101020206070d01000f01030002010000020100
+000101000000010000000100000b01000025010100080100000101000002010000010100
+000201000001010000020100000401000005010000090100000201000005010000010100
+0009010000010100000701000007010000010100000201000004010100c9060101000602
+00000606010006040000060802020101030101010202060301000e350b00006301000063
+010000630100006301000022010006140100040e00000624010006030202010103030101
+020206070d01000f0100000101000002010000020100000101000000010000000100000a
+010000280100000401030001010000020100000101000002010000010104000401000005
+0100000a0100000001000003010300020102000301030002010200040100000401030001
+0100000201000003010000cb060201000602000006060100060200000609020201010301
+01010202060301000e0109320b0100630100006301000063010000630100002201000613
+01000600040e060000000623010006030202010103030101020206070d01000f01000002
+010000010100000201000001010000000100000001000009010000290100000301000002
+010000010100000201000001010000020100000101000008010000050100000a01000000
+010000020100000201000005010000010100000201000005010000030100000301000002
+010000010100000201000003010000cb0601010006020000060801000602000006080202
+0101030101010202060301000e0109320b01006301000063010000630100006301000022
+010006140100040e00000624010006030202010103030101020206070d01000f01000002
+010000010100000201000001010000000100000001000008010000070101002001000003
+010000020100000101000002010000010100000201000001010000020100000401000005
+010000040101000401000003010000020100000101000002010000010100000201000001
+01000002010000030100000301000002010000010100000201000003010000cb06020100
+06000000060a010006000000060902020101030101010202060301000e01091301000904
+010209150b010063010000630100006301000063010000220100061301000600040e0600
+00000623010006030202010103030101020206070d01000f010000020100000201020003
+010000000100000901040003010100200100000401030001010000020100000101000002
+010000020102000501000005010000040101000401000004010300020102000301030002
+0102000501010002010300010100000201000003010000cb060101000600000006000100
+060001000600010006000100060001000600010006020000060802020101030101010202
+060301000e0109110102090301000902010009140b010063010000320102002d01000063
+0100006301000022010006140100040e0000062401000603020201010303010102020607
+0d010057010000300100003c010000cb0602010006000100060001000600010006000100
+06000100060001000600010006000000060902020101030101010202060301000e010913
+0100090301000902010009140b010063010000340100002d010000630100006301000022
+0100061301000600040e060000000623010006030202010103030101020206070d010058
+0101002c0101003b010100cc060101000610000006080202010103010101020206030100
+0e0109130100090301000902010009140b01000701010000010000030102000301010000
+010000010100000001010002010000020100000201020034010000070100000001010003
+010200020100000001010002010000000101000201010000010000030102000501000002
+0101000001000026010000630100006301000022010006140100040e0000062401000603
+0202010103030101020206070d0100ff0094060201000600000006000000060000000600
+000006000000060000000600000006000000060902020101030101010202060301000e01
+09130100090301000902010009140b010007010000000100000001000001010000020100
+000101000001010100010101000101000001010000020100000101000002010000330100
+000701010001010000010100000201000001010100010100000101010001010000010100
+000001000000010000010100000201000004010000020100000001000000010000250100
+006301000063010000220100061301000600000006000000060000000600000006000000
+060000000600000006000000060000000623010006030202010103030101020206070d01
+00ff00940601010006000000060000000600000006000000060000000600000006000000
+0600010006000000060802020101030101010202060301000e0109130100090301000902
+010009140b01000701000000010000000100000501000001010000020100000101000002
+010000010100000201000001010000370100000701000002010000010100000201000001
+010000050100000501000000010000000100000501000004010000020100000001000000
+010000250100006301000063010000220100061401000600000006000000060000000600
+000006000000060000000600000006000000062401000603020201010303010102020607
+0d0100ff00940602010006000000060a0100060000000609020201010301010102020603
+01000e0109130100090301000902010009140b0100070100000001000000010000020103
+000101000002010000010100000201000001010000020100000201020034010000070100
+000201000001010000020100000101000005010000050100000001000000010000020103
+000401000002010000000100000001000025010000630100006301000022010006130100
+06000000060c0100060000000623010006030202010103030101020206070d0100ff0094
+0601010006000000060c010006000000060802020101030101010202060301000e010913
+0100090301000902010009140b0100070100000001000000010000010100000201000001
+010000020100000101000002010000010100000201000005010000330100000701000002
+010000010100000201000001010000050100000501000000010000000100000101000002
+010000040100000201000000010000000100002501000063010000630100002201000614
+010006000000060a0100060000000624010006030202010103030101020206070d010058
+01010063010100d30602010006000000060a010006000000060902020101030101010202
+060301000e01091101040902010209150b01000701000000010000000100000101000002
+010000010100000101010001010000020100000101000001010100010100000201000033
+010000070100000201000001010000020100000101000005010000050100000001000000
+010000010100000201000004010000020100000001000000010000250100006301000063
+0100002201000613010006000000060c0100060000000623010006030202010103030101
+020206070d01005701000067010000d20601010006000000060c01000600000006080202
+0101030101010202060301000e0109320b01000701000000010000000100000201030002
+010100000100000101000002010000020101000001000002010200340100000701000002
+010000020102000201000005010000050100000001000000010000020103000401000002
+01000000010000000100002501000063010000630100002201000614010006000000060a
+0100060000000624010006030202010103030101020206070d01000f0103001801020027
+0100000d010000130100002e01000013010000d20602010006000000060a010006000000
+060902020101030101010202060301000e0109320b010019010000480100006301000063
+010000630100002201000613010006000000060c01000600000006230100060302020101
+03030101020206070d01000f010000020100001601000002010000260100005201000013
+010000d20601010006000000060c01000600000006080202010103010101020206030100
+0e0109320b01001501000002010000480100006301000063010000630100002201000614
+010006000000060a0100060000000624010006030202010103030101020206070d01000f
+010000020100000201020002010000020100000c01000003010100200100000401020003
+010200030102000301020003010200090100000201000002010200030102000301020003
+0102000201040002010200020100000001010004010000d20602010006000000060a0100
+06000000060902020101030101010202060301000e0109320b0100160102004901000063
+01000063010000630100002201000613010006000000060c010006000000062301000603
+0202010103030101020206070d01000f0100000201000001010000020100000101000002
+0100000c0100000301010020010000030100000201000004010000020100000201000001
+010000020100000401000009010000020100000101000002010000010100000201000001
+010000020100000101000002010000030100000301000002010000010101000101000003
+010000d20601010006000000060c01000600000006080202010103010101020206030100
+0e0109320b0100630100006301000063010000630100002201000614010006000000060a
+0100060000000624010006030202010103030101020206070d01000f0103000201000002
+0100000101000000010000000100000a0101002501010004010000080100000201000005
+010000080100000901000002010000050100000101000009010000010100000701000007
+010000010100000201000004010100d00602010006000000060a01000600000006090202
+0101030101010202060301000e0109320b01006301000063010000630100006301000022
+01000613010006000000060c010006000000062301000603020201010303010102020607
+0d01000f0100000101000002010000020100000101000000010000000100000c01000026
+01000003010000080100000201000005010000080100000a010000000100000301030002
+01020003010300020102000401000004010300010100000201000003010000d206010100
+06000000060c010006000000060802020101030101010202060301000e010b3400630100
+006301000063010000630100002201000614010006000000060a01000600000006240100
+06030202010103030101020206070d01000f010000020100000101000002010000010100
+0000010000000100000c0100002601000003010000080100000201000005010000080100
+000a01000000010000020100000201000005010000010100000201000005010000030100
+000301000002010000010100000201000003010000d20602010006000000060a01000600
+0000060902020101030101010202060301000e000b3501ff01b7060c0104060101000600
+0000060c0100060000000623010006030202010103030101020206070d01000f01000002
+010000010100000201000001010000000100000001000008010000020100000301010020
+010000030100000201000004010000020100000201000001010000020100000401000004
+010100040100000301000002010000010100000201000001010000020100000101000002
+010000030100000301000002010000010100000201000003010000d20601010006000000
+060c010006000000060802020101030101010202060301000e3600630100006301000063
+01000063010000220100060c0100060201000602010006000000060a0100060000000624
+010006030202010103030101020206070d01000f01000002010000020102000301000000
+0100000a0102000401010020010000040102000501000003010200030102000501000004
+010100040100000401030002010200030103000201020005010100020103000101000002
+01000003010000d20602010006000000060a010006000000060902020101030101010202
+060301000e350b0000630100006301000063010000630100002201000610010006010100
+060000000600010006000100060001000600010006000100060001000600010006000000
+0623010006030202010103030101020206070d010057010000290100003c010000d20601
+010006000000060c010006000000060802020101030101010202060301000e0109320b01
+0063010000630100006301000063010000220100060f0100060301000600000006000000
+060000000600000006000000060000000600000006000000062401000603020201010303
+0101020206070d010058010100250101003b010100d30602010006000000060a01000600
+0000060902020101030101010202060301000e0109320b01006301000063010000630100
+0063010000220100060f01000602010006000000060c0100060000000623010006030202
+010103030101020206070d0100ff00940601010006000000060c01000600000006080202
+0101030101010202060301000e01091301000905010009160b0100630100006301000063
+01000063010000220100060f01000603010006000000060a010006000000062401000603
+0202010103030101020206070d0100ff00940602010006000000060a0100060000000609
+02020101030101010202060301000e01091101020903010209160b010016010200050100
+00420100002b010200340100006301000063010000220100060e01000603010006000000
+060c0100060000000623010006030202010103030101020206070d0100ff009406010100
+06000000060c010006000000060802020101030101010202060301000e01091301000905
+010009160b010018010000490100002d010000340100006301000063010000220100060e
+01000604010006000000060a010006000000062401000603020201010303010102020607
+0d0100ff00940602010006000000060a0100060000000609020201010301010102020603
+01000e01091301000905010009160b010007010100000100000301020005010000030102
+0002010000000101003b0100000701000002010000010100000001010002010000000101
+00030102000301020005010000030102002d0100006301000063010000220100060e0100
+0603010006000000060c0100060000000623010006030202010103030101020206070d01
+005801010055010100e10601010006000000060c01000600000006080202010103010101
+0202060301000e01091301000905010009160b0100070100000001000000010000010100
+0002010000040100000501000002010100010100003a0100000701000002010000010101
+000101000001010100010100000101000002010000010100000201000004010000020100
+00020100002c01000063010000630100002201000614010006000000060a010006000000
+0624010006030202010103030101020206070d01005701000059010000e0060201000600
+0000060a010006000000060902020101030101010202060301000e010913010009050100
+09160b010007010000000100000001000005010000040100000501000002010000020100
+003a01000007010000020100000101000002010000010100000201000001010000090100
+0004010000060100002c01000063010000630100002201000613010006000000060c0100
+060000000623010006030202010103030101020206070d01000f0103001b010000260100
+004401000013010000e00601010006000000060c01000600000006080202010103010101
+0202060301000e01091301000905010009160b0100070100000001000000010000020103
+00040100000501000002010000020100003a010000070100000201000001010000020100
+000101000002010000020102000301030004010000030103002c01000063010000630100
+002201000614010006000000060a01000600000006240100060302020101030301010202
+06070d01000f0100000201000019010100260100004401000013010000e0060201000600
+0000060a010006000000060902020101030101010202060301000e010913010009050100
+09160b010007010000000100000001000001010000020100000401000005010000020100
+00020100003a010000070100000201000001010000020100000101000002010000050100
+0001010000020100000401000002010000020100002c0100006301000063010000220100
+0613010006000000060c0100060000000623010006030202010103030101020206070d01
+000f010000020100000201020002010000020100000a0100000001000003010100200100
+000401020002010000020100000201020009010000020100000201020003010200030102
+00030102000201040002010200020100000001010004010000e00601010006000000060c
+010006000000060802020101030101010202060301000e01091101040901010409140b01
+000701000000010000000100000101000002010000040100000501000002010000020100
+003a01000007010000010101000101010001010000010101000101000001010000020100
+0001010000020100000401000002010000020100002c0100006301000063010000220100
+0614010006000000060a0100060000000624010006030202010103030101020206070d01
+000f01000002010000010100000201000001010000020100000901000001010000030101
+002001000003010000020100000101000002010000010100000201000008010000020100
+000101000002010000010100000201000001010000020100000101000002010000030100
+000301000002010000010101000101000003010000e00602010006000000060a01000600
+0000060902020101030101010202060301000e0109320b01000701000000010000000100
+0002010300040100000501000002010000020100003a0100000801010000010000010100
+00000101000201000000010100030102000301030004010000030103002c010000630100
+00630100002201000613010006000000060c010006000000062301000603020201010303
+0101020206070d01000f0103000201000002010000010100000001000000010000080100
+000201000024010100040100000201000001010000020100000501000008010000020100
+000501000001010000090100000101000007010000070100000101000002010000040101
+00de0601010006000000060c010006000000060802020101030101010202060301000e01
+09320b0100630100000e010000050100004c010000630100006301000022010006140100
+06000000060a0100060000000624010006030202010103030101020206070d01000f0100
+000101000002010000020100000101000000010000000100000801000002010000260100
+000301040002010000000100000301030009010000000100000301030002010200030103
+00020102000401000004010300010100000201000003010000e00602010006000000060a
+010006000000060902020101030101010202060301000e0109320b0100630100000e0100
+00050100004c010000630100006301000022010006130100060000000600010006000100
+060001000600010006000100060001000600010006000000062301000603020201010303
+0101020206070d01000f0100000201000001010000020100000101000000010000000100
+000801050025010000030100000601000000010000020100000201000009010000000100
+000201000002010000050100000101000002010000050100000301000003010000020100
+00010100000201000003010000e00601010006000000060c010006000000060802020101
+030101010202060301000e0109320b0100630100000e010000050100004c010000630100
+006301000022010006140100060001000600010006000100060001000600010006000100
+06000100060000000624010006030202010103030101020206070d01000f010000020100
+0001010000020100000101000000010000000100000c0100000301010020010000030100
+000201000003010000030100000201000003010100040100000301000002010000010100
+000201000001010000020100000101000002010000030100000301000002010000010100
+000201000003010000e00602010006000000060a01000600000006090202010103010101
+0202060301000e0109320b01006301000063010000630100006301000022010006130100
+0600040e060000000623010006030202010103030101020206070d01000f010000020100
+000201020003010000000100000d01000003010100200100000401020004010000040103
+000301010004010000040103000201020003010300020102000501010002010300010100
+000201000003010000e00601010006000000060c01000600000006080202010103010101
+0202060301000e0109320b01006301000063010000630100006301000022010006140100
+040e00000624010006030202010103030101020206070d0100570100001b0100003c0100
+00e00602010006000000060a010006000000060902020101030101010202060301000e01
+0b340063010000630100006301000063010000220100061301000600040e060000000623
+010006030202010103030101020206070d010058010100170101003b010100e106010100
+06000000060c010006000000060802020101030101010202060301000e000b3501ff01b7
+06140100040e00000624010006030202010103030101020206070d0100ff009406020100
+06000000060a010006000000060902020101030101010202060301000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600006301000063
+0100006301000063010000220100061301000600040e0600000006230100060302020101
+03030101020206070d0100ff00940601010006000000060c010006000000060802020101
+030101010202060301000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000100006301000063010000630100006301000022010006140100
+040e00000624010006030202010103030101020206070d0100ff00940602010006000000
+060a01000600000006090202010103010101020206030100060000000632010006000063
+010000630100006301000063010000220100061301000600040e06000000062301000603
+0202010103030101020206070d0100000400000004000000040000000400000004000000
+040000000400000004000000040000000400000004000000040000000400000004000000
+040000000400000004000000040000000400000004000000040000000400000004000000
+040000000400000004000000040000000400000004000000040000000400000004000000
+040000000400000004000000040000000400000004000000040000000400000004000000
+040000000400000004000000040000000400000004000000040000000400000004000000
+040000000400000004000000040000000400000004000000040000000400000004000000
+040000000400000004000000040000000400000004000000040000000400000004000000
+040000000400000004000000040000000400000004000000040000000400000004000000
+040000000400000004000000040000000400000004000000040000000400000004000000
+040000000400000004000000040000000400000004000000040000000400000004000000
+040000000400000004000000040000000400000004000000040000000400000004000000
+040000000400000004000000040000000400000004000000040000000400000004000000
+040000000400000004000000040000000400000004000000040000000400000004000000
+040000000400000004000000040000000400000004000000040000000400000004000000
+040000000400000004000000040000000400000004000000040000000400000004000000
+040000000400000004000000040000000400000004000000040000000400000004000000
+040000000400000004000000040000000400000004000000040000000400000004000000
+040000000400000004000000040000000400000004000000040000000400000004000000
+040000000400000004000000040000000400000004000000040000000400000004000000
+040000000400000004000000040000000400000004000000040000000400000004000000
+040000000400000004000000040000000400000004000000040000000400000004000000
+040000000400000004000000040000000400000004000000040000020601010006000000
+060c01000600000006080202010103010101020206030100000006340100006301000063
+010000630100006301000022010006140100040e00000624010006030202010103030101
+020206070d01045801010478010104bc00010602010006000000060a0100060000000609
+020201010301010102020603010006000000061301000604010206150100060000630100
+00630100006301000063010000220100061301000600040e060000000623010006030202
+010103030101020206070d01000004560100047c010004ba010000010601010006000000
+060c01000600000006080202010103010101020206030100000006120102060301000602
+010006150100001f01000042010000120100001701020034010000630100006301000022
+010006140100040e00000624010006030202010103030101020206070d01040f01030417
+01040426010004060100041a010104040100043c01000413010004bb0001060201000600
+0000060a0100060000000609020201010301010102020603010006000000061301000603
+010006020100061401000600006301000012010000190100003401000063010000630100
+00220100061301000600040e060000000623010006030202010103030101020206070d01
+0000040e01000402010004160100040201000426010004210100044401000413010004ba
+010000010601010006000000060c01000600000006080202010103010101020206030100
+000006140100060301000602010006150100000701010000010000030102000201000000
+01010003010200030102003b010000080102000301010000010000020102000201000000
+010100020100000001010005010000030102000201000000010100260100006301000063
+01000022010006140100040e00000624010006030202010103030101020206070d01040f
+010004020100040201020402010004020100040c01000403010104200100040401020403
+010204030102040301020404010004040102040201000400010104030102040901000402
+010004020102040301020403010204030102040201040402010204020100040001010404
+010004bb00010602010006000000060a0100060000000609020201010301010102020603
+010006000000061301000606010006150100060000070100000001000000010000010100
+000201000001010100010100000401000002010000020100003a01000007010000020100
+000101000001010100010100000201000001010100010100000101010001010000040100
+000201000002010000010101000101000025010000630100006301000022010006130100
+0600040e060000000623010006030202010103030101020206070d010000040e01000402
+010004010100040201000401010004020100040b01000404010104200100040601000402
+010004020100040101000402010004010100040201000401010404040100040201010401
+010004010100040201000408010004020100040101000402010004010100040201000401
+010004020100040101000402010004030100040301000402010004010101040101000403
+010004ba010000010601010006000000060c010006000000060802020101030101010202
+060301000000061401000605010006170100000701000000010000000100000501000001
+01000008010000060100003a010000070100000201000001010000020100000101000002
+010000010100000201000001010000020100000401000006010000010100000201000025
+010000630100006301000022010006140100040e00000624010006030202010103030101
+020206070d01040f01030402010004020100040101000400010004000100040b01000425
+010104070100040201000402010004010100040501000402010004030100040601000402
+010004020100040101000402010004080100040201000405010004010100040901000401
+0100040701000407010004010100040201000404010104b900010602010006000000060a
+010006000000060902020101030101010202060301000600000006130100060401000617
+0100060000070100000001000000010000020103000101000008010000030103003a0100
+000701000002010000010100000201000001010400010100000201000001010000020100
+000401000003010300010100000201000025010000630100006301000022010006130100
+0600040e060000000623010006030202010103030101020206070d010000040e01000401
+01000402010004020100040101000400010004000100040b010004270100040601000402
+010004020100040201020402010404030100040601000402010004020100040101040409
+010004000100040301030402010204030103040201020404010004040103040101000402
+01000403010004ba010000010601010006000000060c0100060000000608020201010301
+010102020603010000000614010006030100060201000615010000070100000001000000
+0100000101000002010000010100000801000002010000020100003a0100000701000002
+010000010100000201000001010000050100000201000001010000020100000401000002
+01000002010000010100000201000025010000630100006301000022010006140100040e
+00000624010006030202010103030101020206070d01040f010004020100040101000402
+0100040101000400010004000100040a0100042801000406010004020100040201000405
+0100040101000407010004060100040201000402010004010100040d0100040001000402
+010004020100040501000401010004020100040501000403010004030100040201000401
+0100040201000403010004bb00010602010006000000060a010006000000060902020101
+030101010202060301000600000006110104060101040614010006000007010000000100
+00000100000101000002010000010100000801000002010000020100003a010000070100
+000201000001010000010101000101000002010000010100000201000001010100010100
+000401000002010000020100000101000002010000250100006301000063010000220100
+061301000600040e060000000623010006030202010103030101020206070d010000040e
+0100040201000401010004020100040101000400010004000100040a0100040501010420
+010004060100040201000402010004010100040201000401010004020100040301000406
+010004020100040201000401010004020100040301010404010004030100040201000401
+010004020100040101000402010004010100040201000403010004030100040201000401
+0100040201000403010004ba010000010601010006000000060c01000600000006080202
+010103010101020206030100000006340100000701000000010000000100000201030001
+01000008010000030103003a010000080102000301010000010000020102000201000002
+010000010100000001010005010000030103000101000002010000250100006301000063
+01000022010006140100040e00000624010006030202010103030101020206070d01040f
+010004020100040201020403010004000100040b01000405010104200100040601000403
+010204030102040301020404010004060100040201000402010004020102040401010404
+010004040103040201020403010304020102040501010402010304010100040201000403
+010004bb00010602010006000000060a0100060000000609020201010301010102020603
+0100060000000632010006000063010000230100003e0100006301000063010000220100
+061301000600040e060000000623010006030202010103030101020206070d0100000456
+01000406010004360100043c010004ba010000010601010006000000060c010006000000
+060802020101030101010202060301000000063401000063010000230100003e01000063
+0100006301000022010006140100040e0000062401000603020201010303010102020607
+0d0104580101040101000401010004340101043b010104bc00010602010006000000060a
+010006000000060902020101030101010202060301000600000006320100060000630100
+00230100003e0100006301000063010000220100061301000600040e0600000006230100
+06030202010103030101020206070d010000045c010104ff043101000001060101000600
+0000060c0100060000000608020201010301010102020603010000000634010000630100
+0063010000630100006301000022010006140100040e0000062401000603020201010303
+0101020206070d0104ff049200010602010006000000060a010006000000060902020101
+030101010202060301000600000006320100060000630100006301000063010000630100
+00220100061301000600040e060000000623010006030202010103030101020206070d01
+000004000100040001000400010004000100040001000400010004000100040001000400
+010004000100040001000400010004000100040001000400010004000100040001000400
+010004000100040001000400010004000100040001000400010004000100040001000400
+010004000100040001000400010004000100040001000400010004000100040001000400
+010004000100040001000400010004000100040001000400010004000100040001000400
+010004000100040001000400010004000100040001000400010004000100040001000400
+010004000100040001000400010004000100040001000400010004000100040001000400
+010004000100040001000400010004000100040001000400010004000100040001000400
+010004000100040001000400010004000100040001000400010004000100040001000400
+010004000100040001000400010004000100040001000400010004000100040001000400
+010004000100040001000400010004000100040001000400010004000100040001000400
+010004000100040001000400010004000100040001000400010004000100040001000400
+010004000100040001000400010004000100040001000400010004000100040001000400
+010004000100040001000400010004000100040001000400010004000100040001000400
+010004000100040001000400010004000100040001000400010004000100040001000400
+010004000100040001000400010004000100040001000400010004000100040001000400
+010004000100040001000400010004000100040001000400010004000100040001000400
+010004000100040001000400010004000100040001000400010004000100040001000400
+010004000100040001000400010004000100040001000400010004000100040001000400
+010004000100040001000400010004000100040001000400010004000100040001000400
+010004000100040001000400010004000100040001000400010004000100040001000400
+010004000100040001000400010004000100040001000400010004000100040001000400
+010004000100040001000400010000010601010006000000060c01000600000006080202
+010103010101020206030100000006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010000630100006301000063010000630100002201000614
+0100040e00000624010006030202010103030101020206070d0100ff0094060201000600
+0000060a0100060000000609020201010301010102020603010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+0100060001000600010006000100060001000600010006000100060001ff01b706130100
+0600040e060000000623010006030202010103030101020206070d010058010100710101
+00c50601010006000000060c010006000000060802020101030101010202060301000e36
+006301000063010000630100006301000022010006140100040e00000624010006030202
+010103030101020206070d01005701000075010000c40602010006000000060a01000600
+0000060902020101030101010202060301000e350b000063010000630100006301000063
+010000220100061301000600040e06000000062301000603020201010303010102020607
+0d01000f0103001901000004010200200100000d01000009010000170100002d01000013
+010000c40601010006000000060c01000600000006080202010103010101020206030100
+0e0109320b01006301000063010000630100006301000022010006140100040e00000624
+010006030202010103030101020206070d01000f01000002010000170101000301000002
+0100001f01000018010000170100002d01000013010000c40602010006000000060a0100
+06000000060902020101030101010202060301000e0109320b0100630100006301000063
+01000063010000220100061301000600040e060000000623010006030202010103030101
+020206070d01000f01000002010000020102000201000002010000080100000001000003
+010000020100000301010019010000030100000001010003010200030102000201000000
+010100030102000201000000010100030101000001000008010000020100000201020003
+01020003010200030102000201040002010200020100000001010004010000c406010100
+06000000060c010006000000060802020101030101010202060301000e01091301000904
+010209150b01006301000063010000630100006301000022010006140100040e00000624
+010006030202010103030101020206070d01000f01000002010000010100000201000001
+010000020100000a01000003010000020100000301010019010000030101000101000004
+010000020100000201000001010100010100000101000002010000010101000101000001
+010000010101000801000002010000010100000201000001010000020100000101000002
+0100000101000002010000030100000301000002010000010101000101000003010000c4
+0602010006000000060a010006000000060902020101030101010202060301000e010911
+0102090301000902010009140b0100170100004a01000007010000300102002601000063
+01000063010000220100061301000600040e060000000623010006030202010103030101
+020206070d01000f01030002010000020100000101000000010000000100000a01000004
+0102001e0101000401000008010000020100000501000002010000050100000101000005
+010000020100000801000002010000050100000101000009010000010100000701000007
+010000010100000201000004010100c20601010006000000060c01000600000006080202
+0101030101010202060301000e01091301000907010009140b0100170100004a01000007
+0100003201000026010000630100006301000022010006140100040e0000062401000603
+0202010103030101020206070d01000f0100000101000002010000020100000101000000
+010000000100000a01000003010000020100001f01000003010000080100000201000005
+010000020100000201030001010000050100000201000009010000000100000301030002
+01020003010300020102000401000004010300010100000201000003010000c406020100
+06000000060a010006000000060902020101030101010202060301000e01091301000907
+010009140b01000701010000010000030102000201040002010200420100000701000000
+010100020100000001010003010200020101000001000002010100000100000301020002
+010000000101000501000003010200020100000001010018010000630100006301000022
+0100061301000600040e060000000623010006030202010103030101020206070d01000f
+0100000201000001010000020100000101000000010000000100000a0100000301000002
+0100001f0100000301000008010000020100000501000002010000010100000201000001
+010000050100000201000009010000000100000201000002010000050100000101000002
+01000005010000030100000301000002010000010100000201000003010000c406010100
+06000000060c010006000000060802020101030101010202060301000e01091301000905
+010109150b01000701000000010000000100000101000002010000030100000301000002
+010000410100000701010001010000010101000101000001010000020100000101000000
+010000000100000101000000010000000100000101000002010000010101000101000004
+010000020100000201000001010100010100001701000063010000630100002201000614
+0100040e00000624010006030202010103030101020206070d01000f0100000201000001
+010000020100000101000000010000000100000a01000003010000020100000301010019
+010000030100000801000002010000020100000101000002010000010100000201000001
+010000050100000101010003010100040100000301000002010000010100000201000001
+010000020100000101000002010000030100000301000002010000010100000201000003
+010000c40602010006000000060a01000600000006090202010103010101020206030100
+0e01091301000907010009140b0100070100000001000000010000050100000301000003
+010000450100000701000002010000010100000501000002010000010100000001000000
+010000010100000001000000010000050100000101000002010000040100000601000001
+01000002010000170100006301000063010000220100061301000600040e060000000623
+010006030202010103030101020206070d01000f01000002010000020102000301000000
+010000090104000201020004010100190100000301000008010000030102000201000002
+010000020103000101000006010100000100000301010004010000040103000201020003
+010300020102000501010002010300010100000201000003010000c40601010006000000
+060c010006000000060802020101030101010202060301000e0109130100090701000914
+0b0100070100000001000000010000020103000301000004010200420100000701000002
+010000010100000501000002010000010100000001000000010000010100000001000000
+010000020103000101000002010000040100000301030001010000020100001701000063
+0100006301000022010006140100040e0000062401000603020201010303010102020607
+0d010057010000370100003c010000c40602010006000000060a01000600000006090202
+0101030101010202060301000e0109130100090301000902010009140b01000701000000
+010000000100000101000002010000030100000701000041010000070100000201000001
+010000050100000201000001010000000100000001000001010000000100000001000001
+010000020100000101000002010000040100000201000002010000010100000201000017
+0100006301000063010000220100061301000600040e0600000006230100060302020101
+03030101020206070d010058010100330101003b010100c50601010006000000060c0100
+06000000060802020101030101010202060301000e01091101040902010209150b010007
+010000000100000001000001010000020100000301000003010000020100004101000007
+010100010100000101000005010000020100000101000000010000000100000101000000
+010000000100000101000002010000010101000101000004010000020100000201000001
+0100000201000017010000630100006301000022010006140100040e0000062401000603
+0202010103030101020206070d0100ff00940602010006000000060a0100060000000609
+02020101030101010202060301000e0109320b0100070100000001000000010000020103
+000401010002010200420100000701000000010100020100000601020002010000000100
+000001000001010000000100000001000002010300010100000001010005010000030103
+000101000002010000170100006301000063010000220100061301000600040e06000000
+0623010006030202010103030101020206070d0100ff00940601010006000000060c0100
+06000000060802020101030101010202060301000e0109320b0100630100003101000030
+010000630100006301000022010006140100040e00000624010006030202010103030101
+020206070d0100ff00940602010006000000060a01000600000006090202010103010101
+0202060301000e0109320b01006301000031010000300100006301000063010000220100
+061301000600040e060000000623010006030202010103030101020206070d0100ff0094
+0601010006000000060c010006000000060802020101030101010202060301000e010932
+0b0100630100003101000030010000630100006301000022010006140100040e00000624
+010006030202010103030101020206070d01005801010071010100c50602010006000000
+060a010006000000060902020101030101010202060301000e0109320b01006301000063
+0100006301000063010000220100061301000600040e0600000006230100060302020101
+03030101020206070d01005701000075010000c40601010006000000060c010006000000
+060802020101030101010202060301000e0109320b010063010000630100006301000063
+01000022010006140100040e00000624010006030202010103030101020206070d01000f
+0103001801020004010100200100006001000013010000c40602010006000000060a0100
+06000000060902020101030101010202060301000e010b34006301000063010000630100
+0063010000220100061301000600040e0600000006230100060302020101030301010202
+06070d01000f01000002010000160100000201000002010000010100001f010000600100
+0013010000c40601010006000000060c0100060000000608020201010301010102020603
+01000e000b3501ff01b706140100040e0000062401000603020201010303010102020607
+0d01000f010000020100000201020002010000020100000c010000020100000101000003
+010100190100000401020002010000020100000201020003010200020100000001010002
+010000000101000301020009010000020100000201020003010200030102000301020002
+01040002010200020100000001010004010000c40602010006000000060a010006000000
+060902020101030101010202060301000e36006301000063010000630100006301000022
+0100061301000600040e060000000623010006030202010103030101020206070d01000f
+01000002010000010100000201000001010000020100000c010000020100000101000003
+010100190100000301000002010000010100000201000001010000020100000101000002
+010000010101000101000001010100010100000101000002010000080100000201000001
+010000020100000101000002010000010100000201000001010000020100000301000003
+01000002010000010101000101000003010000c40601010006000000060c010006000000
+060802020101030101010202060301000e350b0000630100006301000063010000630100
+0022010006140100040e00000624010006030202010103030101020206070d01000f0103
+0002010000020100000101000000010000000100000b01000003010000010100001d0101
+000401000005010000020100000101000009010000010100000201000001010000020100
+000101000002010000080100000201000005010000010100000901000001010000070100
+0007010000010100000201000004010100c20602010006000000060a0100060000000609
+02020101030101010202060301000e0109320b0100630100006301000063010000630100
+00220100061301000600040e060000000623010006030202010103030101020206070d01
+000f0100000101000002010000020100000101000000010000000100000a010000040100
+00010100001f010000040102000201000002010000020102000301030001010000020100
+000101000002010000010104000901000000010000030103000201020003010300020102
+000401000004010300010100000201000003010000c40601010006000000060c01000600
+0000060802020101030101010202060301000e0109320b01006301000063010000630100
+006301000022010006140100040e00000624010006030202010103030101020206070d01
+000f01000002010000010100000201000001010000000100000001000009010000050100
+00010100001f010000070100000101000002010000050100000101000002010000010100
+00020100000101000002010000010100000d010000000100000201000002010000050100
+000101000002010000050100000301000003010000020100000101000002010000030100
+00c40602010006000000060a010006000000060902020101030101010202060301000e01
+091301000906010009150b01006301000063010000630100006301000022010006130100
+0600040e060000000623010006030202010103030101020206070d01000f010000020100
+000101000002010000010100000001000000010000080100000601000001010000030101
+001901000003010000020100000101000001010100010100000201000001010000020100
+000101000002010000010100000201000001010000020100000301010004010000030100
+000201000001010000020100000101000002010000010100000201000003010000030100
+0002010000010100000201000003010000c40601010006000000060c0100060000000608
+02020101030101010202060301000e01091101020905010109150b010011010000500100
+001e0100001801000029010000630100006301000022010006140100040e000006240100
+06030202010103030101020206070d01000f010000020100000201020003010000000100
+000901040003010100040101001901000004010200030101000001000002010200030103
+000101000002010000010100000201000002010200040101000401000004010300020102
+0003010300020102000501010002010300010100000201000003010000c4060201000600
+0000060a010006000000060902020101030101010202060301000e010913010009040100
+0900010009150b0100630100001e01000018010000290100006301000063010000220100
+061301000600040e060000000623010006030202010103030101020206070d0100570100
+00370100003c010000c40601010006000000060c01000600000006080202010103010101
+0202060301000e0109130100090401000900010009150b01000701000000010100030102
+000201000000010100030102004201000008010100000100000101000002010000020102
+000201040002010200020100000201000002010200020100000001010003010200020100
+0000010100030101000001000010010000630100006301000022010006140100040e0000
+0624010006030202010103030101020206070d010058010100330101003b010100c50602
+010006000000060a010006000000060902020101030101010202060301000e0109130100
+090301000901010009150b01000701010001010000040100000201010001010000010100
+000201000041010000070100000101010001010000020100000101000002010000030100
+000301000002010000010100000201000001010000020100000101010001010000010100
+000201000001010100010100000101000001010100100100006301000063010000220100
+061301000600040e060000000623010006030202010103030101020206070d0100ff0094
+0601010006000000060c010006000000060802020101030101010202060301000e010913
+0100090201000902010009150b0100070100000201000004010000020100000201000005
+010000410100000701000002010000010100000201000001010000070100000701000001
+010000020100000101000005010000020100000101000002010000010100000501000002
+01000010010000630100006301000022010006140100040e000006240100060302020101
+03030101020206070d0100ff00940602010006000000060a010006000000060902020101
+030101010202060301000e01091301000902010509140b01000701000002010000040100
+000201000002010000020103004101000007010000020100000101000002010000020102
+000401000004010300020100000001000003010200020100000201000001010400010100
+000501000002010000100100006301000063010000220100061301000600040e06000000
+0623010006030202010103030101020206070d0100ff00940601010006000000060c0100
+06000000060802020101030101010202060301000e01091301000906010009150b010007
+010000020100000401000002010000020100000101000002010000410100000701000002
+010000010100000201000005010000030100000301000002010000020100000001000006
+010000010100000201000001010000050100000501000002010000100100006301000063
+01000022010006140100040e00000624010006030202010103030101020206070d0100ff
+00940602010006000000060a010006000000060902020101030101010202060301000e01
+091101040903010209140b01000701000002010000040100000201000002010000010100
+000201000041010000070100000101010001010000010101000101000002010000030100
+000301000002010000030100000301000002010000010101000101000001010000020100
+00010100000501000001010100100100006301000063010000220100061301000600040e
+060000000623010006030202010103030101020206070d0100ff00940601010006000000
+060c010006000000060802020101030101010202060301000e0109320b01000701000002
+010000040100000201000002010000020103004101000008010100000100000201010000
+010000020102000501010002010300030100000401020002010000000101000301020002
+010000060101000001000010010000630100006301000022010006140100040e00000624
+010006030202010103030101020206070d0100ff00940602010006000000060a01000600
+0000060902020101030101010202060301000e0109320b0100630100000b010000440100
+00100100006301000063010000220100061301000600040e060000000623010006030202
+010103030101020206070d0100ff00940601010006000000060c01000600000006080202
+0101030101010202060301000e0109320b01006301000007010000020100004001000002
+01000010010000630100006301000022010006140100040e000006240100060302020101
+03030101020206070d0100ff00940602010006000000060a010006000000060902020101
+030101010202060301000e0109320b010063010000080102004201020011010000630100
+0063010000220100061301000600040e0600000006230100060302020101030301010202
+06070d0100ff00940601010006000000060c010006000000060802020101030101010202
+060301000e0109320b01006301000063010000630100006301000022010006140100040e
+00000624010006030202010103030101020206070d0100ff00940602010006000000060a
+010006000000060902020101030101010202060301000e0109320b010063010000630100
+006301000063010000220100061301000600040e06000000062301000603020201010303
+0101020206070d0100ff00940601010006000000060c0100060000000608020201010301
+01010202060301000e010b34006301000063010000630100006301000022010006140100
+040e00000624010006030202010103030101020206070d0100ff00940602010006000000
+060a010006000000060902020101030101010202060301000e000b3501ff01b706130100
+0600040e060000000623010006030202010103030101020206070d0100ff009406010100
+06000000060c010006000000060802020101030101010202060301000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600006301000063
+010000630100006301000022010006140100040e00000624010006030202010103030101
+020206070d0100ff00940602010006000000060a01000600000006090202010103010101
+020206030100000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+06000000060001000063010000630100006301000063010000220100061301000600040e
+060000000623010006030202010103030101020206070d0100ff00940601010006000000
+060c01000600000006080202010103010101020206030100060000000632010006000063
+01000063010000630100006301000022010006140100040e000006240100060302020101
+03030101020206070d0100ff00940602010006000000060a010006000000060902020101
+030101010202060301000000063401000063010000630100006301000063010000220100
+061301000600040e060000000623010006030202010103030101020206070d0100ff0094
+0601010006000000060c0100060000000608020201010301010102020603010006000000
+061301000603010406140100060000630100006301000063010000630100002201000614
+0100040e00000624010006030202010103030101020206070d0100ff0094060201000600
+0000060a0100060000000609020201010301010102020603010000000612010206030100
+06190100000f010200030102004901000007010000230100000b010200030102001f0100
+006301000063010000220100061301000600040e06000000062301000603020201010303
+0101020206070d0100ff00940601010006000000060c0100060000000608020201010301
+010102020603010006000000061301000603010006180100060000110100000501000049
+01000007010000230100000d010000050100001f01000063010000630100002201000614
+0100040e00000624010006030202010103030101020206070d0100ff0094060201000600
+0000060a0100060000000609020201010301010102020603010000000614010006030100
+061901000008010200050100000501000003010200420100000701000000010100030102
+000201000000010100020100000001010003010200020104000101000002010000040100
+00050100001f0100006301000063010000220100061301000600040e0600000006230100
+06030202010103030101020206070d0100ff009406010100060000000600010006000100
+060001000600010006000100060001000600010006000000060802020101030101010202
+060301000600000006130100060301030615010006000007010000020100000401000005
+010000020100000201000041010000070101000101000001010000020100000101010001
+010000010101000101000001010000020100000301000003010000020100000401000005
+0100001f010000630100006301000022010006140100040e000006240100060302020101
+03030101020206070d0100ff009406020100060001000600010006000100060001000600
+010006000100060001000600000006090202010103010101020206030100000006140100
+060701000615010000070100000201000004010000050100000201000002010000410100
+000701000002010000010100000201000001010000050100000201000001010000070100
+00030100000201000004010000050100001f010000630100006301000022010006130100
+0600040e060000000623010006030202010103030101020206070d0100ff009406010100
+061000000608020201010301010102020603010006000000061301000607010006140100
+060000070100000201000004010000050100000201040041010000070100000201000001
+010000020100000101000005010000020100000201020004010000030100000201000004
+010000050100001f010000630100006301000022010006140100040e0000062401000603
+0202010103030101020206070d0100ff0094060201000600000006000000060000000600
+000006000000060000000600000006000000060902020101030101010202060301000000
+061401000602010006030100061501000007010000020100000401000005010000020100
+004501000007010000020100000101000002010000010100000501000002010000050100
+0003010000030100000201000004010000050100001f0100006301000063010000220100
+061301000600040e060000000623010006030202010103030101020206070d0100ff0094
+060101000602000006000000060000000600000006000000060000000600010006000000
+060802020101030101010202060301000600000006110104060101030615010006000007
+010000020100000401000005010000020100000201000041010000070100000201000001
+010000020100000101000005010000020100000101000002010000030100000301000001
+01010004010000050100001f010000630100006301000022010006140100040e00000624
+010006030202010103030101020206070d0100ff00940602010006000000060a01000600
+000006090202010103010101020206030100000006340100000801020005010000050100
+000301020042010000070100000201000002010200020100000501000002010000020102
+0005010100020101000001000004010000050100001f0100006301000063010000220100
+061301000600040e060000000623010006030202010103030101020206070d0100ff0094
+060101000602000006080100060200000608020201010301010102020603010006000000
+063201000600006301000063010000630100006301000022010006140100040e00000624
+010006030202010103030101020206070d0100ff00940602010006020000060601000602
+000006090202010103010101020206030100000006340100006301000063010000630100
+0063010000220100061301000600040e0600000006230100060302020101030301010202
+06070d0100ff009406010100060400000606010006020000060802020101030101010202
+060301000600000006320100060000630100006301000063010000630100002201000614
+0100040e00000624010006030202010103030101020206070d0100ff0094060201000602
+000006060100060200000609020201010301010102020603010000000634010000630100
+00630100006301000063010000220100061301000600040e060000000623010006030202
+010103030101020206070d0100ff00940601010006040000060401000604000006080202
+010103010101020206030100060000000632010006000063010000630100006301000063
+01000022010006140100040e00000624010006030202010103030101020206070d0100ff
+009406020100060400000602010006040000060902020101030101010202060301000000
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+0063010000630100006301000063010000220100061301000600040e0600000006230100
+06030202010103030101020206070d0100ff009406010100060600000602010006040000
+060802020101030101010202060301000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+06000100060001000600010006000100060001ff01b706140100040e0000062401000603
+0202010103030101020206070d0100ff0094060201000604000006020100060400000609
+02020101030101010202060301000e360063010000630100006301000063010000220100
+061301000600040e060000000623010006030202010103030101020206070d0100ff0094
+06010100060600000600010006060000060802020101030101010202060301000e350b00
+006301000063010000630100006301000022010006140100040e00000624010006030202
+010103030101020206070d0100ff00940602010006060100060600000609020201010301
+01010202060301000e0109320b0100630100006301000063010000630100002201000613
+01000600040e060000000623010006030202010103030101020206070d0100ff00940601
+01000608010006060000060802020101030101010202060301000e0109320b0100630100
+0063010000630100006301000022010006140100040e0000062401000603020201010303
+0101020206070d0000ff0095060201000606010006060000060902020101030101010202
+060301000e01091301000905010209140b01006301000063010000630100006301000022
+0100061301000600040e060000000623010006030202010103030101020206ff06a00100
+060000000600000006000000060000000600000006000000060000000600000006000000
+060802020101030101010202060301000e01091101020904010009170b0100170100000d
+010000020100003701000008010200050100000301020005010000090100000d01020026
+010000630100006301000022010006140100040e00000624010006030202010103030101
+020206ff06a1000006000000060000000600000006000000060000000600000006000000
+06000000060902020101030101010202060301000e01091301000903010009180b010017
+01000011010000370100000a0100000c010000100100000f010000260100006301000063
+010000220100061301000600040e06000000062301000603020201010303010102020606
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000618
+02020101030101010202060301000e01091301000903010009180b010007010000000101
+0003010200020104000101000000010100030102000201000001010000340100000a0100
+000301020005010000030102000301020002010000000101000301020005010000020101
+000001000003010200020100000001010011010000630100006301000022010006140100
+040e00000624010006030202010103030101020206050100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000000061702020101030101010202
+060301000e01091301000903010309150b01000701010001010000010100000201000003
+0100000301010001010000040100000201000000010000350100000a0100000501000005
+010000050100000201000002010000010101000101000001010000020100000401000002
+010000000100000001000001010000020100000101010001010000100100006301000063
+010000220100061301000600040e06000000062301000603020201010303010102020606
+010006100000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006020000060c0000061802020101030101010202060301000e010913010009030100
+0902010009140b0100070100000201000005010000030100000301000008010000020101
+00360100000a010000050100000501000005010000020100000201000001010000020100
+000101000002010000040100000201000000010000000100000101000002010000010100
+000201000010010000630100006301000022010006140100040e00000624010006030202
+010103030101020206050100060c00000600010006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+0600000006000000060000000600000006000000060001000600000006000000060c0000
+061702020101030101010202060301000e0109130100090301000902010009140b010007
+010000020100000201030003010000030100000801000002010100360100000a01000005
+010000050100000501000002010400010100000201000001010000020100000401000002
+010000000100000001000001010400010100000201000010010000630100006301000022
+0100061301000600040e060000000623010006030202010103030101020206060100060a
+0000060001000602000006ff067601000602000006000000060000000608000006180202
+0101030101010202060301000e0109130100090301000902010009140b01000701000002
+01000001010000020100000301000003010000080100000201000000010000350100000a
+010000050100000501000005010000020100000501000002010000010100000201000004
+010000020100000001000000010000010100000501000002010000100100006301000063
+01000022010006140100040e000006240100060302020101030301010202060501000608
+000006000000060201000600000006ff0678010006000000060200000600000006080000
+061702020101030101010202060301000e01091101040902010209150b01000701010001
+01000001010000020100000301000003010000080100000201000001010000340100000a
+010000050100000501000005010000020100000201000001010000020100000101000002
+010000040100000201000000010000000100000101000002010000010100000201000010
+0100006301000063010000220100061301000600040e0600000006230100060302020101
+030301010202060601000606000006000000060201000602000006ff0676010006020000
+060400000600000006040000061802020101030101010202060301000e0109320b010007
+01000000010100030103000401010001010000080100000201000002010000330100000a
+010000050100000501000005010000030102000201000002010000020102000501000002
+010000000100000001000002010200020100000201000010010000630100006301000022
+010006140100040e00000624010006030202010103030101020206050100060400000600
+0000060601000600000006ff067801000600000006060000060000000604000006170202
+0101030101010202060301000e0109320b0100070100005a0100001f0100004201000063
+01000063010000220100061301000600040e060000000623010006030202010103030101
+0202060601000602000006000000060601000602000006ff067601000602000006080000
+0600000006000000061802020101030101010202060301000e0109320b0100070100005a
+0100001c0100000101000042010000630100006301000022010006140100040e00000624
+0100060302020101030301010202060501000600010006000100060a01000600000006ff
+0678010006000000060a0100060001000600000006170202010103010101020206030100
+0e0109320b0100070100005a0100001d0101004301000063010000630100002201000613
+01000600040e060000000623010006030202010103030101020206060100060201000600
+0100060601000602000006ff067601000602000006080100060001000600000006180202
+0101030101010202060301000e0109320b01006301000063010000630100006301000022
+010006140100040e00000624010006030202010103030101020206050100060401000600
+0100060601000600000006ff067801000600000006060100060001000604000006170202
+0101030101010202060301000e0109320b01006301000063010000630100006301000022
+0100061301000600040e0600000006230100060302020101030301010202060601000606
+010006000100060201000602000006ff0676010006020000060401000600010006040000
+061802020101030101010202060301000e010b3400630100006301000063010000630100
+0022010006140100040e0000062401000603020201010303010102020605010006080100
+06000100060201000600000006ff06780100060000000602010006000100060800000617
+02020101030101010202060301000e000b3501ff01b7061301000600040e060000000623
+010006030202010103030101020206060100060a0100060001000602000006ff06760100
+060200000600010006000100060800000618020201010301010102020603010010360063
+01000063010000630100006301000022010006140100040e000006240100060302020101
+03030101020206050100060c010006000100060000000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600000006000100060c00000617
+020201010301010102020603010010350f00006301000063010000630100006301000022
+0100061301000600040e0600000006230100060302020101030301010202060601000610
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000602
+0100060c000006180202010103010101020206030100100108320f010063010000630100
+00630100006301000022010006140100040e000006240100060302020101030301010202
+060501000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+0600000006170202010103010101020206030100100108320f0100630100006301000063
+01000063010000220100061301000600040e060000000623010006030202010103030101
+020206060000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+0000061802020101030101010202060301001001081301000803010408140f0100630100
+0063010000630100006301000022010006140100040e0000062401000603020201010303
+0101020206ff06bc02020101030101010202060301001001081101020803010008020100
+08140f01006301000010010000200102002d010000630100006301000022010006130100
+0600040e060000000623010006030202010103030101020206ff06bc0202010103010101
+0202060301001001081301000806010008150f01006301000010010000220100002d0100
+00630100006301000022010006140100040e000006240100060302020101030301010202
+06ff06bc02020101030101010202060301001001081301000806010008150f0100070100
+000001010003010200020100000001010049010000080102000201040001010000020100
+000101000000010100030102000201000000010100050100000301020002010000000101
+001f0100006301000063010000220100061301000600040e060000000623010006030202
+010103030101020206ff06bc020201010301010102020603010010010813010008060100
+08150f010007010100010100000101000002010000010101000101000048010000070100
+000201000003010000030100000201000001010100010100000101000002010000010101
+000101000004010000020100000201000001010100010100001e01000063010000630100
+0022010006140100040e00000624010006030202010103030101020206ff06bc02020101
+030101010202060301001001081301000806010008150f01000701000002010000010100
+0002010000010100004c0100000701000007010000030100000201000001010000050100
+00020100000101000002010000040100000601000001010000020100001e010000630100
+0063010000220100061301000600040e0600000006230100060302020101030301010202
+06ff06bc02020101030101010202060301001001081301000805010008160f0100070100
+000201000001010400010100004c01000008010200040100000301000002010000010100
+00050104000101000002010000040100000301030001010000020100001e010000630100
+006301000022010006140100040e00000624010006030202010103030101020206ff06bc
+02020101030101010202060301001001081301000805010008160f010007010000020100
+0001010000050100004c0100000b01000003010000030100000201000001010000050100
+00050100000201000004010000020100000201000001010000020100001e010000630100
+0063010000220100061301000600040e0600000006230100060302020101030301010202
+06ff06bc02020101030101010202060301001001081101040803010008160f0100070101
+00010100000101000002010000010100004c010000070100000201000003010000030100
+000101010001010000050100000201000001010100010100000401000002010000020100
+0001010000020100001e010000630100006301000022010006140100040e000006240100
+06030202010103030101020206ff06bc0202010103010101020206030100100108320f01
+00070100000001010003010200020100004c010000080102000501010002010100000100
+0001010000060102000201000000010100050100000301030001010000020100001e0100
+006301000063010000220100061301000600040e06000000062301000603020201010303
+0101020206ff06bc0202010103010101020206030100100108320f0100070100005a0100
+002a01000037010000630100006301000022010006140100040e00000624010006030202
+010103030101020206ff06bc0202010103010101020206030100100108320f0100070100
+005a0100002a010000370100006301000063010000220100061301000600040e06000000
+0623010006030202010103030101020206ff06bc02020101030101010202060301001001
+08320f0100070100005a0100002a01000037010000630100006301000022010006140100
+040e00000624010006030202010103030101020206ff06bc020201010301010102020603
+0100100108320f010063010000630100006301000063010000220100061301000600040e
+060000000623010006030202010103030101020206ff06bc020201010301010102020603
+0100100108320f01006301000063010000630100006301000022010006140100040e0000
+0624010006030202010103030101020206ff06bc02020101030101010202060301001001
+0f340063010000630100006301000063010000220100061301000600040e060000000623
+010006030202010103030101020206ff06bc020201010301010102020603010010000f35
+01ff01b706140100040e00000624010006030202010103030101020206ff06bc02020101
+030101010202060301000e36006301000063010000630100006301000022010006130100
+0600040e060000000623010006030202010103030101020206ff06bc0202010103010101
+0202060301000e350b00006301000063010000630100006301000022010006140100040e
+00000624010006030202010103030101020206ff06bc0202010103010101020206030100
+0e0109320b010063010000630100006301000063010000220100061301000600040e0600
+00000623010006030202010103030101020206410100060a010006ff066d020201010301
+01010202060301000e0109320b0100630100006301000063010000630100002201000614
+0100040e0000062401000603020201010303010102020607010206100100060801000612
+010006050100060c0100060d0101061a010006ff06400202010103010101020206030100
+0e01091301000904010209150b0100630100006301000063010000630100002201000613
+01000600040e06000000062301000603020201010303010102020606010006020100060f
+0100061c010006050100060c0100060c0100061c010006ff064002020101030101010202
+060301000e0109110102090301000902010009140b01001101000009010000170100002c
+0100002c01000035010000630100006301000022010006140100040e0000062401000603
+0202010103030101020206060100060d0102060201000600010106030102060301020603
+010206020104060201000605010206050100060b01000604010206020100060201000601
+010006000101060301010600010006ff064002020101030101010202060301000e010913
+0100090301000902010009140b01001c010000170100002c0100002c0100003501000063
+01000063010000220100061301000600040e060000000623010006030202010103030101
+020206060100060c01000602010006010101060101000604010006020100060201000601
+010006020100060301000604010006040100060201000604010006090104060101000602
+010006010100060201000601010106010100060101000601010106ff0640020201010301
+01010202060301000e0109130100090301000902010009140b0100070100000001010003
+01020003010200020100000001010003010200020100000001010003010100000100002c
+010000070100000201000002010200030102000301020003010200020104000201020002
+0100000001010026010000630100006301000022010006140100040e0000062401000603
+020201010303010102020606010306090100060201000601010006020100060401000602
+0100060201000601010006070100060401000604010006080100060b0100060301000602
+010006010100060201000601010006020100060101000602010006ff0640020201010301
+01010202060301000e01091301000904010209150b010007010100010100000401000002
+010000020100000101010001010000010100000201000001010100010100000101000001
+0101002c0100000701000002010000010100000201000001010000020100000101000002
+010000010100000201000003010000030100000201000001010100010100002501000063
+01000063010000220100061301000600040e060000000623010006030202010103030101
+020206060100060201000608010006020100060101000602010006040100060201040601
+010006070100060401000605010206050100060b01000603010006020100060101000602
+01000601010006020100060101000602010006ff06400202010103010101020206030100
+0e0109130100090301000902010009140b01000701000008010000020100000501000002
+010000050100000101000005010000020100002c01000007010000020100000501000001
+010000090100000101000007010000070100000101000002010000250100006301000063
+01000022010006140100040e000006240100060302020101030301010202060601000602
+010006080100060201000601010006020100060401000602010006050100060701000604
+01000608010006040100060b010006030100060201000601010006020100060101000602
+0100060101000602010006ff064002020101030101010202060301000e01091301000903
+01000902010009140b010007010000080100000201000005010000020100000201030001
+01000005010000020100002c010000080100000001000003010300020102000301030002
+010200040100000401030001010000020100002501000063010000630100002201000613
+01000600040e060000000623010006030202010103030101020206060100060201000608
+010006020100060101010601010006040100060201000602010006010100060201000603
+010006050100060301000602010006030100060c01000603010006020100060101000601
+01010601010006020100060101000601010106ff06400202010103010101020206030100
+0e0109130100090301000902010009140b01000701000008010000020100000501000002
+01000001010000020100000101000005010000020100002c010000080100000001000002
+010000020100000501000001010000020100000501000003010000030100000201000001
+0100000201000025010000630100006301000022010006140100040e0000062401000603
+0202010103030101020206070102060a0102060201000600010106050100060301020603
+010206050101060301000604010206040100060c01000604010206030101060001000601
+010006020100060201010600010006ff064002020101030101010202060301000e010911
+01040902010209150b010007010000080100000201000002010000010100000201000001
+010000020100000101000005010000010101002c01000009010000030100000201000001
+010000020100000101000002010000010100000201000003010000030100000201000001
+01000002010000250100006301000063010000220100061301000600040e060000000623
+010006030202010103030101020206250100061a0100060a010006ff066d020201010301
+01010202060301000e0109320b0100070100000801000003010200020100000201000002
+0103000101000006010100000100002c0100000901000004010300020102000301030002
+010200050101000201030001010000020100002501000063010000630100002201000614
+0100040e000006240100060302020101030301010202062201000601010006ff06950202
+0101030101010202060301000e0109320b01006301000063010000630100006301000022
+0100061301000600040e06000000062301000603020201010303010102020623010106ff
+069602020101030101010202060301000e0109320b010063010000630100006301000063
+01000022010006140100040e00000624010006030202010103030101020206ff06bc0202
+0101030101010202060301000e0109320b01006301000063010000630100006301000022
+0100061301000600040e060000000623010006030202010103030101020206ff06bc0202
+0101030101010202060301000e0109320b01006301000063010000630100006301000022
+010006140100040e00000624010006030202010103030101020206ff06bc020201010301
+01010202060301000e0109320b0100630100006301000063010000630100002201000613
+01000600040e060000000623010006030202010103030101020206ff06bc020201010301
+01010202060301000e010b34006301000063010000630100006301000022010006140100
+040e00000624010006030202010103030101020206ff06bc020201010301010102020603
+01000e000b3501ff01b7061301000600040e060000000623010006030202010103030101
+020206ff06bc020201010301010102020603010010360063010000630100006301000063
+01000022010006140100040e00000624010006030202010103030101020206ff06bc0202
+01010301010102020603010010350f000063010000630100006301000063010000220100
+061301000600040e060000000623010006030202010103030101020206ff06bc02020101
+03010101020206030100100108320f010063010000630100006301000063010000220100
+06140100040e00000624010006030202010103030101020206ff06bc0202010103010101
+020206030100100108320f01006301000063010000630100006301000022010006130100
+0600040e060000000623010006030202010103030101020206ff06bc0202010103010101
+0202060301001001081301000804010208150f0100630100006301000063010000630100
+0022010006140100040e0000062401000603020201010303000406ff06bc000403010101
+020206030100100108110102080301000802010008140f01001001000006010000490100
+000e0100001c0100000b010200030102001f010000630100006301000022010006130100
+0600040e0600000006230100060302020101030300000202050006ff06bc000002020500
+03010101020206030100100108130100080301000802010008140f010010010000510100
+000e0100001c0100000d010000050100001f010000630100006301000022010006140100
+040e000006240100060302020101030300000202050006ff06bc00000202050003010101
+020206030100100108130100080301000802010008140f01000801020002010400020102
+000201000000010100030102003b01000008010200020100000101000003010200020100
+00000101000301020002010400010100000201000004010000050100001f010000630100
+0063010000220100061301000600040e0600000006230100060302020101030300000202
+050006ff06bc000002020500030101010202060301001001081301000803010008020100
+08140f010007010000020100000301000006010000020101000101000001010000020100
+003a01000007010000020100000101000000010000030100000201000001010100010100
+00010100000201000003010000030100000201000004010000050100001f010000630100
+006301000022010006140100040e000006240100060302020101030300000202050006ff
+06bc000002020500030101010202060301001001081301000804010308140f0100070100
+0007010000060100000201000002010000050100003a0100000701000005010100080100
+0001010000020100000101000007010000030100000201000004010000050100001f0100
+006301000063010000220100061301000600040e06000000062301000603020201010303
+00000202050006ff06bc0000020205000301010102020603010010010813010008070100
+08140f01000801020004010000060100000201000002010000020103003a010000080102
+000201010005010300010100000201000002010200040100000301000002010000040100
+00050100001f010000630100006301000022010006140100040e00000624010006030202
+01010303000002020500000502ff02b00006020205000301010102020603010010010813
+01000806010008150f01000b010000030100000601000002010000020100000101000002
+0100003a0100000b01000001010000000100000301000002010000010100000201000005
+01000003010000030100000201000004010000050100001f010000630100006301000022
+0100061301000600040e0600000006230100060302020101030300000208050002ff02b0
+000002080500030101010202060301001001081101040801010208160f01000701000002
+0100000301000006010000020100000201000001010000020100003a0100000701000002
+010000010100000101000002010000020100000101000002010000010100000201000003
+010000030100000101010004010000050100001f01000063010000630100002201000614
+0100040e000006240100060302020101030300000208050002ff02b00000020805000301
+0101020206030100100108320f0100080102000501010004010000020100000201000002
+0103003a0100000801020002010000020100000201030001010000020100000201020005
+010100020101000001000004010000050100001f01000063010000630100002201000613
+01000600040e0600000006230100060302020101030300000208050001ff01b000000208
+050003010101020206030100100108320f01006301000063010000630100006301000022
+010006140100040e00000624010006030202010103030000050901ff01b0000005090301
+0101020206030100100108320f0100630100006301000063010000630100002201000613
+01000600040e060000000623010006030202010103ff03cc010102020603010010010832
+0f01006301000063010000630100006301000022010006140100040e0000062401000603
+0202010103ff03cc0101020206030100100108320f010063010000630100006301000063
+010000220100061301000600040e060000000623010006030202010103ff03cc01010202
+06030100100108320f01006301000063010000630100006301000022010006140100040e
+00000624010006030202010103ff03cc010102020603010010010f340063010000630100
+006301000063010000220100061301000600040e060000000623010006030202010103ff
+03cc010102020603010010000f3501ff01b706140100040e000006240100060302020101
+03ff03cc01010202060301000e3600630100006301000063010000630100002201000613
+01000600040e060000000623010006030202010103ff03cc01010202060301000e350b00
+006301000063010000630100006301000022010006140100040e00000624010006030202
+010103ff03cc01010202060301000e0109320b0100630100006301000063010000630100
+00220100061301000600040e060000000623010006030202010103ff03cc010102020603
+01000e0109320b01006301000063010000630100006301000022010006140100040e0000
+0624010006030202010103ff03cc01010202060301000e01091201020903010209150b01
+0063010000630100006301000063010000220100061301000600040e0600000006230100
+06030202010103ff03cc01010202060301000e0109110100090201000901010009020100
+09140b0100630100002c01000035010000630100006301000022010006140100040e0000
+0624010006030202010103ff03cc01010202060301000e01091101000902010009010100
+0902010009140b0100630100002c01000035010000630100006301000022010006130100
+0600040e060000000623010006030202010103ff03cc01010202060301000e0109110100
+09020100090101000902010009140b010008010200020100000201000002010200030102
+0002010000000101000201000000010100030102002d0100000701000002010000020102
+000301020003010200030102000201040002010200020100000001010026010000630100
+006301000022010006140100040e00000624010006030202010103ff03cc010102020603
+01000e0109140100090201000902010009140b0100070100000201000001010000020100
+000101000002010000010100000201000001010100010100000101010001010000010100
+00020100002c010000070100000201000001010000020100000101000002010000010100
+000201000001010000020100000301000003010000020100000101010001010000250100
+006301000063010000220100061301000600040e060000000623010006030202010103ff
+03cc01010202060301000e0109130100090301000902010009140b010007010000050100
+000201000001010000090100000101000002010000010100000201000001010000020100
+002c01000007010000020100000501000001010000090100000101000007010000070100
+00010100000201000025010000630100006301000022010006140100040e000006240100
+06030202010103ff03cc01010202060301000e0109120100090401000902010009140b01
+000801020002010000020100000201020003010300010100000201000001010000020100
+00010104002c010000080100000001000003010300020102000301030002010200040100
+00040103000101000002010000250100006301000063010000220100061301000600040e
+060000000623010006030202010103ff03cc01010202060301000e010911010009020100
+090101000902010009140b01000b01000001010000020100000501000001010000020100
+000101000002010000010100000201000001010000300100000801000000010000020100
+000201000005010000010100000201000005010000030100000301000002010000010100
+000201000025010000630100006301000022010006140100040e00000624010006030202
+010103ff03cc01010202060301000e01091101040902010209150b010007010000020100
+000101000001010100010100000201000001010000020100000101000002010000010100
+000201000001010000020100002c01000009010000030100000201000001010000020100
+000101000002010000010100000201000003010000030100000201000001010000020100
+00250100006301000063010000220100061301000600040e060000000623010006030202
+010103ff03cc01010202060301000e0109320b0100080102000301010000010000020102
+000301030001010000020100000101000002010000020102002d01000009010000040103
+000201020003010300020102000501010002010300010100000201000025010000630100
+006301000022010006140100040e00000624010006030202010103ff03cc010102020603
+01000e0109320b010063010000630100006301000063010000220100061301000600040e
+060000000623010006030202010103ff03cc01010202060301000e0109320b0100630100
+0063010000630100006301000022010006140100040e00000624010006030202010103ff
+03cc01010202060301000e0109320b010063010000630100006301000063010000220100
+061301000600040e060000000623010006030202010103ff03cc01010202060301000e01
+09320b01006301000063010000630100006301000022010006140100040e000006240100
+06030202010103ff03cc01010202060301000e0109320b01006301000063010000630100
+0063010000220100061301000600040e060000000623010006030202010103ff03cc0101
+0202060301000e010b34006301000063010000630100006301000022010006140100040e
+00000624010006030202010103ff03cc01010202060301000e000b3501ff01b706130100
+0600040e060000000623010006030202010103ff03cc0101020206030100060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000630100
+006301000063010000630100002201000614010006000000060000000600000006000000
+060000000600000006000000060000000624010006030202010103ff03cc010102020603
+01ff01ef0613010006000000060000000600000006000000060000000600000006000000
+06000000060000000623010006030202010103ff03cc010102020603010006ff06ff0639
+010006030202010103ff03cc010102020603010006ff06ff0639010006030202010103ff
+03cc010102020603010006ff06ff0639010006030202010103ff03cc0101020206030100
+06ff06ff0639010006030202010103ff03cc010102020603010006ff06ff063901000603
+0202010103ff03cc010102020603010006ff06ff0639010006030202010103ff03cc0101
+02020603010006ff06ff0639010006030202010103ff03cc010102020603010006ff06ff
+0639010006030202010103ff03cc01010202060301000649010006ff06ee010006030202
+010103ff03cc01010202060301000648010106ff06ee010006030202010103ff03cc0101
+020206030100064701000600010006ff06ee010006030202010103ff03cc010102020603
+01000649010006ff06ee010006030202010103ff03cc01010202060301000649010006ff
+06ee010006030202010103ff03cc01010202060301000649010006ff06ee010006030202
+010103ff03cc01010202060301000649010006ff06ee010006030202010103ff03cc0101
+0202060301000649010006ff06ee010006030202010103ff03cc01010202060301000647
+010406ff06ec010006030202010103ff03cc010102020603010006ff06ff063901000603
+0202010103ff03cc010102020603010006ff06ff0639010006030202010103ff03cc0101
+02020603010006ff06ff0639010006030202010103ff03cc010102020603010006ff06ff
+0639010006030202010103ff03cc010102020603010006ff06ff06390100060302020101
+03ff03cc0101020206030100063801000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100064b010006030202010103ff
+03cc01010202060301000637010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+0100060001000600010006000100060001000600010006000000064a0100060302020101
+03ff03cc0101020206030100063801000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+0600000004ff04940000064b010006030202010103ff03cc010102020603010006370100
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060004ff049406000000064a
+010006030202010103ff03cc01010202060301000638010006000000060c0000060c0100
+04ff04940000064b010006030202010103ff03cc01010202060301000637010006000000
+060c0100060c0100060004ff049406000000064a010006030202010103ff03cc01010202
+060301000638010006000000060c0000060c010004ff04940000064b0100060302020101
+03ff03cc01010202060301000637010006000000060c0100060c0100060004ff04940600
+0000064a010006030202010103ff03cc01010202060301000638010006000000060c0000
+060c010004ff04940000064b010006030202010103ff03cc010102020603010006370100
+06000000060c0100060c0100060004ff049406000000064a010006030202010103ff03cc
+01010202060301000638010006000000060c0000060c010004ff04940000064b01000603
+0202010103ff03cc01010202060301000637010006000000060c0100060c0100060004ff
+049406000000064a010006030202010103ff03cc01010202060301000638010006000000
+060c0000060c010004ff04940000064b010006030202010103ff03cc0101020206030100
+0637010006000000060c0100060c0100060004ff049406000000064a0100060302020101
+03ff03cc01010202060301000638010006000000060c0000060c010004ff04940000064b
+010006030202010103ff03cc010102020603010006370100060000000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060004ff049406000000064a010006030202010103ff03cc
+010102020603010006380100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+04ff04940000064b010006030202010103ff03cc01010202060301000637010006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+0600000006000000064a010006030202010103ff03cc0101020206030100063800000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000064b010006030202010103ff03cc010102020603010006ff06ff06390100
+06030202010103ff03cc010102020603010006ff06ff0639010006030202010103ff03cc
+010102020603010006ff06ff0639010006030202010103ff03cc010102020603010006ff
+06ff0639010006030202010103ff03cc010102020603010006ff06ff0639010006030202
+010103ff03cc010102020603010006ff06ff0639010006030202010103ff03cc01010202
+0603010006ff06ff0639010006030202010103ff03cc010102020603010006ff06ff0639
+010006030202010103ff03cc010102020603010006ff06ff0639010006030202010103ff
+03cc010102020603010006ff06ff0639010006030202010103ff03cc0101020206030100
+06ff06ff0639010006030202010103ff03cc010102020603010006ff06ff063901000603
+0202010103ff03cc010102020603010006ff06ff0639010006030202010103ff03cc0101
+02020603010006ff06ff0639010006030202010103ff03cc010102020603010006ff06ff
+0639010006030202010103ff03cc010102020603010006ff06ff06390100060302020101
+03ff03cc010102020603010006ff06ff0639010006030202010103ff03cc010102020603
+010006ff06ff0639010006030202010103ff03cc010102020603010006ff06ff06390100
+06030202010103ff03cc010102020603010006ff06ff0639010006030202010103ff03cc
+010102020603010006ff06ff0639010006030202010103ff03cc010102020603010006ff
+06ff0639010006030202010103ff03cc010102020603010006ff06ff0639010006030202
+010103ff03cc010102020603010006ff06ff0639010006030202010103ff03cc01010202
+0603010006ff06ff0639010006030202010103ff03cc010102020603010006ff06ff0639
+010006030202010103ff03cc010102020603010006ff06ff0639010006030202010103ff
+03cc010102020603010006ff06ff0639010006030202010103ff03cc0101020206030100
+06ff06ff0639010006030202010103ff03cc010102020603010006ff06ff063901000603
+0202010103ff03cc010102020603010006ff06ff0639010006030202010103ff03cc0101
+02020603010006ff06ff0639010006030202010103ff03cc010102020603010006ff06ff
+0639010006030202010103ff03cc00040603010006ff06ff063901000603000403ff03cc
+000002020500060301ff01ff013b060300000202050003ff03cc00000202050006ff06ff
+064300000202050003ff03cc00000202050006ff06ff064300000202050003ff03cc0000
+0202050006ff06ff064300000202050003ff03cc00000202050006ff06ff064300000202
+050003ff03cc000002020500000502ff02ff023700060202050003ff03cc000002080500
+02ff02ff023700000208050003ff03cc00000208050002ff02ff023700000208050003ff
+03cc00000208050001ff01ff013700000208050003ff03cc0000050901ff01ff01370000
+050903ff03ff03ff03ff03ff03ff03ff03ff0337
+%%EndData
+end
+%%PageTrailer
+%%Trailer
+%%BoundingBox: 0 34 400 249
+%%EOF
diff --git a/lib/tv/doc/src/tv_search_window.gif b/lib/tv/doc/src/tv_search_window.gif
new file mode 100644
index 0000000000..d6e72dda2f
--- /dev/null
+++ b/lib/tv/doc/src/tv_search_window.gif
Binary files differ
diff --git a/lib/tv/doc/src/tv_search_window.ps b/lib/tv/doc/src/tv_search_window.ps
new file mode 100644
index 0000000000..a6dd2ef9fc
--- /dev/null
+++ b/lib/tv/doc/src/tv_search_window.ps
@@ -0,0 +1,975 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (ImageMagick)
+%%Title: (/clearcase/otp/erts/lib/tv/doc/src/tv_search_window.eps)
+%%CreationDate: (Mon Mar 19 17:15:21 2001)
+%%BoundingBox: 0 0 228 183
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 0
+%%EndComments
+
+%%BeginDefaults
+%%PageOrientation: Portrait
+%%EndDefaults
+
+%%BeginProlog
+%
+% Display a color image. The image is displayed in color on
+% Postscript viewers or printers that support color, otherwise
+% it is displayed as grayscale.
+%
+/buffer 512 string def
+/byte 1 string def
+/color_packet 3 string def
+/pixels 768 string def
+
+/DirectClassPacket
+{
+ %
+ % Get a DirectClass packet.
+ %
+ % Parameters:
+ % red.
+ % green.
+ % blue.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/DirectClassImage
+{
+ %
+ % Display a DirectClass image.
+ %
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { DirectClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayDirectClassPacket } image
+ } ifelse
+} bind def
+
+/GrayDirectClassPacket
+{
+ %
+ % Get a DirectClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % red
+ % green
+ % blue
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/GrayPseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassImage
+{
+ %
+ % Display a PseudoClass image.
+ %
+ % Parameters:
+ % class: 0-PseudoClass or 1-Grayscale.
+ %
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ class 0 gt
+ {
+ currentfile buffer readline pop
+ token pop /depth exch def pop
+ /grays columns 8 add depth sub depth mul 8 idiv string def
+ columns rows depth
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { currentfile grays readhexstring pop } image
+ }
+ {
+ %
+ % Parameters:
+ % colors: number of colors in the colormap.
+ % colormap: red, green, blue color packets.
+ %
+ currentfile buffer readline pop
+ token pop /colors exch def pop
+ /colors colors 3 mul def
+ /colormap colors string def
+ currentfile colormap readhexstring pop pop
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { PseudoClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayPseudoClassPacket } image
+ } ifelse
+ } ifelse
+} bind def
+
+/DisplayImage
+{
+ %
+ % Display a DirectClass or PseudoClass image.
+ %
+ % Parameters:
+ % x & y translation.
+ % x & y scale.
+ % label pointsize.
+ % image label.
+ % image columns & rows.
+ % class: 0-DirectClass or 1-PseudoClass.
+ % compression: 0-RunlengthEncodedCompression or 1-NoCompression.
+ % hex color packets.
+ %
+ gsave
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ x y translate
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ currentfile buffer readline pop
+ token pop /pointsize exch def pop
+ /Helvetica findfont pointsize scalefont setfont
+ x y scale
+ currentfile buffer readline pop
+ token pop /columns exch def
+ token pop /rows exch def pop
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ currentfile buffer readline pop
+ token pop /compression exch def pop
+ class 0 gt { PseudoClassImage } { DirectClassImage } ifelse
+ grestore
+} bind def
+%%EndProlog
+%%Page: 1 1
+%%PageBoundingBox: 0 0 228 183
+userdict begin
+%%BeginData:
+DisplayImage
+0 0
+228.000000 183.000000
+12
+455 365
+1
+0
+0
+8
+ffffff
+000000
+d8d8d8
+c2c2c2
+6b6b6b
+d9d9d9
+aa2455
+999999
+000a01ff01b0000b0208040001ff01b000000208040000000208040002ff02b000000208
+0400000002080400020000ff00ad040002000000020804000000020204060200000004ff
+04ad020000000405020204000000020204000209000d02ff02a400000202040000000202
+040002080000020d0400029001030211010302330101021501010206010102a100000202
+040000000202040002080000020d04000290010102020107020001010203010102010101
+020e010302200101020c0103020401010206010102110100028e00000202040000000202
+040002080000020d04000290010102050101020301010203010102010101020d01010201
+0101021f0101020b0101020101010203010102190101028e000002020400000002020400
+0208000002020406020304000290010102050101020301010203010102010101020d0101
+020601030203010302020101020001010201010302020101020001010207010102030101
+020201010200010102030101020201030203010302000104028c00000202040000000403
+020800000202040003040000020304000290010102050101020401010202010002020101
+020d01020204010102010101020101010201010102010101020001010200010102010101
+020101020200010102060101020301010202010202000101020201010201010102010101
+020101010201010102000101028e000004030101020b0000020304000302000002040400
+0290010102050101020401010201010102020101020e0103020201010201010102050101
+020101020202010102050101020101010206010102030101020201010201010102020101
+0201010102010101020101010204010102910103020b0000020304000302000002040400
+029001010205010102050101020001000203010102100102020101050202010402010101
+020301010205010102010101020601010203010102020101020101010202010102010105
+020101010204010102910103020b00000204040003000000020504000290010102050101
+020501030203010102110101020101010205010102010101020101010203010102050101
+020101010206010102030101020201010201010102020101020101010205010102040101
+02910103020b000002040400030000000205040002900101020501010206010102040101
+020d01010201010102010101020201000201010102010101020101010203010102020100
+020101010201010102070101020101010203010102010101020201010201010102020100
+02010101020201000200010102910103020b000002050000020604000290010102050101
+0206010102040101020e0103020301030203010202000101020001010204010302020101
+02010101020801030204010402030101020201030203010302020102028f0103020b0000
+020d040002900103021101030254010102a40103020b0000020d040002fd010202a50103
+020b0000020d040002ff02a60103020c040d02ff02a7010302ff02c2010302ff02c20103
+020200ff00bb0400020201030202000004ff04bb0202010302ff02c20103020205ff05bc
+02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc020201030202
+05ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc0202
+0103020205ff05bc02020103020205ff05bc020201030202050800000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000508020201030202050700000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500010005070202010302020508000005ff05a8
+010005080202010302020507000005ff05aa010005070202010302020508000005ff05a8
+010005080202010302020507000005ff05aa010005070202010302020508000005ff05a8
+010005080202010302020507000005ff05aa010005070202010302020508000005ff05a8
+010005080202010302020507000005ff05aa010005070202010302020508000005ff05a8
+010005080202010302020507000005ff05aa010005070202010302020508000005ff05a8
+010005080202010302020507000005ff0549000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005110100
+05070202010302020508000005ff05470000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000051101000508
+0202010302020507000005ff05490000054c010005110100050702020103020205080000
+05ff05470000054c010005110100050802020103020205070000050d0102051e0100050f
+010105ff05060000054c010005110100050702020103020205080000050b010005020100
+051d0100050e010005ff05070000054c010005110100050802020103020205070000050c
+010005060102050301020502010005000101050301020502010005000101050b01000504
+010205020100050001010504010105f20000054c01000511010005070202010302020508
+0000050c0100050401000502010005010100050201000501010105010100050101000502
+0100050101010501010005080104050101000502010005010101050101000503010105f1
+0000054c010005110100050802020103020205070000050e010105020100050201000505
+010005010100050501000505010005020100050a010005030100050201000501010005fc
+0000054c010005110100050702020103020205080000050f010005010104050201030501
+0100050501000505010005020100050a010005030100050201000501010005fb00000512
+0102051e01000516010005110100050802020103020205070000050c0100050201000501
+0100050501000502010005010100050501000505010005020100050a0100050301000502
+01000501010005fc00000510010005020100051d01000517010005110100050702020103
+020205080000050b01000502010005010100050201000501010005020100050101000505
+0100050201000501010005020100050a01000503010005020100050101000507010105f1
+000005110100050601020503010205020100050001010503010205020100050001010513
+010005110100050802020103020205070000050d01020503010205030103050101000506
+01020502010005020100050a010005040102050201000507010105f20000051101000504
+010005020100050101000502010005010101050101000501010005020100050101010501
+0100051301000511010005070202010302020508000005ff054700000513010105020100
+050201000505010005010100050501000505010005020100051201000511010005080202
+010302020507000005ff0549000005140100050101040502010305010100050501000505
+010005020100051301000511010005070202010302020508000005ff0547000005110100
+050201000501010005050100050201000501010005050100050501000502010005120100
+0511010005080202010302020507000005ff054900000510010005020100050101000502
+010005010100050201000501010005050100050201000501010005020100051301000511
+010005070202010302020508000005ff0547000005120102050301020503010305010100
+050601020502010005020100051201000511010005080202010302020507000005ff0549
+0000054c01000511010005070202010302020508000005ff05470000054c010005110100
+050802020103020205070000050901ff012c05120000054c010005110100050702020103
+020205080000050801ff012c05110000054c010005110100050802020103020205070000
+0509010107ff0728010105120000054c0100051101000507020201030202050800000508
+010107ff07270000010105110000054c0100051101000508020201030202050700000509
+0101070100ff0026010105120000054c0100051101000507020201030202050800000508
+0101070100ff0026010105110000054c0100051101000508020201030202050700000509
+0101070100ff0026010105120000054c0100051101000507020201030202050800000508
+010107010000030000000300000003000000030000000300000003000000030000000300
+000003000000030000000300000003000000030000000300000003000000030000000300
+000003000000030000000300000003000000030000000300000003000000030000000300
+000003000000030000000300000003000000030000000300000003000000030000000300
+000003000000030000000300000003000000030000000300000003000000030000000300
+000003000000030000000300000003000000030000000300000003000000030000000300
+000003000000030000000300000003000000030000000300000003000000030000000300
+000003000000030000000300000003000000030000a0010105110000054c010005110100
+05080202010302020507000005090101070103840101009f010105120000050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100051101000507020201030202050800000508010107010000030401000377
+010003040101009f01010511000005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005110100050802020103
+0202050700000509010107010304010003030102031e0100034001000310010003030101
+009f01010573010005070202010302020508000005080101070100000302010003030100
+03020100031d01000353010003020101009f010105720100050802020103020205070000
+050901010701030201000304010003060102030301020302010003000101030301020302
+010003000101030a01020302010003020100030101000300010103020100030001010303
+01020303010203030102030301020303010203020100030001010304010003010101009f
+010105730100050702020103020205080000050801010701000003000100030601000304
+010003020100030101000302010003010101030101000301010003020100030101010301
+010003080100030201000301010003020100030101010301010003010101030101000301
+010003020100030101000302010003010100030201000304010003020100030201000301
+0101030101000304010003000101009f0101057201000508020201030202050700000509
+010107010300010003080101030201000302010003050100030101000305010003050100
+030201000308010003020100030201000300010003020100030201000301010003050100
+030201000301010003050100030801000302010003020100030101000302010003050102
+009f01010573010005070202010302020508000005080101070100000300010003090100
+030101040302010303010100030501000305010003020100030801040303010003030100
+030201000301010003050104030201020303010203050100030201000302010003010100
+030201000304010003000101009f01010572010005080202010302020507000005090101
+070103020100030401000302010003010100030501000302010003010100030501000305
+010003020100030801000306010003000100030201000302010003010100030501000309
+01000305010003040100030201000302010003010100030201000303010003010101009f
+010105730100050702020103020205080000050801010701000003020100030301000302
+010003010100030201000301010003020100030101000305010003020100030101000302
+010003080100030201000301010003020100030101010301010003010100030501000302
+010003010100030201000301010003020100030401000302010003020100030101000302
+01000302010003020101009f010105720100050802020103020205070000050901010701
+030401000303010203030102030301030301010003060102030201000302010003090102
+030201000302010003010100030001010302010003060102030301020303010203050100
+0303010203020100030201000301010003030101009f0101057301000507020201030202
+05080000050801010701000003040100034001000335010003040101009f010105720100
+05080202010302020507000005090101070103470100033b0101009f0101051200000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000511010005070202010302020508000005080101070100000346
+0100033b0101009f01010511000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005110100050802020103
+020205070000050901010701030001000300010003000100030001000300010003000100
+030001000300010003000100030001000300010003000100030001000300010003000100
+030001000300010003000100030001000300010003000100030001000300010003000100
+030001000300010003000100030001000300010003000100030001000300010003000100
+030001000300010003000100030001000300010003000100030001000300010003000100
+030001000300010003000100030001000300010003000100030001000300010003000100
+030001000300010003000100030001000300010003000100030001000300010003000100
+030001000300010003000100030001000300010003000100030001000300009f01010512
+0000054c01000511010005070202010302020508000005080101070100ff002601010511
+0000054c01000511010005080202010302020507000005090101070100ff002601010512
+0000054c01000511010005070202010302020508000005080101070100ff002601010511
+0000054c01000511010005080202010302020507000005090101070100ff002601010512
+0000054c01000511010005070202010302020508000005080101070000ff002701010511
+0000054c010005110100050802020103020205070000050901ff012c05120000054c0100
+05110100050702020103020205080000050801ff012c0511000005120102051f01020513
+01000511010005080202010302020507000005ff05490000051001000502010005200100
+051401000511010005070202010302020508000005ff0547000005110100050201000502
+010205020100050001010503010205030102050501000513010005110100050802020103
+02020507000005ff05490000051001000505010005020100050101010501010005010100
+050201000501010005020100050401000514010005110100050702020103020205080000
+05ff05470000051101000509010005010100050201000501010005050100050201000504
+0100051301000511010005080202010302020507000005ff054900000510010005060103
+050101000502010005010100050501040504010005140100051101000507020201030202
+0508000005ff054700000511010005020100050101000502010005010100050201000501
+01000505010005080100051301000511010005080202010302020507000005ff05490000
+051001000502010005010100050201000501010005020100050101000502010005010100
+0502010005040100051401000511010005070202010302020508000005ff054700000512
+010205030103050101000502010005020102050301020505010005130100051101000508
+0202010302020507000005ff05490000054c010005110100050702020103020205080000
+05ff05470000054c01000511010005080202010302020507000005ff05490000054c0100
+0511010005070202010302020508000005ff05470000054c010005110100050802020103
+02020507000005ff05490000054c01000511010005070202010302020508000005ff0547
+0000054c01000511010005080202010302020507000005ff05490000054c010005110100
+05070202010302020508000005ff05470000054c01000511010005080202010302020507
+0000052201000563000005c00000054c0100051101000507020201030202050800000520
+01000500010005230100053c000005000000053e0102054b0100052f0000054c01000511
+010005080202010302020507000005200100050001000500010005220100053b00000500
+000005000000053f0100057d000005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005110100050702020103
+020205080000051e010005000601010005000100050b0102050301020509010405020102
+05020100050001010502010105000100052400000502000005000000050b010205030102
+050901000500010105030102050301010500010005010100050201000504010005030102
+0502010005000101050a0102050201000502010005010100050001010502010005000101
+050301020503010205030102050301020503010205020100050001010521000005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005110100050802020103020205070000051e01000500060301000500
+010005090100050201000501010005020100050a01000503010005020100050101010501
+010005010100050001000500010005220000050400000500000005090100050201000501
+010005020100050801010501010005010100050201000501010005010101050101000502
+010005040100050201000502010005010101050101000508010005020100050101000502
+010005010101050101000501010105010100050101000502010005010100050201000501
+010005020100050401000502010005020100050101010501010005820100050702020103
+020205080000051c010005000605010005000100050c010005010100050e010005030100
+0502010005010100050501000500010005000100052100000506000005000000050c0100
+05010100050c010005050100050201000501010005020100050101000502010005040100
+0506010005010100050c0100050201000502010005000100050201000502010005010100
+050501000502010005010100050501000508010005020100050201000501010005020100
+05810100050802020103020205070000051c000005000607000005000000050801030502
+0102050b0100050301040501010005050100050001000500010005200100050801000500
+010005080103050201020509010005050104050101000502010005010100050201000504
+01000503010305010100050c010405030100050301000502010005010100050501040502
+010205030102050501000502010005020100050101000502010005820100050702020103
+020205080000051c000005000605000005000000050801000502010005050100050a0100
+050301000505010005050100050001000500010005210100050601000500010005080100
+050201000505010005080100050501000505010005020100050101000502010005040100
+050201000502010005010100050c01000506010005000100050201000502010005010100
+050501000509010005050100050401000502010005020100050101000502010005810100
+050802020103020205070000051e00000500060300000500000005090100050201000501
+010005020100050a01000503010005020100050101000505010005000100050001000522
+010005040100050001000509010005020100050101000502010005080100050501000502
+01000501010005010101050101000501010105040100050201000502010005010100050c
+010005020100050101000502010005010101050101000501010005050100050201000501
+010005020100050101000502010005040100050201000502010005010100050201000582
+0100050702020103020205080000051e000005000601000005000000050b010305020102
+050c01010502010205020100050501000500010005000100052301000502010005000100
+050b01030502010205090100050601020503010105000100050201010500010005040100
+0503010305010100050d0102050201000502010005010100050001010502010005060102
+050301020503010205050100050301020502010005020100058101000508020201030202
+05070000052000000500000005000000055f010005000100050001000532010005320100
+05b7010005070202010302020508000005200000050000000561010005000100052f0100
+050201000532010005b60100050802020103020205070000052200000563010005310102
+0533010005b7010005070202010302020508000005ff05a8010005080202010302020507
+000005ff05aa010005070202010302020508000005ff05a8010005080202010302020507
+000005ff05aa010005070202010302020508000005ff05a8010005080202010302020507
+000005ff05aa010005070202010302020508000005ff05a8010005080202010302020507
+000005ff05aa010005070202010302020508000005ff05a8010005080202010302020507
+000005ff05aa010005070202010302020508000005ff05a8010005080202010302020507
+000005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050702020103
+020205080100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050802020103
+020205ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc
+02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc020201030202
+05ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05a10100
+050001000500010005000100050001000500010005000100050001000500010005090202
+0103020205ff05a001000500010005000100050001000500010005000100050001000500
+010005000100050000000508020201030202050707ff0796050201000506010005060000
+0509020201030202050707ff079500000501010005060000050800000508020201030202
+0507070100ff009405020100050601000506000005090202010302020507070100ff0094
+0501010005060000050001000506000005080202010302020507070100ff009405020100
+05040000050201000504000005090202010302020507070100ff00940501010005040000
+050201000506000005080202010302020507070100ff0094050201000504000005020100
+0504000005090202010302020507070100ff009405010100050400000504010005040000
+05080202010302020507070100ff00940502010005020000050601000502000005090202
+010302020507070100ff0094050101000502000005060100050400000508020201030202
+0507070100ff009405020100050200000506010005020000050902020103020205070701
+00ff00940501010005020000050801000502000005080202010302020507070100ff0094
+0502010005000000050a01000500000005090202010302020507070100ff009405010100
+050000000500010005000100050001000500010005000100050001000502000005080202
+010302020507070100ff0094050201000500010005000100050001000500010005000100
+05000100050001000500000005090202010302020507070100ff00940501010005100000
+05080202010302020507070100ff00940502010005000000050000000500000005000000
+0500000005000000050000000500000005090202010302020507070100ff009405010100
+050000000500000005000000050000000500000005000000050000000500010005000000
+05080202010302020507070100ff00940502010005000000050a01000500000005090202
+010302020507070100ff00940501010005000000050c0100050000000508020201030202
+0507070100ff00940502010005000000050a010005000000050902020103020205070701
+00ff00940501010005000000050c01000500000005080202010302020507070100ff0094
+0502010005000000050a01000500000005090202010302020507070100ff009405010100
+05000000050c01000500000005080202010302020507070100ff00940502010005000000
+050a01000500000005090202010302020507070100ff00940501010005000000050c0100
+0500000005080202010302020507070100ff00940502010005000000050a010005000000
+05090202010302020507070100ff00940501010005000000050c01000500000005080202
+010302020507070100ff00940502010005000000050a0100050000000509020201030202
+0507070100ff00940501010005000000050c010005000000050802020103020205070701
+00ff00940502010005000000050a01000500000005090202010302020507070100ff0094
+0501010005000000050c01000500000005080202010302020507070100ff009405020100
+05000000050a01000500000005090202010302020507070100ff00940501010005000000
+050c01000500000005080202010302020507070100ff00940502010005000000050a0100
+0500000005090202010302020507070100ff00940501010005000000050c010005000000
+05080202010302020507070100ff00940502010005000000050a01000500000005090202
+010302020507070100ff00940501010005000000050c0100050000000508020201030202
+0507070100ff00940502010005000000050a010005000000050902020103020205070701
+00ff00940501010005000000050c01000500000005080202010302020507070100ff0094
+0502010005000000050a01000500000005090202010302020507070100ff009405010100
+05000000050c01000500000005080202010302020507070100ff00940502010005000000
+050a01000500000005090202010302020507070100ff00940501010005000000050c0100
+0500000005080202010302020507070100ff00940502010005000000050a010005000000
+05090202010302020507070100ff00940501010005000000050c01000500000005080202
+010302020507070100ff00940502010005000000050a0100050000000509020201030202
+0507070100ff00940501010005000000050c010005000000050802020103020205070701
+00ff00940502010005000000050a01000500000005090202010302020507070100ff0094
+0501010005000000050c01000500000005080202010302020507070100ff009405020100
+05000000050a01000500000005090202010302020507070100ff00940501010005000000
+050c01000500000005080202010302020507070100ff00940502010005000000050a0100
+0500000005090202010302020507070100ff00940501010005000000050c010005000000
+05080202010302020507070100ff00940502010005000000050a01000500000005090202
+010302020507070100ff00940501010005000000050c0100050000000508020201030202
+0507070100ff00940502010005000000050a010005000000050902020103020205070701
+00ff00940501010005000000050c01000500000005080202010302020507070100ff0094
+0502010005000000050a01000500000005090202010302020507070100ff009405010100
+05000000050c01000500000005080202010302020507070100ff00940502010005000000
+050a01000500000005090202010302020507070100ff00940501010005000000050c0100
+0500000005080202010302020507070100ff00940502010005000000050a010005000000
+05090202010302020507070100ff00940501010005000000050c01000500000005080202
+010302020507070100ff00940502010005000000050a0100050000000509020201030202
+0507070100ff00940501010005000000050c010005000000050802020103020205070701
+00ff00940502010005000000050a01000500000005090202010302020507070100ff0094
+0501010005000000050c01000500000005080202010302020507070100ff009405020100
+05000000050a01000500000005090202010302020507070100ff00940501010005000000
+050c01000500000005080202010302020507070100ff00940502010005000000050a0100
+0500000005090202010302020507070100ff00940501010005000000050c010005000000
+05080202010302020507070100ff00940502010005000000050a01000500000005090202
+010302020507070100ff00940501010005000000050c0100050000000508020201030202
+0507070100ff00940502010005000000050a010005000000050902020103020205070701
+00ff00940501010005000000050c01000500000005080202010302020507070100ff0094
+0502010005000000050a01000500000005090202010302020507070100ff009405010100
+05000000050c01000500000005080202010302020507070100ff00940502010005000000
+050a01000500000005090202010302020507070100ff00940501010005000000050c0100
+0500000005080202010302020507070100ff00940502010005000000050a010005000000
+05090202010302020507070100ff00940501010005000000050c01000500000005080202
+010302020507070100ff00940502010005000000050a0100050000000509020201030202
+0507070100ff00940501010005000000050c010005000000050802020103020205070701
+00ff00940502010005000000050a01000500000005090202010302020507070100ff0094
+0501010005000000050c01000500000005080202010302020507070100ff009405020100
+05000000050a01000500000005090202010302020507070100ff00940501010005000000
+050c01000500000005080202010302020507070100ff00940502010005000000050a0100
+0500000005090202010302020507070100ff00940501010005000000050c010005000000
+05080202010302020507070100ff00940502010005000000050a01000500000005090202
+010302020507070100ff00940501010005000000050c0100050000000508020201030202
+0507070100ff00940502010005000000050a010005000000050902020103020205070701
+00ff00940501010005000000050c01000500000005080202010302020507070100ff0094
+0502010005000000050a01000500000005090202010302020507070100ff009405010100
+05000000050c01000500000005080202010302020507070100ff00940502010005000000
+050a01000500000005090202010302020507070100ff00940501010005000000050c0100
+0500000005080202010302020507070100ff00940502010005000000050a010005000000
+05090202010302020507070100ff00940501010005000000050c01000500000005080202
+010302020507070100ff00940502010005000000050a0100050000000509020201030202
+0507070100ff00940501010005000000050c010005000000050802020103020205070701
+00ff00940502010005000000050a01000500000005090202010302020507070100ff0094
+0501010005000000050c01000500000005080202010302020507070100ff009405020100
+05000000050a01000500000005090202010302020507070100ff00940501010005000000
+050c01000500000005080202010302020507070100ff00940502010005000000050a0100
+0500000005090202010302020507070100ff00940501010005000000050c010005000000
+05080202010302020507070100ff00940502010005000000050a01000500000005090202
+010302020507070100ff00940501010005000000050c0100050000000508020201030202
+0507070100ff00940502010005000000050a010005000000050902020103020205070701
+00ff00940501010005000000050c01000500000005080202010302020507070100ff0094
+0502010005000000050a01000500000005090202010302020507070100ff009405010100
+05000000050c01000500000005080202010302020507070100ff00940502010005000000
+050a01000500000005090202010302020507070100ff00940501010005000000050c0100
+0500000005080202010302020507070100ff00940502010005000000050a010005000000
+05090202010302020507070100ff00940501010005000000050c01000500000005080202
+010302020507070100ff00940502010005000000050a0100050000000509020201030202
+0507070100ff00940501010005000000050c010005000000050802020103020205070701
+00ff00940502010005000000050a01000500000005090202010302020507070100ff0094
+050101000500000005000100050001000500010005000100050001000500010005000100
+0500000005080202010302020507070100ff009405020100050001000500010005000100
+050001000500010005000100050001000500000005090202010302020507070100ff0094
+050101000510000005080202010302020507070100ff0094050201000500000005000000
+050000000500000005000000050000000500000005000000050902020103020205070701
+00ff00940501010005020000050000000500000005000000050000000500000005000100
+0500000005080202010302020507070100ff00940502010005000000050a010005000000
+05090202010302020507070100ff00940501010005020000050801000502000005080202
+010302020507070100ff0094050201000502000005060100050200000509020201030202
+0507070100ff009405010100050400000506010005020000050802020103020205070701
+00ff00940502010005020000050601000502000005090202010302020507070100ff0094
+0501010005040000050401000504000005080202010302020507070100ff009405020100
+05040000050201000504000005090202010302020507070100ff00940501010005060000
+050201000504000005080202010302020507070100ff0094050201000504000005020100
+0504000005090202010302020507070100ff009405010100050600000500010005060000
+05080202010302020507070100ff00940502010005060100050600000509020201030202
+0507070100ff009405010100050801000506000005080202010302020507070000ff0095
+050201000506010005060000050902020103020205ff05a0010005000000050000000500
+0000050000000500000005000000050000000500000005000000050802020103020205ff
+05a100000500000005000000050000000500000005000000050000000500000005000000
+050902020103020205060100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005180202010302020505010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500000005170202010302020506010005100000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005020000
+050c0000051802020103020205050100050c000005000100050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050001000500000005000000
+050c0000051702020103020205060100050a0000050001000502000005ff057601000502
+000005000000050000000508000005180202010302020505010005080000050000000502
+01000500000005ff05780100050000000502000005000000050800000517020201030202
+050601000506000005000000050201000502000005ff0576010005020000050400000500
+0000050400000518020201030202050501000504000005000000050601000500000005ff
+057801000500000005060000050000000504000005170202010302020506010005020000
+05000000050601000502000005ff05760100050200000508000005000000050000000518
+020201030202050501000500010005000100050a01000500000005ff0578010005000000
+050a01000500010005000000051702020103020205060100050201000500010005060100
+0502000005ff057601000502000005080100050001000500000005180202010302020505
+01000504010005000100050601000500000005ff05780100050000000506010005000100
+050400000517020201030202050601000506010005000100050201000502000005ff0576
+010005020000050401000500010005040000051802020103020205050100050801000500
+0100050201000500000005ff057801000500000005020100050001000508000005170202
+0103020205060100050a0100050001000502000005ff0576010005020000050001000500
+010005080000051802020103020205050100050c01000500010005000000050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050000000500
+0100050c0000051702020103020205060100051001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+01000500010005000100050001000500010005020100050c000005180202010302020505
+010005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005170202010302020506000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+00000500000005000000051802020103020205ff05bc02020103020205ff05bc02020103
+020205ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc
+02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc020201030202
+05ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc0202
+0103020205ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff
+05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc02020103
+020205ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc
+02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc020201030202
+05ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc0202
+0103020205ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff
+05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc02020103
+020205ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc
+02020101000405ff05bc00050202040005ff05bc00000202040000000202040005ff05bc
+00000202040000000202040005ff05bc00000202040000000202040005ff05bc00000202
+040000000202040005ff05bc000002020400000002020400000502ff02b0000602020400
+00000208040002ff02b000000208040000000208040002ff02b000000208040000000208
+040001ff01b00000020804000000040901ff01b000000409
+%%EndData
+end
+%%PageTrailer
+%%Trailer
+%%BoundingBox: 0 0 228 183
+%%EOF
diff --git a/lib/tv/doc/src/tv_start.gif b/lib/tv/doc/src/tv_start.gif
new file mode 100644
index 0000000000..7a8a0cf6ce
--- /dev/null
+++ b/lib/tv/doc/src/tv_start.gif
Binary files differ
diff --git a/lib/tv/doc/src/tv_start.ps b/lib/tv/doc/src/tv_start.ps
new file mode 100644
index 0000000000..7dae8e4a5a
--- /dev/null
+++ b/lib/tv/doc/src/tv_start.ps
@@ -0,0 +1,828 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (ImageMagick)
+%%Title: (./tv_start.tmp.eps)
+%%CreationDate: (Tue Jun 12 16:02:24 2001)
+%%BoundingBox: 0 42 377 247
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 0
+%%EndComments
+
+%%BeginDefaults
+%%PageOrientation: Portrait
+%%EndDefaults
+
+%%BeginProlog
+%
+% Display a color image. The image is displayed in color on
+% Postscript viewers or printers that support color, otherwise
+% it is displayed as grayscale.
+%
+/buffer 512 string def
+/byte 1 string def
+/color_packet 3 string def
+/pixels 768 string def
+
+/DirectClassPacket
+{
+ %
+ % Get a DirectClass packet.
+ %
+ % Parameters:
+ % red.
+ % green.
+ % blue.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/DirectClassImage
+{
+ %
+ % Display a DirectClass image.
+ %
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { DirectClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayDirectClassPacket } image
+ } ifelse
+} bind def
+
+/GrayDirectClassPacket
+{
+ %
+ % Get a DirectClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % red
+ % green
+ % blue
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/GrayPseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassImage
+{
+ %
+ % Display a PseudoClass image.
+ %
+ % Parameters:
+ % class: 0-PseudoClass or 1-Grayscale.
+ %
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ class 0 gt
+ {
+ currentfile buffer readline pop
+ token pop /depth exch def pop
+ /grays columns 8 add depth sub depth mul 8 idiv string def
+ columns rows depth
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { currentfile grays readhexstring pop } image
+ }
+ {
+ %
+ % Parameters:
+ % colors: number of colors in the colormap.
+ % colormap: red, green, blue color packets.
+ %
+ currentfile buffer readline pop
+ token pop /colors exch def pop
+ /colors colors 3 mul def
+ /colormap colors string def
+ currentfile colormap readhexstring pop pop
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { PseudoClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayPseudoClassPacket } image
+ } ifelse
+ } ifelse
+} bind def
+
+/DisplayImage
+{
+ %
+ % Display a DirectClass or PseudoClass image.
+ %
+ % Parameters:
+ % x & y translation.
+ % x & y scale.
+ % label pointsize.
+ % image label.
+ % image columns & rows.
+ % class: 0-DirectClass or 1-PseudoClass.
+ % compression: 0-RunlengthEncodedCompression or 1-NoCompression.
+ % hex color packets.
+ %
+ gsave
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ x y translate
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ currentfile buffer readline pop
+ token pop /pointsize exch def pop
+ /Helvetica findfont pointsize scalefont setfont
+ x y scale
+ currentfile buffer readline pop
+ token pop /columns exch def
+ token pop /rows exch def pop
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ currentfile buffer readline pop
+ token pop /compression exch def pop
+ class 0 gt { PseudoClassImage } { DirectClassImage } ifelse
+ grestore
+} bind def
+%%EndProlog
+%%Page: 1 1
+%%PageBoundingBox: 0 42 377 247
+userdict begin
+%%BeginData:
+DisplayImage
+0 42
+377.000000 205.000000
+12
+755 410
+1
+0
+0
+16
+ffffff
+000000
+d8d8d8
+c2c2c2
+6b6b6b
+d9d9d9
+b22222
+828282
+aab6aa
+000000
+000000
+000000
+000000
+000000
+000000
+000000
+000a01ff01ff01dc000b0208040001ff01ff01dc00000208040000000208040002ff02ff
+02dc000002080400000002080400020000ff00ff00d90400020000000208040000000202
+04060200000004ff04ff04d9020000000405020204000000020204000209000d02ff02ff
+02d000000202040000000202040002080000020d040002f6010302110103023801010206
+0101024001010230010102ff020400000202040000000202040002080000020d040002f6
+010102020107020001010203010102010101020e0105020001070201010302070100020b
+01010206010102400101020c0104021e010102ff02040000020204000000020204000208
+0000020d040002f6010102050101020301010203010102010101020e0101020701010203
+01010201010102050101020b010102060101024e010102020101021d010102ff02040000
+0202040000000202040002080000020204060203040002f6010102050101020301010203
+010102010101020e01010207010102030101020801040201010302030101020001010203
+010102020103020301040206010302030101020001010207010102000101020101010203
+010302030101020201010200010102020101020101030202010102000101020101010203
+010302020101020001010201010102020103020201010202010102f30000020204000000
+04030208000002020400030400000203040002f601010205010102040101020201000202
+0101020e0101020701010203010202080101020201010201010102020102020001010202
+010102010101020101010201010102090101020101010202010202000101020601020200
+010202000101020101010201010102020101020201020200010102010101020001010200
+010102020102020001020200010102010101020101010201010102000101020101010201
+010102010101020101010202010102f3000004030101020b000002030400030200000204
+040002f6010102050101020401010201010102020101020e010402040101020401030206
+010102060101020201010201010102020101020101010201010102010102020801010201
+010102020101020101010206010102010101020101010205010102020101020201010201
+010102010101020001010200010102020101020101010201010102050101020101020203
+01010201010102010101020101010202010002f70103020b000002030400030200000204
+040002f6010102050101020501010200010002030101020e010102070101020601020205
+010102030104020201010201010102020101020101050202010302060101020101010202
+010102010101020601010201010102010101020201040202010102020101020101010201
+010102000101020001010202010102010101020101010202010402010101020401010201
+0105020201010200010102f70103020b000002040400030000000205040002f601010205
+01010205010302030101020e010102070101020701010205010102020101020101010202
+010102010101020201010201010102080102020501010201010102020101020101010206
+010102010101020101010201010102010101020201010202010102010101020101010201
+010102000101020101010201010102010101020101010201010102010101020401010201
+0101020601010200010002f80103020b000002040400030000000205040002f601010205
+01010206010102040101020e010102070101020301010201010102050101020201010201
+010102020101020101010202010102010101020201000205010102050101020101010202
+010102010101020601010201010102010101020101010201010102020101020201010201
+010102020101020701010201010102010101020101010201010102010101020401010201
+0101020201000203010202f80103020b0000020500000206040002f60101020501010206
+010102040101020e01050203010102040103020701020201010202000101020101040203
+010102020103020201040207010302030101020101010206010102010101020101010202
+010202000101020101010202010102010101020301050202010102010101020101010202
+0102020001010200010102040101020201030204010102f90103020b0000020d040002f6
+01030211010302c4010102fa0103020b0000020d040002ff02d5010102fa0103020b0000
+020d040002ff02ff02d20103020c040d02ff02ff02d3010302ff02ff02ee010302ff02ff
+02ee0103020200ff00ff00e70400020201030202000004ff04ff04e70202010302ff02ff
+02ee0103020200ff00ff00e802020103020200ff00ff00e70700020201030202000105ff
+05ff05e40701020201030202000105ff05ff05e40701020201030202000105ff05ff05e4
+0701020201030202000105ff05ff05e40701020201030202000105ff05ff05e407010202
+010302020001050b06040504060005030602051f0600050206000504060005270602050b
+06000506060005ff05ff053506000502060005090602051307010202010302020001050b
+0600050f0600051f060005020600052c060005020600050a060005ff05ff053d06000502
+0600050b0600051307010202010302020001050b06000506060205050600050306020518
+060005020600050206020503060205020600050206000517060005020600050106000500
+060105020604050206020503060205020600050006010503060205ff05ff052006000502
+060005020602050506000502060005000601050c07010202010302020001050b06000508
+060005050600050206000502060005180600050006000505060005020600050206000501
+060005020600051706000502060005010601050106000503060005060600050206000502
+06000501060105010600050106000502060005ff05ff051f060005020600050106000502
+0600050406000502060105010600050b07010202010302020001050b0603050506000505
+060005020600050206000518060005000600050506000502060005020600050106000500
+060005000600051706000502060005010600050206000503060005060600050206000502
+060005010600050206000501060005ff05ff052306040501060005020600050406000502
+060005020600050b07010202010302020001050b06000508060005050600050206040518
+060005000600050506000502060405010600050006000500060005170600050206000501
+0600050206000503060005060600050206000502060005010600050206000502060205ff
+05ff052006000502060005010604050406000502060005020600050b0701020201030202
+0001050b0600050806000505060005020600051d06000506060005020600050506000500
+060005000600051706000502060005010600050206000503060005060600050206000502
+060005010600050206000505060005ff05ff051f06000502060005010600050806000502
+060005020600050b07010202010302020001050b06000508060005050600050206000502
+060005190600050606000502060005020600050106000500060005000600051706000502
+060005010601050106000503060005060600050206000502060005010600050206000501
+06000502060005ff05ff051f060005020600050106000502060005040600050206010501
+0600050b07010202010302020001050b0600050806000505060005030602051a06000506
+060005030602050306000500060005190602050206000500060105050601050406000503
+060205020600050206000502060205ff05ff052006000502060005020602050506000502
+060005000601050c070102020103020200010576060005ff05ff055b0600050f07010202
+010302020001050a0606052a0606052a06060500060005ff05ff05450606050e0600050f
+07010202010302020001050a0606052a0606052a06060500060005ff05ff05450606050e
+0600050f0701020201030202000105ff05ff05e40701020201030202000105ff05ff05e4
+0701020201030202000105ff05ff05e40701020201030202000107ff07ff07e602020103
+0202000007ff07ff07e702020103020205ff05ff05e802020103020205ff05ff05e80202
+0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
+0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
+0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
+0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
+0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
+0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
+0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
+0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
+0103020205ff05ff05e802020103020205ff05ff05e8020201030202051c010205040103
+05c1010205040103051a0102057f01010505010205f001020504010305190101052f0202
+01030202050e01060508010005060101050f010205010102059b01060508010005060101
+0510010505040101054d010205240104050d0101051e0102052401020501010205930106
+0508010005060101051101030535020201030202050e0100050101010500010005070101
+050601000511010105010100059d01000501010105000100050701010506010005130101
+05060100054d0101050001010524010105000101050c0100051e01010500010105240101
+050101000595010005010101050001000507010105060100051101010501010105340202
+010302020510010105030103050201030503010105030103050801020500010105010103
+05000101050001000500010005020103058b010105030103050201030503010105030103
+050a010105030104054c0101050101050500010305000102050201030501010105000102
+05070101050101010500010305030104051d010105010105050001030500010205020103
+050101010500010205070102050001010501010305000101050001000500010005020103
+058301010503010305020103050301010503010305090101050101000500010305020105
+050101030521020201030202051001010506010105000101050101010502010105020101
+0501010105070100050001000500010005050101050001050500010105010101058a0101
+050601010500010105010101050201010502010105010101050901010502010105010101
+054c01000502010105000101050201000500010205000101050001010501010105010102
+050001000507010105010101050201010502010105010101051d01000502010105000101
+050201000500010205000101050001010501010105010102050001000507010005000100
+050001000505010105000105050001010501010105820101050601010500010105010101
+050201010502010105010101050801020504010105020101050001010501010105010101
+052002020103020205100100050401040500010105010101050201010501010605070100
+0500010205020104050001010500010005000107058a0100050401040500010105010101
+0502010105010106050901010501010105020101054b0101050201000501010105000100
+05000100050001010501010805010101050a0103050401010501010105020101051c0101
+05020100050101010500010005000100050001010501010805010101050a010005000102
+050201040500010105000100050001070582010005040104050001010501010105020101
+05010106050901020503010105040101050101060520020201030202050f010105020101
+0501010105000101050201010501010105020101050b0101050001010501010105010101
+05010100050001000500010005000101058e010105020101050101010500010105020101
+0501010105020101050d01010502010105010101054c0101050101010501010205000100
+05010100050201000500010105050101050a0101050601010502010105010101051d0101
+05010101050101020500010005010100050201000500010105050101050a010105000101
+050101010501010105010100050001000500010005000101058601010502010105010101
+05000101050201010501010105020101050b010105010101050201010503010105030101
+0525020201030202050f0101050201010501010105000101050101010502010105020101
+050101010507010005010101050101010501010105000101050001000500010005000101
+05010101058a010105020101050101010500010105010101050201010502010105010101
+050901010502010105010101054c01010500010105020103050101010501010105000101
+0501010105010101050a0101050601010502010105010101051d01010500010105020103
+0501010105010101050001010501010105010101050a0100050101010501010105010101
+050001010500010005000100050001010501010105820101050201010501010105000101
+050101010502010105020101050101010507010105010101050201010502010205000101
+05000101050101010521020201030202050e01030502010a050101050501010305070102
+0500010105020107050001000500010105000103058a01030502010a0501010505010103
+0508010505010105054c0102050301010500010005000103050001020500010305010104
+050701030503010505010105051d01020503010105000100050001030500010205000103
+05010104050701020500010105020107050001000500010105000103058201030502010a
+050101050501010305090103050101050500010505010103052202020103020205ff05ff
+05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff
+05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff
+05e8020201030202050201ff01ff01e205020202010302020503080000cb080001000081
+01010059010100c30101005801000711000005020202010302020503080000cb08000100
+000b0101004e0101002201010059010100c3010100580100070103060700030600010502
+0202010302020503080000cb08000100000a0100001c0100002a01000008010000210101
+000c0100002a0100001f010100c301010058010007010305000007000306000105020202
+0103020205030800001f0800000a080000060802009408000100000a0100000401020003
+0102000c010000040101000a010200030102000b0101000201000007010000210101000b
+010000040101000a010200030102000b010100020100001e010100c30101000a0101004b
+0100070103050000070103050001050202020103020205030800001f0800000a08000008
+0800009408000100000a010000030100000201000001010000020100000a010000040100
+000101000008010000020100000101000002010000090100000101000002010000060100
+00210101000a010000040100000101000008010000020100000101000002010000090100
+0001010000020100001d010100c301010009010000010100004a01000701030400010701
+030500010502020201030202050308000008080100000800000208000002080000080804
+0002080200020800000008010005080000030802008d08000100000a0100000701000005
+0100000901000005010000010100000c0100000501000009010000010100000301000005
+010000210101000901000005010000010100000c01000005010000090100000101000003
+0100001c010100c301010009010000010100004a01000701030400010500070103040001
+0502020201030202050308000008080000000800000008000001080000020800000a0800
+00030800000208000001080100010800000408000002080000020800008c08000100000a
+01000007010000050100000801000006010000010100000c010000050100000901000001
+0100000401000004010000210101000801000006010000010100000c0100000501000009
+01000001010000040100001b010100c301010009010000010100004a0100070103030001
+050107010304000105020202010302020503080000080800000008000000080000020800
+00010800000a0800000708000001080000020800000408000002080000020800008c0800
+0100000801010007010000050100000801000007010000010100000a010100040101000a
+0100000101000005010000040101001f0101000701000007010000010100000a01010004
+0101000a01000001010000050100001a010100c301010009010000010100004a01000701
+030300010502070103030001050202020103020205030800000808000000080000000800
+0002080000010800000a08000004080300010800000208000004080000020804008c0800
+0100000a01000005010000050100000a01000006010000010100000c0100000501000009
+010000010100000401000004010000210101000801000006010000010100000c01000005
+0100000901000001010000040100001b010100c301010009010000010100004a01000701
+030200010503070103030001050202020103020205030800000808000000080000000800
+0003080000000800000a0800000308000002080000010800000208000004080000020800
+009008000100000a01000004010000050100000c01000005010000010100000c01000005
+01000009010000010100000301000005010000210101000901000005010000010100000c
+010000050100000901000001010000030100001c010100c301010009010000010100004a
+010007010302000105040701030200010502020201030202050308000008080000000800
+0000080000030801000b0800000308000002080000010801000108000004080000020800
+00020800008c08000100000a010000030100000501000007010100040100000401000001
+010000030101000201000002010000010100000201000003010100030100000101000002
+01000006010000210101000a010000040100000101000003010100020100000201000001
+01000002010000030101000301000001010000020100001d010100c30101000901000001
+0100004a0100070103010001050507010302000105020202010302020503080000080800
+000008000000080000040800000c08010002080300010800000008010005080000030802
+008d08000100000a01000003010400010104000301010005010000040101000401010003
+0102000301020004010100040101000201000007010000210101000b0100000401010004
+01010003010200030102000401010004010100020100001e010100c30101000a0101004b
+010007010301000105060701030100010502020201030202050308000012080000010805
+00af08000100000a01000014010000060100002a01000008010000210101000c0100002a
+0100001f010100c301010058010007010300000105070701030100010502020201030202
+05030800000f08000000080000b808000100000b010100100101003b0101002201010059
+010100c30101005801000701030000010508070103000001050202020103020205030800
+0010080000b908000100008101010059010100c301010058010007010001070b03000001
+05020202010302020503080000cb08000100008101010059010100c30101005801000701
+0000070d000105020202010302020503080000cb08000100008101010059010100c30101
+005801000701030e000105020202010302020503080000cb080001000081010100590101
+00c30101005801000701001005020202010302020503080000cb08000100008101010059
+010100c30101005801000701000d070000010502020201030202050308cd01ff01ff0100
+07010001050a070100010502020201030202050301ff01ff01ce07010001050a07010001
+05020202010302020503010000cb0101008101010059010100c301010058010007010001
+050a0701000105020202010302020503010000cb0101008101010059010100c301010058
+010007010001050a0701000105020202010302020503010000cb01010081010100590101
+00c301010058010007010001050a0701000105020202010302020503010000cb01010081
+01010059010100c301010058010007010001050a07010001050202020103020205030100
+00cb0101008101010059010100c301010058010007010001050a07010001050202020103
+02020503010000cb0101008101010059010100c301010058010007010001050a07010001
+05020202010302020503010000cb0101008101010059010100c301010058010007010001
+050a0701000105020202010302020503010000cb0101008101010059010100c301010058
+010007010001050a0701000105020202010302020503010000cb01010081010100590101
+00c301010058010007010001050a0701000105020202010302020503010000cb01010081
+01010059010100c301010058010007010001050a07010001050202020103020205030100
+00cb0101008101010059010100c301010058010007010001050a07010001050202020103
+02020503010000cb0101008101010059010100c301010058010007010001050a07010001
+05020202010302020503010000cb0101008101010059010100c301010058010007010001
+050a0701000105020202010302020503010000cb0101008101010059010100c301010058
+010007010001050a0701000105020202010302020503010000cb01010081010100590101
+00c301010058010007010001050a0701000105020202010302020503010000cb01010081
+01010059010100c301010058010007010001050a07010001050202020103020205030100
+00cb0101008101010059010100c301010058010007010001050a07010001050202020103
+02020503010000cb0101008101010059010100c301010058010007010001050a07010001
+05020202010302020503010000cb0101008101010059010100c301010058010007010001
+050a070100010502020201030202050301ff01ff01ce07010001050a0701000105020202
+01030202050301ff01ff01ce07010001050a0701000105020202010302020503010000cb
+0101008101010059010100c301010058010007010001050a070100010502020201030202
+0503010000cb0101008101010059010100c301010058010007010001050a070100010502
+0202010302020503010000cb0101008101010059010100c301010058010007010001050a
+0701000105020202010302020503010000cb0101008101010059010100c3010100580100
+07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
+01010058010007010001050a0701000105020202010302020503010000cb010100810101
+0059010100c301010058010007010001050a0701000105020202010302020503010000cb
+0101008101010059010100c301010058010007010001050a070100010502020201030202
+0503010000cb0101008101010059010100c301010058010007010001050a070100010502
+0202010302020503010000cb0101008101010059010100c301010058010007010001050a
+0701000105020202010302020503010000cb0101008101010059010100c3010100580100
+07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
+01010058010007010001050a0701000105020202010302020503010000cb010100810101
+0059010100c301010058010007010001050a0701000105020202010302020503010000cb
+0101008101010059010100c301010058010007010001050a070100010502020201030202
+0503010000cb0101008101010059010100c301010058010007010001050a070100010502
+0202010302020503010000cb0101008101010059010100c301010058010007010001050a
+0701000105020202010302020503010000cb0101008101010059010100c3010100580100
+07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
+01010058010007010001050a0701000105020202010302020503010000cb010100810101
+0059010100c301010058010007010001050a0701000105020202010302020503010000cb
+0101008101010059010100c301010058010007010001050a070100010502020201030202
+050301ff01ff01ce07010001050a070100010502020201030202050301ff01ff01ce0701
+0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
+0058010007010001050a0701000105020202010302020503010000cb0101008101010059
+010100c301010058010007010001050a0701000105020202010302020503010000cb0101
+008101010059010100c301010058010007010001050a0701000105020202010302020503
+010000cb0101008101010059010100c301010058010007010001050a0701000105020202
+010302020503010000cb0101008101010059010100c301010058010007010001050a0701
+000105020202010302020503010000cb0101008101010059010100c30101005801000701
+0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
+0058010007010001050a0701000105020202010302020503010000cb0101008101010059
+010100c301010058010007010001050a0701000105020202010302020503010000cb0101
+008101010059010100c301010058010007010001050a0701000105020202010302020503
+010000cb0101008101010059010100c301010058010007010001050a0701000105020202
+010302020503010000cb0101008101010059010100c301010058010007010001050a0701
+000105020202010302020503010000cb0101008101010059010100c30101005801000701
+0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
+0058010007010001050a0701000105020202010302020503010000cb0101008101010059
+010100c301010058010007010001050a0701000105020202010302020503010000cb0101
+008101010059010100c301010058010007010001050a0701000105020202010302020503
+010000cb0101008101010059010100c301010058010007010001050a0701000105020202
+010302020503010000cb0101008101010059010100c301010058010007010001050a0701
+000105020202010302020503010000cb0101008101010059010100c30101005801000701
+0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
+0058010007010001050a070100010502020201030202050301ff01ff01ce07010001050a
+070100010502020201030202050301ff01ff01ce07010001050a07010001050202020103
+02020503010000cb0101008101010059010100c301010058010007010001050a07010001
+05020202010302020503010000cb0101008101010059010100c301010058010007010001
+050a0701000105020202010302020503010000cb0101008101010059010100c301010058
+010007010001050a0701000105020202010302020503010000cb01010081010100590101
+00c301010058010007010001050a0701000105020202010302020503010000cb01010081
+01010059010100c301010058010007010001050a07010001050202020103020205030100
+00cb0101008101010059010100c301010058010007010001050a07010001050202020103
+02020503010000cb0101008101010059010100c301010058010007010001050a07010001
+05020202010302020503010000cb0101008101010059010100c301010058010007010001
+050a0701000105020202010302020503010000cb0101008101010059010100c301010058
+010007010001050a0701000105020202010302020503010000cb01010081010100590101
+00c301010058010007010001050a0701000105020202010302020503010000cb01010081
+01010059010100c301010058010007010001050a07010001050202020103020205030100
+00cb0101008101010059010100c301010058010007010001050a07010001050202020103
+02020503010000cb0101008101010059010100c301010058010007010001050a07010001
+05020202010302020503010000cb0101008101010059010100c301010058010007010001
+050a0701000105020202010302020503010000cb0101008101010059010100c301010058
+010007010001050a0701000105020202010302020503010000cb01010081010100590101
+00c301010058010007010001050a0701000105020202010302020503010000cb01010081
+01010059010100c301010058010007010001050a07010001050202020103020205030100
+00cb0101008101010059010100c301010058010007010001050a07010001050202020103
+02020503010000cb0101008101010059010100c301010058010007010001050a07010001
+0502020201030202050301ff01ff01ce07010001050a0701000105020202010302020503
+01ff01ff01ce07010001050a0701000105020202010302020503010000cb010100810101
+0059010100c301010058010007010001050a0701000105020202010302020503010000cb
+0101008101010059010100c301010058010007010001050a070100010502020201030202
+0503010000cb0101008101010059010100c301010058010007010001050a070100010502
+0202010302020503010000cb0101008101010059010100c301010058010007010001050a
+0701000105020202010302020503010000cb0101008101010059010100c3010100580100
+07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
+01010058010007010001050a0701000105020202010302020503010000cb010100810101
+0059010100c301010058010007010001050a0701000105020202010302020503010000cb
+0101008101010059010100c301010058010007010001050a070100010502020201030202
+0503010000cb0101008101010059010100c301010058010007010001050a070100010502
+0202010302020503010000cb0101008101010059010100c301010058010007010001050a
+0701000105020202010302020503010000cb0101008101010059010100c3010100580100
+07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
+01010058010007010001050a0701000105020202010302020503010000cb010100810101
+0059010100c301010058010007010001050a0701000105020202010302020503010000cb
+0101008101010059010100c301010058010007010001050a070100010502020201030202
+0503010000cb0101008101010059010100c301010058010007010001050a070100010502
+0202010302020503010000cb0101008101010059010100c301010058010007010001050a
+0701000105020202010302020503010000cb0101008101010059010100c3010100580100
+07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
+01010058010007010001050a0701000105020202010302020503010000cb010100810101
+0059010100c301010058010007010001050a070100010502020201030202050301ff01ff
+01ce07010001050a070100010502020201030202050301ff01ff01ce07010001050a0701
+000105020202010302020503010000cb0101008101010059010100c30101005801000701
+0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
+0058010007010001050a0701000105020202010302020503010000cb0101008101010059
+010100c301010058010007010001050a0701000105020202010302020503010000cb0101
+008101010059010100c301010058010007010001050a0701000105020202010302020503
+010000cb0101008101010059010100c301010058010007010001050a0701000105020202
+010302020503010000cb0101008101010059010100c301010058010007010001050a0701
+000105020202010302020503010000cb0101008101010059010100c30101005801000701
+0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
+0058010007010001050a0701000105020202010302020503010000cb0101008101010059
+010100c301010058010007010001050a0701000105020202010302020503010000cb0101
+008101010059010100c301010058010007010001050a0701000105020202010302020503
+010000cb0101008101010059010100c301010058010007010001050a0701000105020202
+010302020503010000cb0101008101010059010100c301010058010007010001050a0701
+000105020202010302020503010000cb0101008101010059010100c30101005801000701
+0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
+0058010007010001050a0701000105020202010302020503010000cb0101008101010059
+010100c301010058010007010001050a0701000105020202010302020503010000cb0101
+008101010059010100c301010058010007010001050a0701000105020202010302020503
+010000cb0101008101010059010100c301010058010007010001050a0701000105020202
+010302020503010000cb0101008101010059010100c301010058010007010001050a0701
+000105020202010302020503010000cb0101008101010059010100c30101005801000701
+0001050a070100010502020201030202050301ff01ff01ce07010001050a070100010502
+020201030202050301ff01ff01ce07010001050a07010001050202020103020205030100
+00cb0101008101010059010100c301010058010007010001050a07010001050202020103
+02020503010000cb0101008101010059010100c301010058010007010001050a07010001
+05020202010302020503010000cb0101008101010059010100c301010058010007010001
+050a0701000105020202010302020503010000cb0101008101010059010100c301010058
+010007010001050a0701000105020202010302020503010000cb01010081010100590101
+00c301010058010007010001050a0701000105020202010302020503010000cb01010081
+01010059010100c301010058010007010001050a07010001050202020103020205030100
+00cb0101008101010059010100c301010058010007010001050a07010001050202020103
+02020503010000cb0101008101010059010100c301010058010007010001050a07010001
+05020202010302020503010000cb0101008101010059010100c301010058010007010001
+050a0701000105020202010302020503010000cb0101008101010059010100c301010058
+010007010001050a0701000105020202010302020503010000cb01010081010100590101
+00c301010058010007010001050a0701000105020202010302020503010000cb01010081
+01010059010100c301010058010007010001050a07010001050202020103020205030100
+00cb0101008101010059010100c301010058010007010001050a07010001050202020103
+02020503010000cb0101008101010059010100c301010058010007010001050a07010001
+05020202010302020503010000cb0101008101010059010100c301010058010007010001
+050a0701000105020202010302020503010000cb0101008101010059010100c301010058
+010007010001050a0701000105020202010302020503010000cb01010081010100590101
+00c301010058010007010001050a0701000105020202010302020503010000cb01010081
+01010059010100c301010058010007010001050a07010001050202020103020205030100
+00cb0101008101010059010100c301010058010007010001050a07010001050202020103
+0202050301ff01ff01ce07010001050a070100010502020201030202050301ff01ff01ce
+07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
+01010058010007010001050a0701000105020202010302020503010000cb010100810101
+0059010100c301010058010007010001050a0701000105020202010302020503010000cb
+0101008101010059010100c301010058010007010001050a070100010502020201030202
+0503010000cb0101008101010059010100c301010058010007010001050a070100010502
+0202010302020503010000cb0101008101010059010100c301010058010007010001050a
+0701000105020202010302020503010000cb0101008101010059010100c3010100580100
+07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
+01010058010007010001050a0701000105020202010302020503010000cb010100810101
+0059010100c301010058010007010001050a0701000105020202010302020503010000cb
+0101008101010059010100c301010058010007010001050a070100010502020201030202
+0503010000cb0101008101010059010100c301010058010007010001050a070100010502
+0202010302020503010000cb0101008101010059010100c301010058010007010001050a
+0701000105020202010302020503010000cb0101008101010059010100c3010100580100
+07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
+01010058010007010001050a0701000105020202010302020503010000cb010100810101
+0059010100c301010058010007010001050a0701000105020202010302020503010000cb
+0101008101010059010100c301010058010007010001050a070100010502020201030202
+0503010000cb0101008101010059010100c301010058010007010001050a070100010502
+0202010302020503010000cb0101008101010059010100c301010058010007010001050a
+0701000105020202010302020503010000cb0101008101010059010100c3010100580100
+07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
+01010058010007010001050a070100010502020201030202050301ff01ff01ce07010001
+050a070100010502020201030202050301ff01ff01ce07010001050a0701000105020202
+010302020503010000cb0101008101010059010100c301010058010007010001050a0701
+000105020202010302020503010000cb0101008101010059010100c30101005801000701
+0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
+0058010007010001050a0701000105020202010302020503010000cb0101008101010059
+010100c301010058010007010001050a0701000105020202010302020503010000cb0101
+008101010059010100c301010058010007010001050a0701000105020202010302020503
+010000cb0101008101010059010100c301010058010007010001050a0701000105020202
+010302020503010000cb0101008101010059010100c301010058010007010001050a0701
+000105020202010302020503010000cb0101008101010059010100c30101005801000701
+0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
+0058010007010001050a0701000105020202010302020503010000cb0101008101010059
+010100c301010058010007010001050a0701000105020202010302020503010000cb0101
+008101010059010100c301010058010007010001050a0701000105020202010302020503
+010000cb0101008101010059010100c301010058010007010001050a0701000105020202
+010302020503010000cb0101008101010059010100c301010058010007010001050a0701
+000105020202010302020503010000cb0101008101010059010100c30101005801000701
+0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
+0058010007010001050a0701000105020202010302020503010000cb0101008101010059
+010100c301010058010007010001050a0701000105020202010302020503010000cb0101
+008101010059010100c301010058010007010001050a0701000105020202010302020503
+010000cb0101008101010059010100c301010058010007010001050a0701000105020202
+010302020503010000cb0101008101010059010100c301010058010007010001050a0701
+00010502020201030202050301ff01ff01ce07010001050a070100010502020201030202
+050301ff01ff01ce07010001050a0701000105020202010302020503010000cb01010081
+01010059010100c301010058010007010001050a07010001050202020103020205030100
+00cb0101008101010059010100c301010058010007010001050a07010001050202020103
+02020503010000cb0101008101010059010100c301010058010007010001050a07010001
+05020202010302020503010000cb0101008101010059010100c301010058010007010001
+050a0701000105020202010302020503010000cb0101008101010059010100c301010058
+010007010001050a0701000105020202010302020503010000cb01010081010100590101
+00c301010058010007010001050a0701000105020202010302020503010000cb01010081
+01010059010100c301010058010007010001050a07010001050202020103020205030100
+00cb0101008101010059010100c301010058010007010001050a07010001050202020103
+02020503010000cb0101008101010059010100c301010058010007010001050a07010001
+05020202010302020503010000cb0101008101010059010100c301010058010007010001
+050a0701000105020202010302020503010000cb0101008101010059010100c301010058
+010007010001050a0701000105020202010302020503010000cb01010081010100590101
+00c301010058010007010001050a0701000105020202010302020503010000cb01010081
+01010059010100c301010058010007010001050a07010001050202020103020205030100
+00cb0101008101010059010100c301010058010007010001050a07010001050202020103
+02020503010000cb0101008101010059010100c301010058010007010001050a07010001
+05020202010302020503010000cb0101008101010059010100c301010058010007010001
+050a0701000105020202010302020503010000cb0101008101010059010100c301010058
+010007010001050a0701000105020202010302020503010000cb01010081010100590101
+00c301010058010007010001050a0701000105020202010302020503010000cb01010081
+01010059010100c301010058010007010001050a070100010502020201030202050301ff
+01ff01ce07010001050a070100010502020201030202050301ff01ff01ce07010001050a
+0701000105020202010302020503010000cb0101008101010059010100c3010100580100
+07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
+01010058010007010001050a0701000105020202010302020503010000cb010100810101
+0059010100c301010058010007010001050a0701000105020202010302020503010000cb
+0101008101010059010100c301010058010007010001050a070100010502020201030202
+0503010000cb0101008101010059010100c301010058010007010001050a070100010502
+0202010302020503010000cb0101008101010059010100c301010058010007010001050a
+0701000105020202010302020503010000cb0101008101010059010100c3010100580100
+07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
+01010058010007010001050a0701000105020202010302020503010000cb010100810101
+0059010100c301010058010007010001050a0701000105020202010302020503010000cb
+0101008101010059010100c301010058010007010001050a070100010502020201030202
+0503010000cb0101008101010059010100c301010058010007010001050a070100010502
+0202010302020503010000cb0101008101010059010100c301010058010007010001050a
+0701000105020202010302020503010000cb0101008101010059010100c3010100580100
+07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
+01010058010007010001050a0701000105020202010302020503010000cb010100810101
+0059010100c301010058010007010001050a0701000105020202010302020503010000cb
+0101008101010059010100c301010058010007010001050a070100010502020201030202
+0503010000cb0101008101010059010100c301010058010007010001050a070100010502
+0202010302020503010000cb0101008101010059010100c301010058010007010001070c
+000105020202010302020503010000cb0101008101010059010100c30101005801000701
+0000070d00010502020201030202050301ff01ff01ce0701030e00010502020201030202
+050301ff01ff01ce0701030e000105020202010302020503010000cb0101008101010059
+010100c30101005801000701030e000105020202010302020503010000cb010100810101
+0059010100c30101005801000701030e000105020202010302020503010000cb01010081
+01010059010100c30101005801000701030e000105020202010302020503010000cb0101
+008101010059010100c30101005801000701030e000105020202010302020503010000cb
+0101008101010059010100c30101005801000701030e0001050202020103020205030100
+00cb0101008101010059010100c30101005801000701030e000105020202010302020503
+010000cb0101008101010059010100c30101005801000701030e00010502020201030202
+0503010000cb0101008101010059010100c30101005801000701030e0001050202020103
+02020503010000cb0101008101010059010100c30101005801000701030e000105020202
+010302020503010000cb0101008101010059010100c30101005801000701030e00010502
+0202010302020503010000cb0101008101010059010100c30101005801000701030e0001
+05020202010302020503010000cb0101008101010059010100c30101005801000701030e
+000105020202010302020503010000cb0101008101010059010100c30101005801000701
+030e000105020202010302020503010000cb0101008101010059010100c3010100580100
+0701030e000105020202010302020503010000cb0101008101010059010100c301010058
+01000701030e000105020202010302020503010000cb0101008101010059010100c30101
+005801000701030e000105020202010302020503010000cb0101008101010059010100c3
+0101005801000701030e000105020202010302020503010000cb01010081010100590101
+00c30101005801000701030e000105020202010302020503010000cb0101008101010059
+010100c30101005801000701030e00010502020201030202050301ff01ff01ce0701030e
+00010502020201030202050301ff01ff01ce0701001005020202010302020503010000cb
+0101008101010059010100c301010058010007010300000c070000010502020201030202
+0503010000cb0101008101010059010100c3010100580100070103000001050807010300
+000105020202010302020503010000cb0101008101010059010100c30101005801000701
+03010001050707010300000105020202010302020503010000cb01010081010100590101
+00c3010100580100070103010001050607010301000105020202010302020503010000cb
+0101008101010059010100c3010100580100070103020001050507010301000105020202
+010302020503010000cb0101008101010059010100c30101005801000701030200010504
+07010302000105020202010302020503010000cb0101008101010059010100c301010058
+0100070103030001050307010302000105020202010302020503010000cb010100810101
+0059010100c3010100580100070103030001050207010303000105020202010302020503
+010000cb0101008101010059010100c30101005801000701030400010501070103030001
+05020202010302020503010000cb0101008101010059010100c301010058010007010304
+0001050007010304000105020202010302020503010000cb0101008101010059010100c3
+01010058010007010305000007020304000105020202010302020503010000cb01010081
+01010059010100c301010058010007010305000007010305000105020202010302020503
+010000cb0101008101010059010100c30101005801000701030607010305000105020202
+010302020503010000cb0101008101010059010100c30101005801000701030607000306
+000105020202010302020503010000cb0101008101010059010100c30101005801000701
+001005020202010302020503010000cb0101008101010059010100c30101005801000700
+00110502020201030202050207ff07ff07d30511020201030202050207ff07ff07d20000
+051102020103020205020701030d0000030000ff00ff00af03000001030c000105110202
+0103020205020701030b00010700030000ff00ff00ae070003000003030a000105110202
+01030202050207010309000207010300000105ff05ff05ab070103000005030800010511
+0202010302020502070103070003050007010300000105ff05ff05ab0701030000010501
+00030306000105110202010302020502070103050003050207010300000105ff05ff05ab
+070103000001050300030304000105110202010302020502070103030003050407010300
+000105ff05ff05ab07010300000105050003030200010511020201030202050207010301
+0003050607010300000105ff05ff05ab0701030000010507000303000001051102020103
+020205020705050807010300000105ff05ff05ab07010300000105080703000105110202
+010302020502070103010703050607010300000105ff05ff05ab07010300000105070703
+0300000105110202010302020502070103030703050407010300000105ff05ff05ab0701
+030000010505070303020001051102020103020205020701030507030502070103000001
+05ff05ff05ab070103000001050307030304000105110202010302020502070103070703
+050007010300000105ff05ff05ab07010300000105010703030600010511020201030202
+05020701030907040300000105ff05ff05ab070103000001070303080001051102020103
+020205020701030b07020300000107ff07ff07ad030000010701030a0001051102020101
+000405020701030d07000300000007ff07ff07ae030000000700030c0001051100050202
+04000502070100ff00ff00d105110000020204000000020204000502070000ff00ff00d2
+051100000202040000000202040005ff05ff05e800000202040000000202040005ff05ff
+05e800000202040000000202040005ff05ff05e8000002020400000002020400000502ff
+02ff02dc00060202040000000208040002ff02ff02dc00000208040000000208040002ff
+02ff02dc00000208040000000208040001ff01ff01dc0000020804000000040901ff01ff
+01dc00000409
+%%EndData
+end
+%%PageTrailer
+%%Trailer
+%%BoundingBox: 0 42 377 247
+%%EOF
diff --git a/lib/tv/doc/src/tv_start_mnesia.gif b/lib/tv/doc/src/tv_start_mnesia.gif
new file mode 100644
index 0000000000..0ad04331cd
--- /dev/null
+++ b/lib/tv/doc/src/tv_start_mnesia.gif
Binary files differ
diff --git a/lib/tv/doc/src/tv_start_mnesia.ps b/lib/tv/doc/src/tv_start_mnesia.ps
new file mode 100644
index 0000000000..a90185089d
--- /dev/null
+++ b/lib/tv/doc/src/tv_start_mnesia.ps
@@ -0,0 +1,835 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (ImageMagick)
+%%Title: (/clearcase/otp/erts/lib/tv/doc/src/tv_start_mnesia.eps)
+%%CreationDate: (Mon Mar 19 17:15:23 2001)
+%%BoundingBox: 0 0 377 205
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 0
+%%EndComments
+
+%%BeginDefaults
+%%PageOrientation: Portrait
+%%EndDefaults
+
+%%BeginProlog
+%
+% Display a color image. The image is displayed in color on
+% Postscript viewers or printers that support color, otherwise
+% it is displayed as grayscale.
+%
+/buffer 512 string def
+/byte 1 string def
+/color_packet 3 string def
+/pixels 768 string def
+
+/DirectClassPacket
+{
+ %
+ % Get a DirectClass packet.
+ %
+ % Parameters:
+ % red.
+ % green.
+ % blue.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/DirectClassImage
+{
+ %
+ % Display a DirectClass image.
+ %
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { DirectClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayDirectClassPacket } image
+ } ifelse
+} bind def
+
+/GrayDirectClassPacket
+{
+ %
+ % Get a DirectClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % red
+ % green
+ % blue
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/GrayPseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassImage
+{
+ %
+ % Display a PseudoClass image.
+ %
+ % Parameters:
+ % class: 0-PseudoClass or 1-Grayscale.
+ %
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ class 0 gt
+ {
+ currentfile buffer readline pop
+ token pop /depth exch def pop
+ /grays columns 8 add depth sub depth mul 8 idiv string def
+ columns rows depth
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { currentfile grays readhexstring pop } image
+ }
+ {
+ %
+ % Parameters:
+ % colors: number of colors in the colormap.
+ % colormap: red, green, blue color packets.
+ %
+ currentfile buffer readline pop
+ token pop /colors exch def pop
+ /colors colors 3 mul def
+ /colormap colors string def
+ currentfile colormap readhexstring pop pop
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { PseudoClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayPseudoClassPacket } image
+ } ifelse
+ } ifelse
+} bind def
+
+/DisplayImage
+{
+ %
+ % Display a DirectClass or PseudoClass image.
+ %
+ % Parameters:
+ % x & y translation.
+ % x & y scale.
+ % label pointsize.
+ % image label.
+ % image columns & rows.
+ % class: 0-DirectClass or 1-PseudoClass.
+ % compression: 0-RunlengthEncodedCompression or 1-NoCompression.
+ % hex color packets.
+ %
+ gsave
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ x y translate
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ currentfile buffer readline pop
+ token pop /pointsize exch def pop
+ /Helvetica findfont pointsize scalefont setfont
+ x y scale
+ currentfile buffer readline pop
+ token pop /columns exch def
+ token pop /rows exch def pop
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ currentfile buffer readline pop
+ token pop /compression exch def pop
+ class 0 gt { PseudoClassImage } { DirectClassImage } ifelse
+ grestore
+} bind def
+%%EndProlog
+%%Page: 1 1
+%%PageBoundingBox: 0 0 377 205
+userdict begin
+%%BeginData:
+DisplayImage
+0 0
+377.000000 205.000000
+12
+755 410
+1
+0
+0
+16
+ffffff
+000000
+d8d8d8
+c2c2c2
+6b6b6b
+d9d9d9
+b22222
+828282
+a3a3a3
+000000
+000000
+000000
+000000
+000000
+000000
+000000
+000a01ff01ff01dc000b0208040001ff01ff01dc00000208040000000208040002ff02ff
+02dc000002080400000002080400020000ff00ff00d90400020000000208040000000202
+04060200000004ff04ff04d9020000000405020204000000020204000209000d02ff02ff
+02d000000202040000000202040002080000020d040002ea01030211010302330101021b
+010102060101024001010230010102f700000202040000000202040002080000020d0400
+02ea010102020107020001010203010102010101020e010202020102021b0101020e0100
+020b01010206010102400101020c0104021e010102f70000020204000000020204000208
+0000020d040002ea010102050101020301010203010102010101020e010202020102022b
+0101020b010102060101024e010102020101021d010102f7000002020400000002020400
+02080000020204060203040002ea010102050101020301010203010102010101020e0102
+020201020202010102000101020301030203010402020101020201030205010402010103
+020301010200010102030101020201030203010402060103020301010200010102070101
+020001010201010102030103020301010202010102000101020201010201010302020101
+020001010201010102030103020201010200010102010101020201030202010102020101
+02e6000002020400000004030208000002020400030400000203040002ea010102050101
+020401010202010002020101020e01000200010102000100020001010202010202000101
+020101010201010102010101020601010201010102010101020501010202010102010101
+020201020200010102020101020101010201010102010101020901010201010102020102
+020001010206010202000102020001010201010102010101020201010202010202000101
+020101010200010102000101020201020200010202000101020101010201010102010101
+02000101020101010201010102010101020101010202010102e6000004030101020b0000
+02030400030200000204040002ea010102050101020401010201010102020101020e0100
+020001010200010002000101020201010201010102010101020101010201010202050101
+020501010205010102060101020201010201010102020101020101010201010102010102
+020801010201010102020101020101010206010102010101020101010205010102020101
+020201010201010102010101020001010200010102020101020101010201010102050101
+02010102020301010201010102010101020101010202010002ea0103020b000002030400
+030200000204040002ea010102050101020501010200010002030101020e010002000101
+020001000200010102020101020101010201010502020103020301010202010402050101
+020301040202010102010101020201010201010502020103020601010201010102020101
+020101010206010102010101020101010202010402020101020201010201010102010101
+020001010200010102020101020101010201010102020104020101010204010102010105
+020201010200010102ea0103020b000002040400030000000205040002ea010102050101
+0205010302030101020e0100020101010201010102020101020101010201010102080102
+020201010201010102010101020501010202010102010101020201010201010102020101
+020101010208010202050101020101010202010102010101020601010201010102010101
+020101010201010102020101020201010201010102010101020101010200010102010101
+020101010201010102010101020101010201010102040101020101010206010102000100
+02eb0103020b000002040400030000000205040002ea0101020501010206010102040101
+020e01000201010102010101020201010201010102010101020201000205010102020101
+020101010201010102050101020201010201010102020101020101010202010102010101
+020201000205010102050101020101010202010102010101020601010201010102010101
+020101010201010102020101020201010201010102020101020701010201010102010101
+0201010102010101020101010204010102010101020201000203010202eb0103020b0000
+020500000206040002ea0101020501010206010102040101020e01000205010102020101
+020101010202010302020104020301010202010202000101020501020201010202000101
+020101040203010102020103020201040207010302030101020101010206010102010101
+020101010202010202000101020101010202010102010101020301050202010102010101
+0201010102020102020001010200010102040101020201030204010102ec0103020b0000
+020d040002ea01030211010302dd010102ed0103020b0000020d040002ff02e2010102ed
+0103020b0000020d040002ff02ff02d20103020c040d02ff02ff02d3010302ff02ff02ee
+010302ff02ff02ee0103020200ff00ff00e70400020201030202000004ff04ff04e70202
+010302ff02ff02ee0103020200ff00ff00e802020103020200ff00ff00e7070002020103
+0202000105ff05ff05e40701020201030202000105ff05ff05e407010202010302020001
+05ff05ff05e40701020201030202000105ff05ff05e40701020201030202000105ff05ff
+05e407010202010302020001050b06040504060005030602051f06000502060005040600
+05270602050b06000506060005ff05ff0535060005020600050906020513070102020103
+02020001050b0600050f0600051f060005020600052c060005020600050a060005ff05ff
+053d060005020600050b0600051307010202010302020001050b06000506060205050600
+050306020518060005020600050206020503060205020600050206000517060005020600
+050106000500060105020604050206020503060205020600050006010503060205ff05ff
+052006000502060005020602050506000502060005000601050c07010202010302020001
+050b06000508060005050600050206000502060005180600050006000505060005020600
+050206000501060005020600051706000502060005010601050106000503060005060600
+05020600050206000501060105010600050106000502060005ff05ff051f060005020600
+0501060005020600050406000502060105010600050b07010202010302020001050b0603
+050506000505060005020600050206000518060005000600050506000502060005020600
+050106000500060005000600051706000502060005010600050206000503060005060600
+050206000502060005010600050206000501060005ff05ff052306040501060005020600
+050406000502060005020600050b07010202010302020001050b06000508060005050600
+050206040518060005000600050506000502060405010600050006000500060005170600
+050206000501060005020600050306000506060005020600050206000501060005020600
+0502060205ff05ff052006000502060005010604050406000502060005020600050b0701
+0202010302020001050b0600050806000505060005020600051d06000506060005020600
+050506000500060005000600051706000502060005010600050206000503060005060600
+050206000502060005010600050206000505060005ff05ff051f06000502060005010600
+050806000502060005020600050b07010202010302020001050b06000508060005050600
+050206000502060005190600050606000502060005020600050106000500060005000600
+051706000502060005010601050106000503060005060600050206000502060005010600
+05020600050106000502060005ff05ff051f060005020600050106000502060005040600
+0502060105010600050b07010202010302020001050b0600050806000505060005030602
+051a06000506060005030602050306000500060005190602050206000500060105050601
+050406000503060205020600050206000502060205ff05ff052006000502060005020602
+050506000502060005000601050c070102020103020200010576060005ff05ff055b0600
+050f07010202010302020001050a0606052a0606052a06060500060005ff05ff05450606
+050e0600050f07010202010302020001050a0606052a0606052a06060500060005ff05ff
+05450606050e0600050f0701020201030202000105ff05ff05e407010202010302020001
+05ff05ff05e40701020201030202000105ff05ff05e40701020201030202000107ff07ff
+07e6020201030202000007ff07ff07e702020103020205ff05ff05e802020103020205ff
+05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff
+05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff
+05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff
+05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff
+05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff
+05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff
+05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff
+05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff
+05ff05e802020103020205ff05ff05e802020103020205ff05ff05e8020201030202051c
+01020504010305c1080205040803051a0802057f01010505010205f00102050401030519
+0101052f020201030202050e01060508010005060101050f010205010102059b08060508
+0800050608010510080505040801054d010205240104050d0101051e0102052401020501
+0102059301060508010005060101051101030535020201030202050e0100050101010500
+010005070101050601000511010105010100059d08000501080105000800050708010506
+08000513080105060800054d0101050001010524010105000101050c0100051e01010500
+010105240101050101000595010005010101050001000507010105060100051101010501
+010105340202010302020510010105030103050201030503010105030103050801020500
+01010501010305000101050001000500010005020103058b080105030803050208030503
+080105030803050a080105030804054c0101050101050500010305000102050201030501
+01010500010205070101050101010500010305030104051d010105010105050001030500
+010205020103050101010500010205070102050001010501010305000101050001000500
+010005020103058301010503010305020103050301010503010305090101050101000500
+010305020105050101030521020201030202051001010506010105000101050101010502
+010105020101050101010507010005000100050001000505010105000105050001010501
+0101058a0801050608010500080105010801050208010502080105010801050908010502
+080105010801054c01000502010105000101050201000500010205000101050001010501
+010105010102050001000507010105010101050201010502010105010101051d01000502
+010105000101050201000500010205000101050001010501010105010102050001000507
+010005000100050001000505010105000105050001010501010105820101050601010500
+010105010101050201010502010105010101050801020504010105020101050001010501
+010105010101052002020103020205100100050401040500010105010101050201010501
+0106050701000500010205020104050001010500010005000107058a0800050408040500
+0801050108010502080105010806050908010501080105020801054b0101050201000501
+01010500010005000100050001010501010805010101050a010305040101050101010502
+0101051c010105020100050101010500010005000100050001010501010805010101050a
+010005000102050201040500010105000100050001070582010005040104050001010501
+01010502010105010106050901020503010105040101050101060520020201030202050f
+0101050201010501010105000101050201010501010105020101050b0101050001010501
+01010501010105010100050001000500010005000101058e080105020801050108010500
+0801050208010501080105020801050d08010502080105010801054c0101050101010501
+01020500010005010100050201000500010105050101050a010105060101050201010501
+0101051d010105010101050101020500010005010100050201000500010105050101050a
+010105000101050101010501010105010100050001000500010005000101058601010502
+01010501010105000101050201010501010105020101050b010105010101050201010503
+0101050301010525020201030202050f0101050201010501010105000101050101010502
+010105020101050101010507010005010101050101010501010105000101050001000500
+01000500010105010101058a080105020801050108010500080105010801050208010502
+080105010801050908010502080105010801054c01010500010105020103050101010501
+0101050001010501010105010101050a0101050601010502010105010101051d01010500
+0101050201030501010105010101050001010501010105010101050a0100050101010501
+010105010101050001010500010005000100050001010501010105820101050201010501
+010105000101050101010502010105020101050101010507010105010101050201010502
+01020500010105000101050101010521020201030202050e01030502010a050101050501
+0103050701020500010105020107050001000500010105000103058a08030502080a0501
+0805050108030508080505010805054c0102050301010500010005000103050001020500
+010305010104050701030503010505010105051d01020503010105000100050001030500
+010205000103050101040507010205000101050201070500010005000101050001030582
+01030502010a050101050501010305090103050101050500010505010103052202020103
+020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103
+020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103
+020205ff05ff05e8020201030202050201ff01ff01e205020202010302020503010000cb
+0101008101010059010100c30101005801000711000005020202010302020503010000cb
+0101008101010059010100c3010100580100070103060700030600010502020201030202
+0503010000cb010100810101000c0100002a0100001f010100c301010058010007010305
+0000070003060001050202020103020205030100000a010000130100000c0100000a0100
+000601020086010100810101000b0100000401010009010400010104000a010100020100
+001e0101002701000028010000040100006a0101000a0101004b01000701030500000701
+03050001050202020103020205030100000a010000130100000c0100000a010000080100
+0086010100810101000a01000004010000010100000801000002010000010100000d0100
+0001010000020100001d010100570100006a01010009010000010100004a010007010304
+000107010305000105020202010302020503010000080104000201020003010200020104
+000801040002010200020100000001010005010000030102007f01010081010100090100
+0005010000010100000c010000010100000d01000001010000030100001c010100080101
+000001000002010000000101000301020003010200030102000301020009010100000100
+0003010200020100000001010003010200020104000201020002010000000101005b0101
+0009010000010100004a0100070103040001050007010304000105020202010302020503
+0100000a01000003010000020100000101000002010000030100000c0100000301000002
+01000001010100010100000401000002010000020100007e010100810101000801000006
+010000010100000b010000020103000a01000001010000040100001b0101000801000000
+010000000100000101010001010000010100000201000001010000020100000401000002
+010000020100000801000000010000000100000101000002010000010101000101000004
+01000004010000030100000201000001010100010100005a01010009010000010100004a
+01000701030300010501070103040001050202020103020205030100000a010000030100
+000201000001010000070100000c01000007010000010100000201000004010000020100
+00020100007e010100810101000701000007010000010100000b01000006010000090100
+0001010000050100001a0101000801000000010000000100000101000002010000010100
+000201000001010000080100000601000008010000000100000001000001010000020100
+00010100000201000004010000040100000301000002010000010100005e010100090100
+00010100004a01000701030300010502070103030001050202020103020205030100000a
+0100000301040002010200040100000c0100000401030001010000020100000401000002
+0104007e010100810101000801000006010000010100000b010000060100000901000001
+010000040100001b01010008010000000100000001000001010000020100000101040002
+010200050100000301030008010000000100000001000001010000020100000101000002
+01000004010000040100000301000002010000010100005e01010009010000010100004a
+01000701030200010503070103030001050202020103020205030100000a010000030100
+0009010000030100000c0100000301000002010000010100000201000004010000020100
+0082010100810101000901000005010000010100000a0100000301000002010000090100
+0001010000030100001c0101000801000000010000000100000101000002010000010100
+000901000004010000020100000201000008010000000100000001000001010000020100
+00010100000201000004010000040100000301000002010000010100005e010100090100
+00010100004a01000701030200010504070103020001050202020103020205030100000a
+01000003010000020100000101000002010000030100000c010000030100000201000001
+010100010100000401000002010000020100007e010100810101000a0100000401000001
+01000003010100040100000301000002010000030101000301000001010000020100001d
+010100080100000001000000010000010100000201000001010000020100000101000002
+010000040100000201000002010000080100000001000000010000010100000201000001
+0100000201000004010000040100000301000002010000010100005e0101000901000001
+0100004a01000701030100010505070103020001050202020103020205030100000b0101
+000201020003010200050101000b01010002010300010100000001010005010000030102
+007f010100810101000b0100000401010004010100040100000401020004010100040101
+00020100001e010100080100000001000000010000010100000201000002010200030102
+000501000003010300080100000001000000010000020102000201000002010000040100
+000501010002010200020100005e0101000a0101004b0100070103010001050607010301
+00010502020201030202050301000023010500a1010100810101000c0100002a0100001f
+010100310105008b01010058010007010300000105070701030100010502020201030202
+0503010000cb0101008101010059010100c3010100580100070103000001050807010300
+000105020202010302020503010000cb0101008101010059010100c30101005801000701
+0001070b0300000105020202010302020503010000cb0101008101010059010100c30101
+0058010007010000070d000105020202010302020503010000cb01010081010100590101
+00c30101005801000701030e000105020202010302020503010000cb0101008101010059
+010100c30101005801000701001005020202010302020503010000cb0101008101010059
+010100c30101005801000701000d070000010502020201030202050301ff01ff01ce0701
+0001050a070100010502020201030202050301ff01ff01ce07010001050a070100010502
+0202010302020503010000cb0101008101010059010100c301010058010007010001050a
+0701000105020202010302020503010000cb0101008101010059010100c3010100580100
+07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
+01010058010007010001050a0701000105020202010302020503010000cb010100810101
+0059010100c301010058010007010001050a0701000105020202010302020503010000cb
+0101008101010059010100c301010058010007010001050a070100010502020201030202
+0503010000cb0101008101010059010100c301010058010007010001050a070100010502
+0202010302020503010000cb0101008101010059010100c301010058010007010001050a
+0701000105020202010302020503010000cb0101008101010059010100c3010100580100
+07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
+01010058010007010001050a0701000105020202010302020503010000cb010100810101
+0059010100c301010058010007010001050a0701000105020202010302020503010000cb
+0101008101010059010100c301010058010007010001050a070100010502020201030202
+0503010000cb0101008101010059010100c301010058010007010001050a070100010502
+0202010302020503010000cb0101008101010059010100c301010058010007010001050a
+0701000105020202010302020503010000cb0101008101010059010100c3010100580100
+07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
+01010058010007010001050a0701000105020202010302020503010000cb010100810101
+0059010100c301010058010007010001050a0701000105020202010302020503010000cb
+0101008101010059010100c301010058010007010001050a070100010502020201030202
+0503010000cb0101008101010059010100c301010058010007010001050a070100010502
+0202010302020503010000cb0101008101010059010100c301010058010007010001050a
+070100010502020201030202050301ff01ff01ce07010001050a07010001050202020103
+0202050301ff01ff01ce07010001050a0701000105020202010302020503010000cb0101
+008101010059010100c301010058010007010001050a0701000105020202010302020503
+010000cb0101008101010059010100c301010058010007010001050a0701000105020202
+010302020503010000cb0101008101010059010100c301010058010007010001050a0701
+000105020202010302020503010000cb0101008101010059010100c30101005801000701
+0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
+0058010007010001050a0701000105020202010302020503010000cb0101008101010059
+010100c301010058010007010001050a0701000105020202010302020503010000cb0101
+008101010059010100c301010058010007010001050a0701000105020202010302020503
+010000cb0101008101010059010100c301010058010007010001050a0701000105020202
+010302020503010000cb0101008101010059010100c301010058010007010001050a0701
+000105020202010302020503010000cb0101008101010059010100c30101005801000701
+0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
+0058010007010001050a0701000105020202010302020503010000cb0101008101010059
+010100c301010058010007010001050a0701000105020202010302020503010000cb0101
+008101010059010100c301010058010007010001050a0701000105020202010302020503
+010000cb0101008101010059010100c301010058010007010001050a0701000105020202
+010302020503010000cb0101008101010059010100c301010058010007010001050a0701
+000105020202010302020503010000cb0101008101010059010100c30101005801000701
+0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
+0058010007010001050a0701000105020202010302020503010000cb0101008101010059
+010100c301010058010007010001050a0701000105020202010302020503010000cb0101
+008101010059010100c301010058010007010001050a0701000105020202010302020503
+01ff01ff01ce07010001050a070100010502020201030202050301ff01ff01ce07010001
+050a0701000105020202010302020503010000cb0101008101010059010100c301010058
+010007010001050a0701000105020202010302020503010000cb01010081010100590101
+00c301010058010007010001050a0701000105020202010302020503010000cb01010081
+01010059010100c301010058010007010001050a07010001050202020103020205030100
+00cb0101008101010059010100c301010058010007010001050a07010001050202020103
+02020503010000cb0101008101010059010100c301010058010007010001050a07010001
+05020202010302020503010000cb0101008101010059010100c301010058010007010001
+050a0701000105020202010302020503010000cb0101008101010059010100c301010058
+010007010001050a0701000105020202010302020503010000cb01010081010100590101
+00c301010058010007010001050a0701000105020202010302020503010000cb01010081
+01010059010100c301010058010007010001050a07010001050202020103020205030100
+00cb0101008101010059010100c301010058010007010001050a07010001050202020103
+02020503010000cb0101008101010059010100c301010058010007010001050a07010001
+05020202010302020503010000cb0101008101010059010100c301010058010007010001
+050a0701000105020202010302020503010000cb0101008101010059010100c301010058
+010007010001050a0701000105020202010302020503010000cb01010081010100590101
+00c301010058010007010001050a0701000105020202010302020503010000cb01010081
+01010059010100c301010058010007010001050a07010001050202020103020205030100
+00cb0101008101010059010100c301010058010007010001050a07010001050202020103
+02020503010000cb0101008101010059010100c301010058010007010001050a07010001
+05020202010302020503010000cb0101008101010059010100c301010058010007010001
+050a0701000105020202010302020503010000cb0101008101010059010100c301010058
+010007010001050a070100010502020201030202050301ff01ff01ce07010001050a0701
+00010502020201030202050301ff01ff01ce07010001050a070100010502020201030202
+0503010000cb0101008101010059010100c301010058010007010001050a070100010502
+0202010302020503010000cb0101008101010059010100c301010058010007010001050a
+0701000105020202010302020503010000cb0101008101010059010100c3010100580100
+07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
+01010058010007010001050a0701000105020202010302020503010000cb010100810101
+0059010100c301010058010007010001050a0701000105020202010302020503010000cb
+0101008101010059010100c301010058010007010001050a070100010502020201030202
+0503010000cb0101008101010059010100c301010058010007010001050a070100010502
+0202010302020503010000cb0101008101010059010100c301010058010007010001050a
+0701000105020202010302020503010000cb0101008101010059010100c3010100580100
+07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
+01010058010007010001050a0701000105020202010302020503010000cb010100810101
+0059010100c301010058010007010001050a0701000105020202010302020503010000cb
+0101008101010059010100c301010058010007010001050a070100010502020201030202
+0503010000cb0101008101010059010100c301010058010007010001050a070100010502
+0202010302020503010000cb0101008101010059010100c301010058010007010001050a
+0701000105020202010302020503010000cb0101008101010059010100c3010100580100
+07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
+01010058010007010001050a0701000105020202010302020503010000cb010100810101
+0059010100c301010058010007010001050a0701000105020202010302020503010000cb
+0101008101010059010100c301010058010007010001050a070100010502020201030202
+0503010000cb0101008101010059010100c301010058010007010001050a070100010502
+020201030202050301ff01ff01ce07010001050a070100010502020201030202050301ff
+01ff01ce07010001050a0701000105020202010302020503010000cb0101008101010059
+010100c301010058010007010001050a0701000105020202010302020503010000cb0101
+008101010059010100c301010058010007010001050a0701000105020202010302020503
+010000cb0101008101010059010100c301010058010007010001050a0701000105020202
+010302020503010000cb0101008101010059010100c301010058010007010001050a0701
+000105020202010302020503010000cb0101008101010059010100c30101005801000701
+0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
+0058010007010001050a0701000105020202010302020503010000cb0101008101010059
+010100c301010058010007010001050a0701000105020202010302020503010000cb0101
+008101010059010100c301010058010007010001050a0701000105020202010302020503
+010000cb0101008101010059010100c301010058010007010001050a0701000105020202
+010302020503010000cb0101008101010059010100c301010058010007010001050a0701
+000105020202010302020503010000cb0101008101010059010100c30101005801000701
+0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
+0058010007010001050a0701000105020202010302020503010000cb0101008101010059
+010100c301010058010007010001050a0701000105020202010302020503010000cb0101
+008101010059010100c301010058010007010001050a0701000105020202010302020503
+010000cb0101008101010059010100c301010058010007010001050a0701000105020202
+010302020503010000cb0101008101010059010100c301010058010007010001050a0701
+000105020202010302020503010000cb0101008101010059010100c30101005801000701
+0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
+0058010007010001050a0701000105020202010302020503010000cb0101008101010059
+010100c301010058010007010001050a070100010502020201030202050301ff01ff01ce
+07010001050a070100010502020201030202050301ff01ff01ce07010001050a07010001
+05020202010302020503010000cb0101008101010059010100c301010058010007010001
+050a0701000105020202010302020503010000cb0101008101010059010100c301010058
+010007010001050a0701000105020202010302020503010000cb01010081010100590101
+00c301010058010007010001050a0701000105020202010302020503010000cb01010081
+01010059010100c301010058010007010001050a07010001050202020103020205030100
+00cb0101008101010059010100c301010058010007010001050a07010001050202020103
+02020503010000cb0101008101010059010100c301010058010007010001050a07010001
+05020202010302020503010000cb0101008101010059010100c301010058010007010001
+050a0701000105020202010302020503010000cb0101008101010059010100c301010058
+010007010001050a0701000105020202010302020503010000cb01010081010100590101
+00c301010058010007010001050a0701000105020202010302020503010000cb01010081
+01010059010100c301010058010007010001050a07010001050202020103020205030100
+00cb0101008101010059010100c301010058010007010001050a07010001050202020103
+02020503010000cb0101008101010059010100c301010058010007010001050a07010001
+05020202010302020503010000cb0101008101010059010100c301010058010007010001
+050a0701000105020202010302020503010000cb0101008101010059010100c301010058
+010007010001050a0701000105020202010302020503010000cb01010081010100590101
+00c301010058010007010001050a0701000105020202010302020503010000cb01010081
+01010059010100c301010058010007010001050a07010001050202020103020205030100
+00cb0101008101010059010100c301010058010007010001050a07010001050202020103
+02020503010000cb0101008101010059010100c301010058010007010001050a07010001
+05020202010302020503010000cb0101008101010059010100c301010058010007010001
+050a070100010502020201030202050301ff01ff01ce07010001050a0701000105020202
+01030202050301ff01ff01ce07010001050a0701000105020202010302020503010000cb
+0101008101010059010100c301010058010007010001050a070100010502020201030202
+0503010000cb0101008101010059010100c301010058010007010001050a070100010502
+0202010302020503010000cb0101008101010059010100c301010058010007010001050a
+0701000105020202010302020503010000cb0101008101010059010100c3010100580100
+07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
+01010058010007010001050a0701000105020202010302020503010000cb010100810101
+0059010100c301010058010007010001050a0701000105020202010302020503010000cb
+0101008101010059010100c301010058010007010001050a070100010502020201030202
+0503010000cb0101008101010059010100c301010058010007010001050a070100010502
+0202010302020503010000cb0101008101010059010100c301010058010007010001050a
+0701000105020202010302020503010000cb0101008101010059010100c3010100580100
+07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
+01010058010007010001050a0701000105020202010302020503010000cb010100810101
+0059010100c301010058010007010001050a0701000105020202010302020503010000cb
+0101008101010059010100c301010058010007010001050a070100010502020201030202
+0503010000cb0101008101010059010100c301010058010007010001050a070100010502
+0202010302020503010000cb0101008101010059010100c301010058010007010001050a
+0701000105020202010302020503010000cb0101008101010059010100c3010100580100
+07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
+01010058010007010001050a0701000105020202010302020503010000cb010100810101
+0059010100c301010058010007010001050a0701000105020202010302020503010000cb
+0101008101010059010100c301010058010007010001050a070100010502020201030202
+050301ff01ff01ce07010001050a070100010502020201030202050301ff01ff01ce0701
+0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
+0058010007010001050a0701000105020202010302020503010000cb0101008101010059
+010100c301010058010007010001050a0701000105020202010302020503010000cb0101
+008101010059010100c301010058010007010001050a0701000105020202010302020503
+010000cb0101008101010059010100c301010058010007010001050a0701000105020202
+010302020503010000cb0101008101010059010100c301010058010007010001050a0701
+000105020202010302020503010000cb0101008101010059010100c30101005801000701
+0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
+0058010007010001050a0701000105020202010302020503010000cb0101008101010059
+010100c301010058010007010001050a0701000105020202010302020503010000cb0101
+008101010059010100c301010058010007010001050a0701000105020202010302020503
+010000cb0101008101010059010100c301010058010007010001050a0701000105020202
+010302020503010000cb0101008101010059010100c301010058010007010001050a0701
+000105020202010302020503010000cb0101008101010059010100c30101005801000701
+0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
+0058010007010001050a0701000105020202010302020503010000cb0101008101010059
+010100c301010058010007010001050a0701000105020202010302020503010000cb0101
+008101010059010100c301010058010007010001050a0701000105020202010302020503
+010000cb0101008101010059010100c301010058010007010001050a0701000105020202
+010302020503010000cb0101008101010059010100c301010058010007010001050a0701
+000105020202010302020503010000cb0101008101010059010100c30101005801000701
+0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
+0058010007010001050a070100010502020201030202050301ff01ff01ce07010001050a
+070100010502020201030202050301ff01ff01ce07010001050a07010001050202020103
+02020503010000cb0101008101010059010100c301010058010007010001050a07010001
+05020202010302020503010000cb0101008101010059010100c301010058010007010001
+050a0701000105020202010302020503010000cb0101008101010059010100c301010058
+010007010001050a0701000105020202010302020503010000cb01010081010100590101
+00c301010058010007010001050a0701000105020202010302020503010000cb01010081
+01010059010100c301010058010007010001050a07010001050202020103020205030100
+00cb0101008101010059010100c301010058010007010001050a07010001050202020103
+02020503010000cb0101008101010059010100c301010058010007010001050a07010001
+05020202010302020503010000cb0101008101010059010100c301010058010007010001
+050a0701000105020202010302020503010000cb0101008101010059010100c301010058
+010007010001050a0701000105020202010302020503010000cb01010081010100590101
+00c301010058010007010001050a0701000105020202010302020503010000cb01010081
+01010059010100c301010058010007010001050a07010001050202020103020205030100
+00cb0101008101010059010100c301010058010007010001050a07010001050202020103
+02020503010000cb0101008101010059010100c301010058010007010001050a07010001
+05020202010302020503010000cb0101008101010059010100c301010058010007010001
+050a0701000105020202010302020503010000cb0101008101010059010100c301010058
+010007010001050a0701000105020202010302020503010000cb01010081010100590101
+00c301010058010007010001050a0701000105020202010302020503010000cb01010081
+01010059010100c301010058010007010001050a07010001050202020103020205030100
+00cb0101008101010059010100c301010058010007010001050a07010001050202020103
+02020503010000cb0101008101010059010100c301010058010007010001050a07010001
+0502020201030202050301ff01ff01ce07010001050a0701000105020202010302020503
+01ff01ff01ce07010001050a0701000105020202010302020503010000cb010100810101
+0059010100c301010058010007010001050a0701000105020202010302020503010000cb
+0101008101010059010100c301010058010007010001050a070100010502020201030202
+0503010000cb0101008101010059010100c301010058010007010001050a070100010502
+0202010302020503010000cb0101008101010059010100c301010058010007010001050a
+0701000105020202010302020503010000cb0101008101010059010100c3010100580100
+07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
+01010058010007010001050a0701000105020202010302020503010000cb010100810101
+0059010100c301010058010007010001050a0701000105020202010302020503010000cb
+0101008101010059010100c301010058010007010001050a070100010502020201030202
+0503010000cb0101008101010059010100c301010058010007010001050a070100010502
+0202010302020503010000cb0101008101010059010100c301010058010007010001050a
+0701000105020202010302020503010000cb0101008101010059010100c3010100580100
+07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
+01010058010007010001050a0701000105020202010302020503010000cb010100810101
+0059010100c301010058010007010001050a0701000105020202010302020503010000cb
+0101008101010059010100c301010058010007010001050a070100010502020201030202
+0503010000cb0101008101010059010100c301010058010007010001050a070100010502
+0202010302020503010000cb0101008101010059010100c301010058010007010001050a
+0701000105020202010302020503010000cb0101008101010059010100c3010100580100
+07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
+01010058010007010001050a0701000105020202010302020503010000cb010100810101
+0059010100c301010058010007010001050a070100010502020201030202050301ff01ff
+01ce07010001050a070100010502020201030202050301ff01ff01ce07010001050a0701
+000105020202010302020503010000cb0101008101010059010100c30101005801000701
+0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
+0058010007010001050a0701000105020202010302020503010000cb0101008101010059
+010100c301010058010007010001050a0701000105020202010302020503010000cb0101
+008101010059010100c301010058010007010001050a0701000105020202010302020503
+010000cb0101008101010059010100c301010058010007010001050a0701000105020202
+010302020503010000cb0101008101010059010100c301010058010007010001050a0701
+000105020202010302020503010000cb0101008101010059010100c30101005801000701
+0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
+0058010007010001050a0701000105020202010302020503010000cb0101008101010059
+010100c301010058010007010001050a0701000105020202010302020503010000cb0101
+008101010059010100c301010058010007010001050a0701000105020202010302020503
+010000cb0101008101010059010100c301010058010007010001050a0701000105020202
+010302020503010000cb0101008101010059010100c301010058010007010001050a0701
+000105020202010302020503010000cb0101008101010059010100c30101005801000701
+0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
+0058010007010001050a0701000105020202010302020503010000cb0101008101010059
+010100c301010058010007010001050a0701000105020202010302020503010000cb0101
+008101010059010100c301010058010007010001050a0701000105020202010302020503
+010000cb0101008101010059010100c301010058010007010001050a0701000105020202
+010302020503010000cb0101008101010059010100c301010058010007010001070c0001
+05020202010302020503010000cb0101008101010059010100c301010058010007010000
+070d00010502020201030202050301ff01ff01ce0701030e000105020202010302020503
+01ff01ff01ce0701030e000105020202010302020503010000cb01010081010100590101
+00c30101005801000701030e000105020202010302020503010000cb0101008101010059
+010100c30101005801000701030e000105020202010302020503010000cb010100810101
+0059010100c30101005801000701030e000105020202010302020503010000cb01010081
+01010059010100c30101005801000701030e000105020202010302020503010000cb0101
+008101010059010100c30101005801000701030e000105020202010302020503010000cb
+0101008101010059010100c30101005801000701030e0001050202020103020205030100
+00cb0101008101010059010100c30101005801000701030e000105020202010302020503
+010000cb0101008101010059010100c30101005801000701030e00010502020201030202
+0503010000cb0101008101010059010100c30101005801000701030e0001050202020103
+02020503010000cb0101008101010059010100c30101005801000701030e000105020202
+010302020503010000cb0101008101010059010100c30101005801000701030e00010502
+0202010302020503010000cb0101008101010059010100c30101005801000701030e0001
+05020202010302020503010000cb0101008101010059010100c30101005801000701030e
+000105020202010302020503010000cb0101008101010059010100c30101005801000701
+030e000105020202010302020503010000cb0101008101010059010100c3010100580100
+0701030e000105020202010302020503010000cb0101008101010059010100c301010058
+01000701030e000105020202010302020503010000cb0101008101010059010100c30101
+005801000701030e000105020202010302020503010000cb0101008101010059010100c3
+0101005801000701030e000105020202010302020503010000cb01010081010100590101
+00c30101005801000701030e00010502020201030202050301ff01ff01ce0701030e0001
+0502020201030202050301ff01ff01ce0701001005020202010302020503010000cb0101
+008101010059010100c301010058010007010300000c0700000105020202010302020503
+010000cb0101008101010059010100c30101005801000701030000010508070103000001
+05020202010302020503010000cb0101008101010059010100c301010058010007010301
+0001050707010300000105020202010302020503010000cb0101008101010059010100c3
+010100580100070103010001050607010301000105020202010302020503010000cb0101
+008101010059010100c30101005801000701030200010505070103010001050202020103
+02020503010000cb0101008101010059010100c301010058010007010302000105040701
+0302000105020202010302020503010000cb0101008101010059010100c3010100580100
+070103030001050307010302000105020202010302020503010000cb0101008101010059
+010100c30101005801000701030300010502070103030001050202020103020205030100
+00cb0101008101010059010100c301010058010007010304000105010701030300010502
+0202010302020503010000cb0101008101010059010100c3010100580100070103040001
+050007010304000105020202010302020503010000cb0101008101010059010100c30101
+0058010007010305000007020304000105020202010302020503010000cb010100810101
+0059010100c3010100580100070103050000070103050001050202020103020205030100
+00cb0101008101010059010100c301010058010007010306070103050001050202020103
+02020503010000cb0101008101010059010100c301010058010007010306070003060001
+05020202010302020503010000cb0101008101010059010100c301010058010007010010
+05020202010302020503010000cb0101008101010059010100c301010058010007000011
+0502020201030202050207ff07ff07d30511020201030202050207ff07ff07d200000511
+02020103020205020701030d0000030000ff00ff00af03000001030c0001051102020103
+020205020701030b00010700030000ff00ff00ae070003000003030a0001051102020103
+0202050207010309000207010300000105ff05ff05ab0701030000050308000105110202
+010302020502070103070003050007010300000105ff05ff05ab07010300000105010003
+0306000105110202010302020502070103050003050207010300000105ff05ff05ab0701
+030000010503000303040001051102020103020205020701030300030504070103000001
+05ff05ff05ab070103000001050500030302000105110202010302020502070103010003
+050607010300000105ff05ff05ab07010300000105070003030000010511020201030202
+05020705050807010300000105ff05ff05ab070103000001050807030001051102020103
+02020502070103010703050607010300000105ff05ff05ab070103000001050707030300
+000105110202010302020502070103030703050407010300000105ff05ff05ab07010300
+0001050507030302000105110202010302020502070103050703050207010300000105ff
+05ff05ab0701030000010503070303040001051102020103020205020701030707030500
+07010300000105ff05ff05ab070103000001050107030306000105110202010302020502
+0701030907040300000105ff05ff05ab0701030000010703030800010511020201030202
+05020701030b07020300000107ff07ff07ad030000010701030a00010511020201010004
+05020701030d07000300000007ff07ff07ae030000000700030c00010511000502020400
+0502070100ff00ff00d105110000020204000000020204000502070000ff00ff00d20511
+00000202040000000202040005ff05ff05e800000202040000000202040005ff05ff05e8
+00000202040000000202040005ff05ff05e8000002020400000002020400000502ff02ff
+02dc00060202040000000208040002ff02ff02dc00000208040000000208040002ff02ff
+02dc00000208040000000208040001ff01ff01dc0000020804000000040901ff01ff01dc
+00000409
+%%EndData
+end
+%%PageTrailer
+%%Trailer
+%%BoundingBox: 0 0 377 205
+%%EOF
diff --git a/lib/tv/doc/src/tv_start_other_node.gif b/lib/tv/doc/src/tv_start_other_node.gif
new file mode 100644
index 0000000000..897686e5ef
--- /dev/null
+++ b/lib/tv/doc/src/tv_start_other_node.gif
Binary files differ
diff --git a/lib/tv/doc/src/tv_start_other_node.ps b/lib/tv/doc/src/tv_start_other_node.ps
new file mode 100644
index 0000000000..34477bed6c
--- /dev/null
+++ b/lib/tv/doc/src/tv_start_other_node.ps
@@ -0,0 +1,2316 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (ImageMagick)
+%%Title: (./tv_start_other_node.tmp.eps)
+%%CreationDate: (Tue Jun 12 16:05:42 2001)
+%%BoundingBox: 0 21 400 186
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 0
+%%EndComments
+
+%%BeginDefaults
+%%PageOrientation: Portrait
+%%EndDefaults
+
+%%BeginProlog
+%
+% Display a color image. The image is displayed in color on
+% Postscript viewers or printers that support color, otherwise
+% it is displayed as grayscale.
+%
+/buffer 512 string def
+/byte 1 string def
+/color_packet 3 string def
+/pixels 768 string def
+
+/DirectClassPacket
+{
+ %
+ % Get a DirectClass packet.
+ %
+ % Parameters:
+ % red.
+ % green.
+ % blue.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/DirectClassImage
+{
+ %
+ % Display a DirectClass image.
+ %
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { DirectClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayDirectClassPacket } image
+ } ifelse
+} bind def
+
+/GrayDirectClassPacket
+{
+ %
+ % Get a DirectClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % red
+ % green
+ % blue
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/GrayPseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassImage
+{
+ %
+ % Display a PseudoClass image.
+ %
+ % Parameters:
+ % class: 0-PseudoClass or 1-Grayscale.
+ %
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ class 0 gt
+ {
+ currentfile buffer readline pop
+ token pop /depth exch def pop
+ /grays columns 8 add depth sub depth mul 8 idiv string def
+ columns rows depth
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { currentfile grays readhexstring pop } image
+ }
+ {
+ %
+ % Parameters:
+ % colors: number of colors in the colormap.
+ % colormap: red, green, blue color packets.
+ %
+ currentfile buffer readline pop
+ token pop /colors exch def pop
+ /colors colors 3 mul def
+ /colormap colors string def
+ currentfile colormap readhexstring pop pop
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { PseudoClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayPseudoClassPacket } image
+ } ifelse
+ } ifelse
+} bind def
+
+/DisplayImage
+{
+ %
+ % Display a DirectClass or PseudoClass image.
+ %
+ % Parameters:
+ % x & y translation.
+ % x & y scale.
+ % label pointsize.
+ % image label.
+ % image columns & rows.
+ % class: 0-DirectClass or 1-PseudoClass.
+ % compression: 0-RunlengthEncodedCompression or 1-NoCompression.
+ % hex color packets.
+ %
+ gsave
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ x y translate
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ currentfile buffer readline pop
+ token pop /pointsize exch def pop
+ /Helvetica findfont pointsize scalefont setfont
+ x y scale
+ currentfile buffer readline pop
+ token pop /columns exch def
+ token pop /rows exch def pop
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ currentfile buffer readline pop
+ token pop /compression exch def pop
+ class 0 gt { PseudoClassImage } { DirectClassImage } ifelse
+ grestore
+} bind def
+%%EndProlog
+%%Page: 1 1
+%%PageBoundingBox: 0 21 400 186
+userdict begin
+%%BeginData:
+DisplayImage
+0 21
+400.000000 165.000000
+12
+1001 414
+1
+0
+0
+16
+ffffff
+000000
+d8d8d8
+4ac1df
+c2c2c2
+6b6b6b
+d9d9d9
+b22222
+aab6aa
+e7e7e7
+000000
+000000
+000000
+000000
+000000
+000000
+03ff03ff03ff03ff03ff03ff03ff03ff03c5000a01ff01ff01dc000a03f5000002080500
+01ff01ff01dc00000208050003f500000208050002ff02ff02dc00000208050003f50000
+0208050002ff02ff02dc00000208050003f500000202050602ff02ff02dc000005050202
+050003f50000020205000209000d02ff02ff02d000000202050003f50000020205000208
+0000020d050002e101030211010302380101020601010238010102310101022f010102ee
+00000202050003f500000202050002080000020d050002e1010102020107020001010203
+010102010101020e0105020001070201010302070100020b010102060101023301000203
+010102310101020b0104021e010102ee00000202050003f500000202050002080000020d
+050002e1010102050101020301010203010102010101020e010102070101020301010201
+010102050101020b010102060101023201010203010102310101020a010102020101021d
+010102ee00000202050003f500000202050002080000020205060203050002e101010205
+0101020301010203010102010101020e0101020701010203010102080104020101030203
+010102000101020301010202010302030104020601030203010102000101020701030201
+01040201010102000101020301030202010102000101020a010102000101020301030203
+010402020103020201010201010302020101020001010201010102030103020201010200
+01010201010102020103020201010202010102dd00000202050003f50000050302080000
+02020500040400000203050002e1010102050101020401010202010002020101020e0101
+020701010203010202080101020201010201010102020102020001010202010102010101
+020101010201010102090101020101010202010202000101020501010201010102010101
+020301020200010102010101020101010201010102000101020a01020200010102010101
+020101010201010102010101020101010201010102010101020001010200010102020102
+020001020200010102010101020101010201010102000101020101010201010102010101
+020101010202010102dd0000050303f50101020b000002030500040200000204050002e1
+010102050101020401010201010102020101020e01040204010102040103020601010206
+010102020101020101010202010102010101020101010201010202080101020101010202
+010102010101020501010201010102010101020301010201010102010101020101010201
+0102020c0101020101010201010102010101020101010201010102010101020101010201
+010102000101020001010202010102010101020101010205010102010102020301010201
+010102010101020101010202010002e1010103f50101020b000002030500040200000204
+050002e1010102050101020501010200010002030101020e010102070101020601020205
+010102030104020201010201010102020101020101050202010302060101020101010202
+01010201010102050101020101010201010102030101020101010201010502010101020d
+010102010101020101010201010102010101020101010201010502010101020001010200
+010102020101020101010201010102020104020101010204010102010105020201010200
+010102e1010103f50101020b000002040500040000000205050002e10101020501010205
+010302030101020e01010207010102070101020501010202010102010101020201010201
+010102020101020101010208010202050101020101010202010102010101020501010201
+01010201010102030101020101010201010102050101020d010102010101020101010201
+010102010101020101010201010102050101020101010200010102010101020101010201
+01010201010102010101020101010204010102010101020601010200010002e2010103f5
+0101020b000002040500040000000205050002e10101020501010206010102040101020e
+010102070101020301010201010102050101020201010201010102020101020101010202
+010102010101020201000205010102050101020101010202010102010101020501010201
+0101020101010203010102010101020101010202010002010101020d0101020101010201
+010102010101020101010200010202010101020201000202010102070101020101010201
+01010201010102010101020101010204010102010101020201000203010202e2010103f5
+0101020b0000020500000206050002e10101020501010206010102040101020e01050203
+010102040103020701020201010202000101020101040203010102020103020201040207
+01030203010102010101020601030203010202010101020101010202010302020101020d
+010102010101020201030203010102000101020201030204010502020101020101010201
+010102020102020001010200010102040101020201030204010102e3010103f50101020b
+0000020d050002e1010302110103029201060255010102e4010103f50101020b0000020d
+050002ff02eb010102e4010103f50101020b0000020d050002ff02ff02d2010103f50101
+020c050d02ff02ff02d3010103f5010102ff02ff02ee010103f5010102ff02ff02ee0101
+03f5010102ff02ff02ee010103f5010102ff02ff02ee010103f5010102ff02ff02ee0101
+03f501010202060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+00000600000006000000060000000600000006000202010103f501010202000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+06000000060001000202010103f5010102020600000006ff06ff06e40100060002020101
+03f501010202000006ff06ff06e601000202010103f5010102020600000006ff06ff06e4
+010006000202010103f501010202000006ff06ff06e601000202010103f5010102020600
+000006ff06ff06e4010006000202010103f5010102020000060c07040604070006030702
+061f0700060207000604070006270702060b07000606070006ff06ff0635070006020700
+06090702061401000202010103f50101020206000000060b0700060f0700061f07000602
+0700062c070006020700060a070006ff06ff063d070006020700060b0700061301000600
+0202010103f5010102020000060c07000606070206050700060307020618070006020700
+060207020603070206020700060207000617070006020700060107000600070106020704
+060207020603070206020700060007010603070206ff06ff062007000602070006020702
+060507000602070006000701060d01000202010103f50101020206000000060b07000608
+070006050700060207000602070006180700060007000605070006020700060207000601
+070006020700061707000602070006010701060107000603070006060700060207000602
+07000601070106010700060107000602070006ff06ff061f070006020700060107000602
+0700060407000602070106010700060b010006000202010103f5010102020000060c0703
+060507000605070006020700060207000618070006000700060507000602070006020700
+060107000600070006000700061707000602070006010700060207000603070006060700
+060207000602070006010700060207000601070006ff06ff062307040601070006020700
+060407000602070006020700060c01000202010103f50101020206000000060b07000608
+070006050700060207040618070006000700060507000602070406010700060007000600
+070006170700060207000601070006020700060307000606070006020700060207000601
+0700060207000602070206ff06ff06200700060207000601070406040700060207000602
+0700060b010006000202010103f5010102020000060c0700060807000605070006020700
+061d07000606070006020700060507000600070006000700061707000602070006010700
+060207000603070006060700060207000602070006010700060207000605070006ff06ff
+061f07000602070006010700060807000602070006020700060c01000202010103f50101
+020206000000060b07000608070006050700060207000602070006190700060607000602
+070006020700060107000600070006000700061707000602070006010701060107000603
+07000606070006020700060207000601070006020700060107000602070006ff06ff061f
+0700060207000601070006020700060407000602070106010700060b0100060002020101
+03f5010102020000060c0700060807000605070006030702061a07000606070006030702
+060307000600070006190702060207000600070106050701060407000603070206020700
+060207000602070206ff06ff062007000602070006020702060507000602070006000701
+060d01000202010103f501010202060000000676070006ff06ff065b0700060f01000600
+0202010103f5010102020000060b0706062a0706062a07060600070006ff06ff06450706
+060e0700061001000202010103f50101020206000000060a0706062a0706062a07060600
+070006ff06ff06450706060e0700060f010006000202010103f501010202000006ff06ff
+06e601000202010103f5010102020600000006ff06ff06e4010006000202010103f50101
+0202000006ff06ff06e601000202010103f5010102020600000006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+0202010103f5010102020000060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+0600010006000100060001000600010006000100060001000202010103f50101020206ff
+06ff06e80202010103f50101020206ff06ff06e80202010103f50101020206ff06ff06e8
+0202010103f50101020206ff06ff06e80202010103f50101020206ff06ff06e802020101
+0303000a01d9000a03010101020206ff06ff06e802020101030300000208050001d90000
+0208050003010101020206ff06ff06e802020101030300000208050002d9000002080500
+03010101020206ff06ff06e802020101030300000208050002d900000208050003010101
+020206ff06ff06e802020101030300000202050602d90000050502020500030101010202
+06ff06ff06e80202010103030000020205000209000d02cd000002020500030101010202
+06ff06ff06e802020101030300000202050002080000020d0500021a0103021101030250
+0101021a0101022700000202050003010101020206ff06ff06e802020101030300000202
+050002080000020d0500021a01010202010702000101020301010201010102100103022b
+0100020e0101021a0101022700000202050003010101020206ff06ff06e8020201010303
+00000202050002080000020d0500021a010102050101020301010203010102010101020f
+01010201010102290101020e0101021a0101022700000202050003010101020206ff06ff
+06e8020201010303000002020500020800000202050602030500021a0101020501010203
+01010203010102010101020e010102060103020301010200010102030101020001010203
+010302030103020001040201010302030104020601010200010102030103020301040202
+010302030104021700000202050003010101020206ff06ff06e802020101030300000503
+02080000020205000404000002030500021a010102050101020401010202010002020101
+020e01010205010102010101020201020200010102020102020001010201010102010101
+020101010201010102000101020201010201010102010101020101010206010202000101
+02010101020101010201010102010101020101010201010102010101021b000005030301
+0101020206ff06ff06e80202010103030101020b0000020305000402000002040500021a
+010102050101020401010201010102020101020e01010205010102010101020201010201
+010102020101020101010201010102010101020101010204010102020101020101010201
+010102010101020601010201010102010101020101010201010102010101020101010201
+010102010102021d010103010101020206ff06ff06e80202010103030101020b00000203
+05000402000002040500021a010102050101020501010200010002030101020e01010205
+010102010101020201010201010102020101020101010201010502010101020401010202
+010502010101020101010206010102010101020101010201010102010101020101010201
+010502020103021b010103010101020206ff06ff06e80202010103030101020b00000204
+05000400000002050500021a0101020501010205010302030101020e0101020501010201
+010102020101020101010202010102010101020101010205010102040101020201010205
+010102010101020601010201010102010101020101010201010102010101020101010208
+0102021a010103010101020206ff06ff06e80202010103030101020b0000020405000400
+000002050500021a0101020501010206010102040101020f010102020100020001010201
+010102020101020101010202010102010101020101010202010002010101020201000200
+010102020101020201000201010102000102020601010201010102010101020101010201
+010102000102020101010202010002050101021a010103010101020206ff06ff06e80202
+010103030101020b00000205000002060500021a01010205010102060101020401010210
+010302020103020301010201010102020101020101010202010302030103020201020201
+010302030101020001010206010102010101020201030203010102000101020201030202
+0104021b010103010101020206ff06ff06e80202010103030101020b0000020d0500021a
+010302110103029a010103010101020206ff06ff06e80202010103030101020b0000020d
+050002cf010103010101020206ff06ff06e80202010103030101020b0000020d050002cf
+010103010101020206ff06ff06e80202010103030101020c050d02d00101030101010202
+06ff06ff06e8020201010303010102eb010103010101020206ff06ff06e8020201010303
+010102eb010103010101020206ff06ff06e8020201010303010102eb0101030101010202
+06ff06ff06e8020201010303010102eb0101030101010202061c01020604010306c10102
+06040103061a0102067f01010605010206f001020604010306190101062f020201010303
+010102eb0101030101010202060e01060608010006060101060f010206010102069b0106
+06080100060601010610010506040101064d010206240104060d0101061e010206240102
+060101020693010606080100060601010611010306350202010103030101020206000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+06000000060000000600000006000000060000000600000002020101030101010202060e
+0100060101010600010006070101060601000611010106010100069d0100060101010600
+010006070101060601000613010106060100064d0101060001010624010106000101060c
+0100061e0101060001010624010106010100069501000601010106000100060701010606
+010006110101060101010634020201010303010102020000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060002020101030101010202061001010603010306020103
+060301010603010306080102060001010601010306000101060001000600010006020103
+068b010106030103060201030603010106030103060a010106030104064c010106010105
+060001030600010206020103060101010600010206070101060101010600010306030104
+061d01010601010506000103060001020602010306010101060001020607010206000101
+060101030600010106000100060001000602010306830101060301030602010306030101
+060301030609010106010100060001030602010506010103062102020101030301010202
+0600000006e2010002020101030101010202061001010606010106000101060101010602
+010106020101060101010607010006000100060001000605010106000105060001010601
+0101068a0101060601010600010106010101060201010602010106010101060901010602
+010106010101064c01000602010106000101060201000600010206000101060001010601
+010106010102060001000607010106010101060201010602010106010101061d01000602
+010106000101060201000600010206000101060001010601010106010102060001000607
+010006000100060001000605010106000105060001010601010106820101060601010600
+010106010101060201010602010106010101060801020604010106020101060001010601
+010106010101062002020101030301010202000006e20100060002020101030101010202
+061001000604010406000101060101010602010106010106060701000600010206020104
+060001010600010006000107068a01000604010406000101060101010602010106010106
+060901010601010106020101064b01010602010006010101060001000600010006000101
+0601010806010101060a0103060401010601010106020101061c01010602010006010101
+0600010006000100060001010601010806010101060a0100060001020602010406000101
+060001000600010706820100060401040600010106010101060201010601010606090102
+0603010106040101060101060620020201010303010102020600000006e2010002020101
+030101010202060f0101060201010601010106000101060201010601010106020101060b
+010106000101060101010601010106010100060001000600010006000101068e01010602
+01010601010106000101060201010601010106020101060d01010602010106010101064c
+010106010101060101020600010006010100060201000600010106050101060a01010606
+01010602010106010101061d010106010101060101020600010006010100060201000600
+010106050101060a01010600010106010101060101010601010006000100060001000600
+010106860101060201010601010106000101060201010601010106020101060b01010601
+0101060201010603010106030101062502020101030301010202000006e2010006000202
+0101030101010202060f0101060201010601010106000101060101010602010106020101
+060101010607010006010101060101010601010106000101060001000600010006000101
+06010101068a010106020101060101010600010106010101060201010602010106010101
+060901010602010106010101064c01010600010106020103060101010601010106000101
+0601010106010101060a0101060601010602010106010101061d01010600010106020103
+0601010106010101060001010601010106010101060a0100060101010601010106010101
+060001010600010006000100060001010601010106820101060201010601010106000101
+060101010602010106020101060101010607010106010101060201010602010206000101
+06000101060101010621020201010303010102020600000006e201000202010103010101
+0202060e01030602010a0601010506010103060701020600010106020107060001000600
+010106000103068a01030602010a06010105060101030608010506010105064c01020603
+01010600010006000103060001020600010306010104060701030603010506010105061d
+010206030101060001000600010306000102060001030601010406070102060001010602
+0107060001000600010106000103068201030602010a0601010506010103060901030601
+010506000105060101030622020201010303010102020000060c07040604070006030702
+06c3010006000202010103010101020206ff06ff06e80202010103030101020206000000
+060b0700060f070006c401000202010103010101020206ff06ff06e80202010103030101
+02020000060c070006060702060507000603070206bc0100060002020101030101010202
+06ff06ff06e80202010103030101020206000000060b0700060807000605070006020700
+0602070006bc01000202010103010101020206ff06ff06e8020201010303010102020000
+060c07030605070006050700060207000602070006bb0100060002020101030101010202
+06ff06ff06e80202010103030101020206000000060b0700060807000605070006020704
+06bc01000202010103010101020206ff06ff06e8020201010303010102020000060c0700
+06080700060507000602070006bf010006000202010103010101020206ff06ff06e80202
+010103030101020206000000060b07000608070006050700060207000602070006bc0100
+02020101030101010202060201ff01ff01e20602020201010303010102020000060c0700
+06080700060507000603070206bc01000600020201010301010102020603010000cb0101
+008101010059010100c30101005801010600010006000100060001000600010006000100
+060001000600010006000100060000000602020201010303010102020600000006e20100
+020201010301010102020603010000cb0101008101010059010100c30101005801000600
+010004060100040600000603020201010303010102020000060b070606cf010006000202
+01010301010102020603010000cb010100810101000c0100002a0100001f010100c30101
+00580101060004050000060004060600000006020202010103030101020206000000060a
+070606d001000202010103010101020206030100001f0100000a0100009e010100810101
+000b0100000301020003010200090104000a010100020100001e0101001e010200050100
+0012010000060100002e010000120102000301020031010100080104004a010006000100
+040506000100060004050000060302020101030301010202000006e20100060002020101
+03010101020206030100001f0100000a0100009e010100810101000a0100000301000002
+0100000101000002010000080100000d01000001010000020100001d0101002001000019
+0100003601000014010000050100003101010008010000020100004a0101060004040600
+0000060001000405060000000602020201010303010102020600000006e2010002020101
+03010101020206030100000901020003010200090104000201020002010000000101009b
+010100810101000901000008010000010100000c0100000d01000001010000030100001c
+010100090102000201000000010100020100000001010005010000030102000301020003
+01020002010400020102000301020002010000000101000a010200030102000201000000
+010100020104000101000000010100030102000501000005010000030102000201000000
+010100230101000c0100004a010006000100040400000602010004040000060302020101
+030301010202000006e20100060002020101030101010202060301000008010000020100
+0001010000020100000a010000030100000201000001010100010100009a010100810101
+000801000009010000010100000c0103000a01000001010000040100001b010100080100
+000201000001010100010100000101010001010000040100000501000002010000020100
+000101000002010000030100000601000002010000020100000101010001010000080100
+000201000001010000020100000101010001010000030100000301010001010000010100
+0002010000040100000501000002010000020100000101010001010000220101000b0100
+004b01010600040300000602010006000404060000000602020201010303010102020600
+000006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010002020101030101010202
+06030100000c010000010100000e0100000701000001010000020100009a010100810101
+000701000009010000020103000d0100000901000001010000050100001a0101000c0100
+000101000002010000010100000201000004010000050100000201000009010000030100
+000601000002010000020100000101000002010000080100000501000002010000010100
+000201000003010000030100000501000002010000040100000501000002010000020100
+0001010000260101000b0100004b01000600010004030600000006020100060004030000
+060302020101030301010202000006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+0100060002020101030101010202060301000009010300010100000e0100000401030001
+010000020100009a01010081010100080100000701000003010000020100000c01000009
+01000001010000040100001b010100090103000101000002010000010100000201000004
+010000050100000201000006010300030100000601000002010000020100000101000002
+010000080100000501000002010000010100000201000003010000030100000501000002
+01000004010000050100000201040001010000260101000b0100004b0101060004020600
+00000604010004030600000006020202010103030101020206e502020101030101010202
+06030100000801000002010000010100000e010000030100000201000001010000020100
+009a01010081010100090100000501000004010000020100000801000002010000090100
+0001010000030100001c0101000801000002010000010100000201000001010000020100
+000401000005010000020100000501000002010000030100000601000002010000020100
+000101000002010000080100000501000002010000010100000201000003010000030100
+00050100000201000004010000050100000201000005010000260101000a0100004c0100
+0600010004020000060601000402000006030202010103030101020206e5020201010301
+010102020603010000080100000201000001010000020100000a01000003010000020100
+0001010100010100009a010100810101000a010000030100000501000002010000030101
+000201000002010000030101000301000001010000020100001d01010008010000020100
+000101010001010000010101000101000004010000050100000201000002010000010100
+000201000003010000060100000201000002010000010100000201000008010000020100
+000101000002010000010100000201000003010000030100000501000002010000040100
+0005010000020100000201000001010000260101000a0100004c01010600040100000606
+0100060004020600000006020202010103030101020206e5020201010301010102020603
+01000009010300020102000c0101000201030001010000000101009b010100810101000b
+010000020104000201020004010100030102000401010004010100020100001e01010009
+010300010100000001010002010000000101000501000005010000030102000301030004
+010100040100000301020002010000020100000901020003010200020100000201000004
+010100010100000601020005010000050100000301020002010000260101000a0100004c
+0100060001000401060000000606010006000401000006030202010103030101020206e5
+02020101030101010202060301000015010500af010100810101000c0100002a0100001f
+0101000f010000050100003c010500680101005801010600040006000000060801000401
+0600000006020202010103030101020206e5020201010301010102020603010000cb0101
+0081010100590101000f01000005010000ab0101005801000600010004000000060a0100
+0400000006030202010103030101020206e5020201010301010102020603010000cb0101
+0081010100590101000f01000005010000ab010100580101060000000600010006000100
+060001000600010006000100060001000600040006000000060202020101030301010202
+06e5020201010301010102020603010000cb0101008101010059010100c3010100580100
+060001000600010006000100060001000600010006000100060001000600010006000000
+06030202010103030101020206e5020201010301010102020603010000cb010100810101
+0059010100c30101005801010600040e0600000006020202010103030101020206e50202
+01010301010102020603010000cb0101008101010059010100c301010058010006000100
+060000000600000006000000060000000600000006000000060000000600000006030202
+010103030101020206e5020201010301010102020603010000cb01010081010100590101
+00c301010058010106000000060000000600000006000000060000000600000006000000
+060001000600000006020202010103030101020206e502020101030101010202060301ff
+01ff01ce0600010006000000060a01000600000006030202010103030101020206e50202
+0101030101010202060308cd01ff01ff010106000000060c010006000000060202020101
+03030101020206e5020201010301010102020603080009cb080001000981010109590101
+09c30101095801000600010006000000060a010006000000060302020101030301010202
+06e5020201010301010102020603080009cb08000100090b010109550101091b01010959
+010109c301010958010106000000060c01000600000006020202010103030101020206e5
+020201010301010102020603080009cb08000100090a0100091c01000931010009080100
+091a0101090c0100093101000918010109c30101095801000600010006000000060a0100
+0600000006030202010103030101020206e50202010103010101020206030800091a0800
+09af08000100090a01000905010009050101090c01000903010209030102090a01020902
+0104090a01010902010009070100091a0101090b01000903010209030102090a01020902
+0104090a01010902010009170101091a010009a70101090901020904010109030102093d
+010106000000060c01000600000006020202010103030101020206cf0100060001000600
+010006000100060001000600010006000100060001000600010006040202010103010101
+020206030800091a080009af08000100090a0100090401010904010009010100090a0100
+090301000902010009010100090201000908010009020100090101000902010009090100
+090101000902010009060100091a0101090a010009030100090201000901010009020100
+0908010009020100090101000902010009090100090101000902010009160101091a0100
+09a70101090801000902010009020100090101000901010009020100093c010006000100
+06000000060a01000600000006030202010103030101020206ce01000600010006000100
+060001000600010006000100060001000600010006000100060000000603020201010301
+0101020206030800090908020903080209030801090008000902080209a908000100090a
+010009030100090001000904010009010100090901000908010009010100091001000905
+010009090100090101000903010009050100091a01010909010009080100090101000910
+010009050100090901000901010009030100091501010909010209030102090301010900
+010009020102090a01020903010209020100090001010902010009020100090201020902
+01000900010109700101090c01000902010009010100090101000940010106000000060c
+010006000000060202020101030301010202060500000100000001000000010000000100
+000001000000010000000100000001000000010000000100000001000000010000000100
+000001000000010000000100000001000000010000000100000001000000010000000100
+000001000000010000000100000001000000010000000100000001000000010000000100
+000001000000010000000100000001000000010000000100000001000000010000000100
+000001000000010000000100000001000000010000000100000001000000010000000100
+000001000000010000000100000001000000010000000100000001000000010000000100
+000001000000010000000100000001000000010000000100000001000000010000000100
+000001000000010000000100000001000000010000000100000001000000010000000100
+000001000000010000000100000001000000010000000100000001000000010000000100
+000001000000010000000100000001000000010000000100000001000000010000000100
+000001000000010000000100000001000000010000000602010004060100040600000604
+020201010301010102020603080009080800090208000901080009020800090108000901
+0801090108000902080009a808000100090a010009050100090401000901010009080100
+09090100090101000910010009040100090a0100090101000904010009040100091a0101
+0908010009090100090101000910010009040100090a0100090101000904010009140101
+090801000902010009010100090201000901010009010101090101000902010009080100
+090201000901010009020100090101010901010009010100090201000901010009020100
+0901010109010100096f0101090c01000902010009010100090101000940010006000100
+06000000060a010006000000060302020101030301010202060501000000010000000100
+000001000000010000000100000001000000010000000100000001000000010000000100
+000001000000010000000100000001000000010000000100000001000000010000000100
+000001000000010000000100000001000000010000000100000001000000010000000100
+000001000000010000000100000001000000010000000100000001000000010000000100
+000001000000010000000100000001000000010000000100000001000000010000000100
+000001000000010000000100000001000000010000000100000001000000010000000100
+000001000000010000000100000001000000010000000100000001000000010000000100
+000001000000010000000100000001000000010000000100000001000000010000000100
+000001000000010000000100000001000000010000000100000001000000010000000100
+000001000000010000000100000001000000010000000100000001000000010000000100
+000001000000010000000100000001000000010000000100000106010100060004050000
+060004060600000006030202010103010101020206030800090808000905080009020800
+0901080009020800090108000902080009a8080001000908010109060100090401000901
+0100090701000909010009020103090c010009050100090a010009010100090501000904
+010109180101090701000909010009020103090c010009050100090a0100090101000905
+010009130101090801000905010009020100090101000902010009010100090201000908
+010009050100090201000901010009050100090201000901010009020100090101000973
+0101090b0100090301000901010009010103093d010106000000060c0100060000000602
+0202010103030101020206050000010000c4060201000405060001000600040500000604
+020201010301010102020603080009080800090508000902080009010800090208000901
+080409a808000100090a0100090501000904010009010100090801000907010009030100
+09020100090a010009060100090a0100090101000904010009040100091a010109080100
+090701000903010009020100090a010009060100090a0100090101000904010009140101
+090801000905010009020100090101000902010009010104090901020902010409010100
+0906010009000100090201040901010009730101090a0100090401000901010009010100
+09020100093c01000600010006000000060a010006000000060302020101030301010202
+0605010000c5060101000600040406000000060001000405060000000603020201010301
+010102020603080009080800090508000902080009010800090208000901080009ac0800
+0100090a0100090501000904010009010100090901000905010009040100090201000909
+010009060100090b0100090101000903010009050100091a010109090100090501000904
+0100090201000909010009060100090b0100090101000903010009150101090801000905
+010009020100090101000902010009010100091001000901010009050100090601000900
+01000902010009050100097301010909010009050100090101000901010009020100093c
+010106000000060c01000600000006020202010103030101020206050000010000260100
+009c06020100040400000602010004040000060402020101030101010202060308000908
+08000902080009010800090208000901080009010801090108000902080009a808000100
+090a01000905010009040100090101000903010109040100090301000905010009020100
+0903010109020100090701000905010109030100090101000902010009060100091a0101
+090a01000903010009050100090201000903010109020100090701000905010109030100
+090101000902010009160101090801000902010009010100090201000901010009010101
+090101000902010009080100090201000901010009020100090101000907010009030100
+0902010009010100097301010908010009060100090101000901010009020100093c0100
+0600010006000000060a01000600000006030202010103030101020206050100001a0100
+000a01000000010000180102007f06010100060004030000060201000600040406000000
+060302020101030101010202060308000909080209030802090308010900080009020802
+09a908000100090a01000903010409030101090401010905010009020104090201020904
+0101090201040903010009050101090401010902010009070100091a0101090b01000902
+010409020102090401010902010409030100090501010904010109020100091701010909
+010209030102090301010900010009020102090a01020903010209020100090701000904
+01020902010009730101090801040903010109030102093d010106000000060c01000600
+0000060202020101030301010202060500000100002401000002010000190100007f0602
+0100040306000000060201000600040300000604020201010301010102020603080009cb
+08000100090a010009140100090601000931010009080100091a0101090c010009310100
+091801010923010509990101095801000600010006000000060a01000600000006030202
+010103030101020206050100000901010000010000030102000301020002010000000101
+000201000000010200010101000001000003010200020100000001010005010000030102
+000201000002010000700601010006000402060000000604010004030600000006030202
+01010301010102020603080009cb08000100090b01010910010109420101091b01010959
+010109c301010958010106000000060c0100060000000602020201010303010102020605
+000001000008010000000100000001000001010000020100000401000002010100010100
+000101000000010000000100000101000000010000000100000101000002010000010101
+000101000004010000020100000201000001010000020100007006020100040200000606
+0100040200000604020201010301010102020603080009cb080001000981010109590101
+09c30101095801000600010006000000060a010006000000060302020101030301010202
+060501000009010000000100000001000005010000040100000201000002010000010100
+000001000000010000010100000001000000010000050100000101000008010000020100
+000201000002010000010100007006010100060004010000060601000600040206000000
+0603020201010301010102020603080009cb08000100098101010959010109c301010958
+010106000000060c01000600000006020202010103030101020206050000010000080100
+000001000000010000020103000401000002010000020100000101000000010200010100
+000001000000010000020103000101000008010000020104000201000001010000700602
+0100040106000000060601000600040100000604020201010301010102020603080009cb
+08000100098101010959010109c30101095801000600010006000000060a010006000000
+060302020101030301010202060501000009010000000100000001000001010000020100
+000401000002010000020100000101000005010000000100000001000001010000020100
+000101000008010000020100000701000000010000700601010006000400060000000608
+01000401060000000603020201010301010102020603080009cb08000100098101010959
+010109c301010958010106000000060c0100060000000602020201010303010102020605
+000001000008010000000100000001000001010000020100000401000002010000020100
+000201000001010000010100000001000000010000010100000201000001010000080100
+00020100000201000003010100710602010004000000060a010004000000060402020101
+0301010102020603080009cb08000100098101010959010109c301010958010006000100
+06000000060a010006000000060302020101030301010202060501000009010000000100
+000001000002010300040100000201000002010000030101000201000000010000000100
+000201030001010000080100000301020005010000710601010006000000060001000600
+010006000100060001000600010006000100060004000600000006030202010103010101
+0202060308cd01ff01ff010106000000060c010006000000060202020101030301010202
+060500000100005101000071060201000600010006000100060001000600010006000100
+060001000600010006000000060402020101030101010202060308cd01ff01ff01000600
+010006000000060a01000600000006030202010103030101020206050100004f01000000
+01000072060101000600040e060000000603020201010301010102020603080009cb0800
+0100098101010959010109c301010958010106000000060c010006000000060202020101
+030301010202060500000100004f01000073060201000600000006000000060000000600
+0000060000000600000006000000060000000604020201010301010102020603080009cb
+08000100090b010109550101091b01010959010109c30101095801000600010006000000
+060a0100060000000603020201010303010102020605010000c506010100060000000600
+000006000000060000000600000006000000060000000600010006000000060302020101
+0301010102020603080009cb08000100090a0100091c01000931010009080100091a0101
+090c0100093101000918010109c301010958010106000000060c01000600000006020202
+010103030101020206050000010000c40602010006000000060a01000600000006040202
+010103010101020206030800091a080009af08000100090a01000905010009050100090d
+01000903010209030102090a010209020104090a01010902010009070100091a0101090b
+01000903010209030102090a010209020104090a01010902010009170101091a010009a7
+01010909010209030102094401000600010006000000060a010006000000060302020101
+030301010202060501000001040000000400000004000000040000000400000004000000
+040000000400000004000000040000000400000004000000040000000400000004000000
+040000000400000004000000040000000400000004000000040000000400000004000000
+040000000400000004000000040000000400000004000000040000000400000004000000
+040000000400000004000000040000000400000004000000040000000400000004000000
+040000000400000004000000040000000400000004000000040000000400000004000000
+040000000400000004000000040000000400000004000000040000000400000004000000
+040000000400000004000000040000000400000004000000040000000400000004000000
+040000000400000004000000040000000400000004000000040000000400000004000000
+040000000400000004000000040000000400000004000000040000000400000004000000
+040000000400000004000000040000000400000004000000040000000400000004000000
+040000020601010006000000060c01000600000006030202010103010101020206030800
+091a080009af08000100090a01000904010109040101090c010009030100090201000901
+010009020100090801000902010009010100090201000909010009010100090201000906
+0100091a0101090a01000903010009020100090101000902010009080100090201000901
+01000902010009090100090101000902010009160101091a010009a70101090801000902
+010009010100090201000943010106000000060c01000600000006020202010103030101
+020206050000010004c200010602010006000000060a0100060000000604020201010301
+010102020603080009090802090308020903080109000800090208020909080009000801
+0903080209020801090008000903080209030802097f08000100090a0100090301000900
+01000903010009000100090b010009080100090101000910010009050100090901000901
+01000903010009050100091a010109090100090801000901010009100100090501000909
+01000901010009030100091501010909010209030102090301010900010009020102090a
+010209030102090201000900010109020100090201000902010209020100090001010970
+0101090c010009050100094301000600010006000000060a010006000000060302020101
+030301010202060501000001044f0100046f010000010601010006000000060c01000600
+000006030202010103010101020206030800090808000902080009010800090208000901
+080009010801090108000902080009080801090108000901080009020800090108000900
+08000900080009010800090208000901080009020800097e08000100090a010009050100
+09050100090a010009090100090101000910010009040100090a01000901010009040100
+09040100091a01010908010009090100090101000910010009040100090a010009010100
+090401000914010109080100090201000901010009020100090101000901010109010100
+090201000908010009020100090101000902010009010101090101000901010009020100
+09010100090201000901010109010100096f0101090c0100090501000943010106000000
+060c0100060000000602020201010303010102020605000001000411010004030100042c
+0100040901000400010004180102045300010602010006000000060a0100060000000604
+020201010301010102020603080009080800090508000902080009010800090208000901
+080009020800090808000902080009050800090108000900080009000800090108000902
+080009010800098208000100090801010906010009050100090901000909010009020103
+090c010009050100090a0100090101000905010009040101091801010907010009090100
+09020103090c010009050100090a01000901010009050100091301010908010009050100
+090201000901010009020100090101000902010009080100090501000902010009010100
+090501000902010009010100090201000901010009730101090a01010904010109440100
+0600010006000000060a0100060000000603020201010303010102020605010000010410
+010004030100042c01000408010004020100041901000452010000010601010006000000
+060c01000600000006030202010103010101020206030800090808000905080009020800
+090108000902080009010804090808000902080009020803090108000900080009000800
+0901080409020802097f08000100090a01000905010009050100090a0100090701000903
+010009020100090a010009060100090a0100090101000904010009040100091a01010908
+0100090701000903010009020100090a010009060100090a010009010100090401000914
+010109080100090501000902010009010100090201000901010409090102090201040901
+01000906010009000100090201040901010009730101090c010009050100094301010600
+0000060c0100060000000602020201010303010102020605000001000409010204020104
+040101000400010104030102040201000400010104090100040001010403010204030101
+040001000402010204020100040001020401010104000100040301020402010004000101
+04050100040301020402010004020100044400010602010006000000060a010006000000
+060402020101030101010202060308000908080009050800090208000901080009020800
+09010800090c080009020800090108000902080009010800090008000900080009010800
+09090800097e08000100090a01000905010009050100090b010009050100090401000902
+01000909010009060100090b0100090101000903010009050100091a0101090901000905
+010009040100090201000909010009060100090b01000901010009030100091501010908
+010009050100090201000901010009020100090101000910010009010100090501000906
+010009000100090201000905010009730101090c01000905010009430100060001000600
+0000060a0100060000000603020201010303010102020605010000010407010004020100
+040301000403010104010100040101000402010004010101040101000408010104010100
+040101000402010004010100040101010401010004020100040101000400010004000100
+040101000400010004000100040101000402010004010101040101000404010004020100
+0402010004010100040201000443010000010601010006000000060c0100060000000603
+020201010301010102020603080009080800090208000901080009020800090108000901
+080109010800090208000908080009020800090108000902080009010800090008000900
+080009010800090208000901080009020800097e08000100090a01000905010009050100
+090501010904010009030100090501000902010009030101090201000907010009050101
+09030100090101000902010009060100091a0101090a0100090301000905010009020100
+090301010902010009070100090501010903010009010100090201000916010109080100
+090201000901010009020100090101000901010109010100090201000908010009020100
+090101000902010009010100090701000903010009020100090101000973010109080100
+0902010009010100090201000943010106000000060c0100060000000602020201010303
+010102020605000001000408010004020100040301000403010004020100040101000402
+010004010100040c01000402010004010100040201000401010004020100040101000402
+010004010100040001000400010004010100040001000400010004050100040101000408
+010004020100040201000402010004010100044400010602010006000000060a01000600
+000006040202010103010101020206030800090908020903080209030801090008000902
+08020909080009020800090208030901080009000800090008000902080209030802097f
+08000100090a010009030104090101040903010109050100090201040902010209040101
+090201040903010009050101090401010902010009070100091a0101090b010009020104
+090201020904010109020104090301000905010109040101090201000917010109090102
+09030102090301010900010009020102090a010209030102090201000907010009040102
+09020100097301010909010209030102094401000600010006000000060a010006000000
+060302020101030301010202060501000001040701000402010004030100040301000402
+01000401010404010100040c010004020100040101000402010004010100040201000401
+010404010100040001020401010004000100040001000402010304010100040801000402
+010404020100040101000443010000010601010006000000060c01000600000006030202
+0101030101010202060308000923080509a108000100090a010009140100090601000931
+010009080100091a0101090c010009310100091801010923010509990101095801010600
+0000060c0100060000000602020201010303010102020605000001000408010004020100
+0403010004030100040201000401010004050100040c0100040201000401010004020100
+040101000402010004010100040501000405010004000100040001000401010004020100
+0401010004080100040201000407010004000100044400010602010006000000060a0100
+060000000604020201010301010102020603080009cb08000100090b0101091001010942
+0101091b01010959010109c30101095801000600010006000000060a0100060000000603
+020201010303010102020605010000010407010004020100040301000403010004020100
+040101000402010004010100040c01000402010004010100040201000401010004010101
+040101000402010004020100040101000401010004000100040001000401010004020100
+04010100040801000402010004020100040301010444010000010601010006000000060c
+0100060000000603020201010301010102020603080009cb080001000981010109590101
+09c301010958010106000000060c01000600000006020202010103030101020206050000
+0100040901020405010104010100040201000402010204020100040c0100040201000402
+010204030101040001000402010204040101040201000400010004000100040201030401
+0100040801000403010204050100044500010602010006000000060a0100060000000604
+020201010301010102020603080009cb08000100098101010959010109c3010109580100
+0600010006000000060a0100060000000603020201010303010102020605010000010429
+0105044a01000444010000010601010006000000060c0100060000000603020201010301
+010102020603080009cb08000100098101010959010109c301010958010106000000060c
+010006000000060202020101030301010202060500000100047801000400010004460001
+0602010006000000060a0100060000000604020201010301010102020603080009cb0800
+0100098101010959010109c30101095801000600010006000000060a0100060000000603
+02020101030301010202060501000001047801000446010000010601010006000000060c
+0100060000000603020201010301010102020603080009cb080001000981010109590101
+09c301010958010106000000060c01000600000006020202010103030101020206050000
+010004c200010602010006000000060a0100060000000604020201010301010102020603
+08cd01ff01ff01000600010006000000060a010006000000060302020101030301010202
+060501000001040001000400010004000100040001000400010004000100040001000400
+010004000100040001000400010004000100040001000400010004000100040001000400
+010004000100040001000400010004000100040001000400010004000100040001000400
+010004000100040001000400010004000100040001000400010004000100040001000400
+010004000100040001000400010004000100040001000400010004000100040001000400
+010004000100040001000400010004000100040001000400010004000100040001000400
+010004000100040001000400010004000100040001000400010004000100040001000400
+010004000100040001000400010004000100040001000400010004000100040001000400
+010004000100040001000400010004000100040001000400010004000100040001000400
+010004000100040001000400010004000100040001000400010004000100040001000400
+010004000100040001000400010004000100040001000400010004000100040001000001
+0601010006000000060c010006000000060302020101030101010202060308cd01ff01ff
+010106000000060c01000600000006020202010103030101020206050000010000c40602
+010006000000060a0100060000000604020201010301010102020603080009cb08000100
+098101010959010109c30101095801000600010006000000060a01000600000006030202
+01010303010102020605010000c50601010006000000060c010006000000060302020101
+0301010102020603080009cb08000100090b0101094e0101092201010959010109c30101
+0958010106000000060c01000600000006020202010103030101020206050000010000c4
+0602010006000000060a0100060000000604020201010301010102020603080009cb0800
+0100090a010009150100093101000908010009210101090c0100093101000918010109c3
+0101095801000600010006000000060a0100060000000603020201010303010102020605
+010000c50601010006000000060c01000600000006030202010103010101020206030800
+091d08000908080009a208000100090a010009040102090c01000903010209030102090b
+010009030104090a0101090201000907010009210101090b01000903010209030102090b
+010009030104090a0101090201000917010109180100090a010009220102097701010909
+0102094b010106000000060c010006000000060202020101030301010202060500000100
+00c40602010006000000060a01000600000006040202010103010101020206030800091d
+080009ac08000100090a01000903010009020100090a0100090301000902010009010100
+090201000909010109030100090201000909010009010100090201000906010009210101
+090a01000903010009020100090101000902010009090101090301000902010009090100
+09010100090201000916010109180100090a010009240100097701010908010009020100
+094a01000600010006000000060a01000600000006030202010103030101020206050100
+00c50601010006000000060c010006000000060302020101030101010202060308000909
+080209030802090308020902080009010800090308020903080209030802099408000100
+090a01000903010009020100090901000908010009010100090c01000900010009070100
+0909010009010100090301000905010009210101090901000908010009010100090c0100
+090001000907010009090100090101000903010009150101090801000900010109030102
+090201040908010009010100090301020902010009000101090201000900010109030102
+0905010009770101090c0100094a010106000000060c0100060000000602020201010303
+0101020206050000010000c40602010006000000060a0100060000000604020201010301
+010102020603080009080800090208000901080009020800090108000902080009010800
+090008000906080009020800090208000901080009020800099308000100090a01000903
+010009020100090801000909010009010100090e010009060100090a0100090101000904
+01000904010009210101090801000909010009010100090e010009060100090a01000901
+010009040100091401010908010109010100090101000902010009030100090a01000900
+010009030100090201000901010109010100090101010901010009010100090201000904
+010009770101090c0100094a01000600010006000000060a010006000000060302020101
+0303010102020605010000c50601010006000000060c0100060000000603020201010301
+010102020603080009080800090508000902080009010800090208000901080109070800
+090208000902080009010800099708000100090801010905010209080100090901000902
+0103090b010009060100090a0100090101000905010009040101091f0101090701000909
+010009020103090b010009060100090a0100090101000905010009130101090801000902
+0100090101000902010009030100090a0101090401000902010009010100090501000902
+010009010100090201000904010009770101090b0100094b010106000000060c01000600
+000006020202010103030101020206050000010000c40602010006000000060a01000600
+000006040202010103010101020206030800090808000905080009020800090108000902
+080009010801090708000902080409020802099408000100090a01000903010009020100
+09080100090701000903010009020100090a010009060100090a01000901010009040100
+090401000921010109080100090701000903010009020100090a010009060100090a0100
+09010100090401000914010109080100090201000901010409030100090a010109040104
+090101000905010009020100090101040904010009770101090a0100094c010006000100
+06000000060a0100060000000603020201010303010102020605010000c5060101000600
+0000060c0100060000000603020201010301010102020603080009080800090508000902
+080009010800090208000901080009000800090608000902080009090800099308000100
+090a0100090301000902010009090100090501000904010009020100090a010009050100
+090b01000901010009030100090501000921010109090100090501000904010009020100
+090a010009050100090b0100090101000903010009150101090801000902010009010100
+09070100090a010009000100090301000905010009050100090201000901010009080100
+0977010109090100094d010106000000060c010006000000060202020101030301010202
+06050000010000c40602010006000000060a010006000000060402020101030101010202
+060308000908080009020800090108000902080009010800090208000901080009010800
+0905080009020800090208000901080009020800099308000100090a0100090301000902
+010009030101090401000903010009050100090201000903010109040100090501000905
+01010903010009010100090201000906010009210101090a010009030100090501000902
+010009030101090401000905010009050101090301000901010009020100091601010908
+010009020100090101000902010009030100090a01000901010009020100090201000901
+010009050100090201000901010009020100090401000977010109080100094e01000600
+010006000000060a0100060000000603020201010303010102020605010000c506010100
+06000000060c010006000000060302020101030101010202060308000909080209030802
+090308020902080009020800090408000903080209030802099408000100090a01000904
+010209040101090501000902010409020102090401010902010409030100090501010904
+0101090201000907010009210101090b0100090201040902010209040101090201040903
+010009050101090401010902010009170101090801000902010009020102090501010908
+010009020100090201020902010009050100090201000902010209050100097701010908
+0104094a010106000000060c010006000000060202020101030301010202060500000100
+00c40602010006000000060a0100060000000604020201010301010102020603080009cb
+08000100090a0100090d010009060100093101000908010009210101090c010009310100
+09180101091c010509a00101095801000600010006000000060a01000600000006030202
+01010303010102020605010000c50601010006000000060c010006000000060302020101
+0301010102020603080009cb08000100090b010109090101094201010922010109590101
+09c301010958010106000000060c01000600000006020202010103030101020206050000
+010000c40602010006000000060a01000600000006040202010103010101020206030800
+09cb08000100098101010959010109c30101095801000600010006000000060a01000600
+00000603020201010303010102020605010000c50601010006000000060c010006000000
+0603020201010301010102020603080009cb08000100098101010959010109c301010958
+010106000000060c01000600000006020202010103030101020206050000010000c40602
+010006000000060a0100060000000604020201010301010102020603080009cb08000100
+098101010959010109c30101095801000600010006000000060a01000600000006030202
+01010303010102020605010000c50601010006000000060c010006000000060302020101
+0301010102020603080009cb08000100098101010959010109c301010958010106000000
+060c01000600000006020202010103030101020206050000010000c40602010006000000
+060a0100060000000604020201010301010102020603080009cb08000100098101010959
+010109c30101095801000600010006000000060a01000600000006030202010103030101
+02020605010000c50601010006000000060c010006000000060302020101030101010202
+060308cd01ff01ff010106000000060c0100060000000602020201010303010102020605
+0000010000c40602010006000000060a0100060000000604020201010301010102020603
+01ff01ff01ce0600010006000000060a0100060000000603020201010303010102020605
+010000c50601010006000000060c01000600000006030202010103010101020206030100
+00cb0101008101010059010100c301010058010106000000060c01000600000006020202
+010103030101020206050000010000c40602010006000000060a01000600000006040202
+01010301010102020603010000cb0101008101010059010100c301010058010006000100
+06000000060a0100060000000603020201010303010102020605010000c5060101000600
+0000060c0100060000000603020201010301010102020603010000cb010100810101000c
+0100003101000018010100c301010058010106000000060c010006000000060202020101
+03030101020206050000010000c40602010006000000060a010006000000060402020101
+030101010202060301000010010200090100000d0102000a010200100100007b01010081
+0101000b01000003010200030102000b010000050100000c010100020100001701010010
+010200090100000d010200930101000a0101004b01000600010006000000060a01000600
+00000603020201010303010102020605010000c50601010006000000060c010006000000
+060302020101030101010202060301000012010000090100000f0100000c010000100100
+007b010100810101000a0100000301000002010000010100000201000009010100040101
+000b01000001010000020100001601010012010000090100000f01000093010100090100
+00010100004a010106000000060c01000600000006020202010103030101020206050000
+010000c40602010006000000060a01000600000006040202010103010101020206030100
+0009010100000100000401000003010200020100000001010003010200050100000c0100
+000301020003010200020100000101000003010200710101008101010009010000080100
+00010100000c0100000001000003010000000100000b0100000101000003010000150101
+000901010000010000040100000301020002010000000101000301020005010000090100
+0000010100030102000201010000010000030102000a0102000301020002010000000101
+0002010000020100000201020002010000000101003f01010009010000010100004a0100
+0600010006000000060a0100060000000603020201010303010102020605010000c50601
+010006000000060c01000600000006030202010103010101020206030100000801000001
+01010004010000020100000201000001010100010100000101000002010000040100000c
+010000020100000201000001010000020100000101000000010000030100000201000070
+010100810101000801000009010000010100000e010000050100000b0100000101000004
+010000140101000801000001010100040100000201000002010000010101000101000001
+010000020100000401000009010100010100000101000002010000010100000001000000
+010000010100000201000008010000020100000101000002010000010101000101000001
+01000002010000010100000201000001010100010100003e01010009010000010100004a
+010106000000060c01000600000006020202010103030101020206050000010000c40602
+010006000000060a01000600000006040202010103010101020206030100000801000002
+010000040100000201000002010000010100000201000005010000040100000c01000002
+010000020100000101000005010100040100007401010081010100070100000901000002
+0103000b010000050100000b010000010100000501000013010100080100000201000004
+010000020100000201000001010000020100000501000004010000090100000201000005
+010000010100000001000000010000010100000201000008010000050100000201000001
+01000005010000020100000101000002010000010100004201010009010000010100004a
+01000600010006000000060a0100060000000603020201010303010102020605010000c5
+0601010006000000060c0100060000000603020201010301010102020603010000080100
+0002010000040100000201000002010000010100000201000002010300040100000c0100
+000201000002010000010100000501010005010200710101008101010008010000070100
+0003010000020100000a010000050100000b010000010100000401000014010100080100
+000201000004010000020100000201000001010000020100000201030004010000090100
+000201000002010300010100000001000000010000010104000901020002010400010100
+00060100000001000002010400010100004201010009010000010100004a010106000000
+060c01000600000006020202010103030101020206050000010000c40602010006000000
+060a01000600000006040202010103010101020206030100000801000002010000040100
+00020100000201000001010000020100000101000002010000040100000c010000020100
+000201000001010000050100000001000007010000700101008101010009010000050100
+0004010000020100000a010000050100000b010000010100000301000015010100080100
+000201000004010000020100000201000001010000020100000101000002010000040100
+000901000002010000010100000201000001010000000100000001000001010000100100
+000101000005010000060100000001000002010000050100004201010009010000010100
+004a01000600010006000000060a01000600000006030202010103030101020206050100
+00c50601010006000000060c010006000000060302020101030101010202060301000008
+010000010101000401000002010000020100000101010001010000010100000201000004
+0100000c0100000201000002010000010100000201000001010000010100000201000002
+01000070010100810101000a010000030100000501000002010000030101000401000005
+010000050101000301000001010000020100001601010008010000010101000401000002
+010000020100000101010001010000010100000201000004010000090100000201000001
+010000020100000101000000010000000100000101000002010000080100000201000001
+010000020100000101000007010000030100000201000001010000420101000901000001
+0100004a010106000000060c010006000000060202020101030301010202060500000100
+00c40602010006000000060a010006000000060402020101030101010202060301000009
+010100000100000401000003010200020100000001010003010300040100000c01000003
+0102000301020002010000020100000201020071010100810101000b0100000201040002
+010200040101000201040001010400030101000401010002010000170101000901010000
+010000040100000301020002010000000101000301030004010000090100000201000002
+010300010100000001000000010000020102000a01020003010200020100000701000004
+01020002010000420101000a0101004b01000600010006000000060a0100060000000603
+020201010303010102020605010000c50601010006000000060c01000600000006030202
+010103010101020206030100000c0100002301050093010100810101000c010000310100
+00180101000c010000230105001c0105006801010058010106000000060c010006000000
+06020202010103030101020206050000010000c40602010006000000060a010006000000
+06040202010103010101020206030100000801000002010000bd01010081010100590101
+000801000002010000b50101005801000600010006000000060a01000600000006030202
+01010303010102020605010000c50601010006000000060c010006000000060302020101
+030101010202060301000009010200be010100810101005901010009010200b601010058
+010106000000060c01000600000006020202010103030101020206050000010000c40602
+010006000000060a0100060000000604020201010301010102020603010000cb01010081
+01010059010100c30101005801000600010006000000060a010006000000060302020101
+0303010102020605010000c50601010006000000060c0100060000000603020201010301
+010102020603010000cb0101008101010059010100c301010058010106000000060c0100
+0600000006020202010103030101020206050000010000c40602010006000000060a0100
+060000000604020201010301010102020603010000cb0101008101010059010100c30101
+005801000600010006000000060a01000600000006030202010103030101020206050100
+00c50601010006000000060c0100060000000603020201010301010102020603010000cb
+0101008101010059010100c301010058010106000000060c010006000000060202020101
+03030101020206050000010000c40602010006000000060a010006000000060402020101
+030101010202060301ff01ff01ce0600010006000000060a010006000000060302020101
+0303010102020605010000c50601010006000000060c0100060000000603020201010301
+01010202060301ff01ff01cf06000000060c010006000000060202020101030301010202
+06050000010000c40602010006000000060a010006000000060402020101030101010202
+0603010000cb0101008101010059010100c30101005801000600010006000000060a0100
+060000000603020201010303010102020605010000c50601010006000000060c01000600
+00000603020201010301010102020603010000cb0101008101010059010100c301010058
+010106000000060c01000600000006020202010103030101020206050000010000c40602
+010006000000060a0100060000000604020201010301010102020603010000cb01010081
+0101000c0100003101000018010100c30101005801000600010006000000060a01000600
+00000603020201010303010102020605010000c50601010006000000060c010006000000
+060302020101030101010202060301000010010200090100000d0102009b010100810101
+000b01000003010200030102000b010000050100000c0101000201000017010100100102
+00090100000d010200930101000a0101004b010106000000060c01000600000006020202
+010103030101020206050000010000c40602010006000000060a01000600000006040202
+0101030101010202060301000012010000090100000f0100009b010100810101000a0100
+000301000002010000010100000201000009010100040101000b01000001010000020100
+001601010012010000090100000f0100009301010009010000010100004a010006000100
+06000000060a0100060000000603020201010303010102020605010000c5060101000600
+0000060c0100060000000603020201010301010102020603010000090101000001000004
+010000030102000201000000010100030102000501000009010000000101000301020002
+01010000010000030102000301020071010100810101000901000008010000010100000c
+0100000001000003010000000100000b0100000101000003010000150101000901010000
+010000040100000301020002010000000101000301020005010000090100000001010003
+0102000201010000010000030102000a0102000301020002010000000101000201000002
+0100000201020002010000000101003f01010009010000010100004a010106000000060c
+01000600000006020202010103030101020206050000010000c40602010006000000060a
+010006000000060402020101030101010202060301000008010000010101000401000002
+010000020100000101010001010000010100000201000004010000090101000101000001
+010000020100000101000000010000000100000101000002010000010100000201000070
+010100810101000801000009010000010100000e010000050100000b0100000101000004
+010000140101000801000001010100040100000201000002010000010101000101000001
+010000020100000401000009010100010100000101000002010000010100000001000000
+010000010100000201000008010000020100000101000002010000010101000101000001
+01000002010000010100000201000001010100010100003e01010009010000010100004a
+01000600010006000000060a0100060000000603020201010303010102020605010000c5
+0601010006000000060c0100060000000603020201010301010102020603010000080100
+000201000004010000020100000201000001010000020100000501000004010000090100
+000201000005010000010100000001000000010000010100000201000001010000740101
+00810101000701000009010000020103000b010000050100000b01000001010000050100
+001301010008010000020100000401000002010000020100000101000002010000050100
+000401000009010000020100000501000001010000000100000001000001010000020100
+000801000005010000020100000101000005010000020100000101000002010000010100
+004201010009010000010100004a010106000000060c0100060000000602020201010303
+0101020206050000010000c40602010006000000060a0100060000000604020201010301
+010102020603010000080100000201000004010000020100000201000001010000020100
+000201030004010000090100000201000002010300010100000001000000010000010104
+00020102007101010081010100080100000701000003010000020100000a010000050100
+000b01000001010000040100001401010008010000020100000401000002010000020100
+000101000002010000020103000401000009010000020100000201030001010000000100
+000001000001010400090102000201040001010000060100000001000002010400010100
+004201010009010000010100004a01000600010006000000060a01000600000006030202
+01010303010102020605010000c50601010006000000060c010006000000060302020101
+030101010202060301000008010000020100000401000002010000020100000101000002
+010000010100000201000004010000090100000201000001010000020100000101000000
+010000000100000101000009010000700101008101010009010000050100000401000002
+0100000a010000050100000b010000010100000301000015010100080100000201000004
+010000020100000201000001010000020100000101000002010000040100000901000002
+010000010100000201000001010000000100000001000001010000100100000101000005
+010000060100000001000002010000050100004201010009010000010100004a01010600
+0000060c01000600000006020202010103030101020206050000010000c4060201000600
+0000060a0100060000000604020201010301010102020603010000080100000101010004
+010000020100000201000001010100010100000101000002010000040100000901000002
+010000010100000201000001010000000100000001000001010000020100000101000002
+01000070010100810101000a010000030100000501000002010000030101000401000005
+010000050101000301000001010000020100001601010008010000010101000401000002
+010000020100000101010001010000010100000201000004010000090100000201000001
+010000020100000101000000010000000100000101000002010000080100000201000001
+010000020100000101000007010000030100000201000001010000420101000901000001
+0100004a01000600010006000000060a0100060000000603020201010303010102020605
+010000c50601010006000000060c01000600000006030202010103010101020206030100
+000901010000010000040100000301020002010000000101000301030004010000090100
+000201000002010300010100000001000000010000020102000301020071010100810101
+000b01000002010400020102000401010002010400010104000301010004010100020100
+001701010009010100000100000401000003010200020100000001010003010300040100
+00090100000201000002010300010100000001000000010000020102000a010200030102
+0002010000070100000401020002010000420101000a0101004b010106000000060c0100
+0600000006020202010103030101020206050000010000c40602010006000000060a0100
+0600000006040202010103010101020206030100000c0100002301050093010100810101
+000c01000031010000180101000c010000230105001c0105006801010058010006000100
+06000000060a0100060000000603020201010303010102020605010000c5060101000600
+0000060c01000600000006030202010103010101020206030100000801000002010000bd
+01010081010100590101000801000002010000b501010058010106000000060c01000600
+000006020202010103030101020206050000010000c40602010006000000060a01000600
+0000060402020101030101010202060301000009010200be010100810101005901010009
+010200b60101005801000600010006000000060a01000600000006030202010103030101
+02020605010000c50601010006000000060c010006000000060302020101030101010202
+0603010000cb0101008101010059010100c301010058010106000000060c010006000000
+06020202010103030101020206050000010000c40602010006000000060a010006000000
+0604020201010301010102020603010000cb0101008101010059010100c3010100580100
+0600010006000000060a0100060000000603020201010303010102020605010000c50601
+010006000000060c0100060000000603020201010301010102020603010000cb01010081
+01010059010100c301010058010106000000060c01000600000006020202010103030101
+020206050000010000c40602010006000000060a01000600000006040202010103010101
+02020603010000cb0101008101010059010100c30101005801000600010006000000060a
+0100060000000603020201010303010102020605010000c50601010006000000060c0100
+06000000060302020101030101010202060301ff01ff01cf06000000060c010006000000
+06020202010103030101020206050000010000c40602010006000000060a010006000000
+060402020101030101010202060301ff01ff01ce0600010006000000060a010006000000
+0603020201010303010102020605010000c50601010006000000060c0100060000000603
+020201010301010102020603010000cb0101008101010059010100c30101005801010600
+0000060c01000600000006020202010103030101020206050000010000c4060201000600
+0000060a0100060000000604020201010301010102020603010000cb0101008101010059
+010100c30101005801000600010006000000060a01000600000006030202010103030101
+02020605010000c50601010006000000060c010006000000060302020101030101010202
+0603010000cb010100810101000c0100003101000018010100c301010058010106000000
+060c01000600000006020202010103030101020206050000010000c40602010006000000
+060a010006000000060402020101030101010202060301000010010200090100000d0102
+004301000056010100810101000b01000003010200030102000b010000050100000c0101
+00020100001701010010010200090100000d010200930101000a0101004b010006000100
+06000000060a0100060000000603020201010303010102020605010000c5060101000600
+0000060c010006000000060302020101030101010202060301000012010000090100000f
+0100004301000056010100810101000a0100000301000002010000010100000201000009
+010100040101000b01000001010000020100001601010012010000090100000f01000093
+01010009010000010100004a010106000000060c01000600000006020202010103030101
+020206050000010000c40602010006000000060a01000600000006040202010103010101
+020206030100000901010000010000040100000301020002010000000101000301020005
+010000090100000001010003010200020101000001000003010200030102000a01020002
+010000020100000101040054010100810101000901000008010000010100000c01000000
+01000003010000000100000b010000010100000301000015010100090101000001000004
+010000030102000201000000010100030102000501000009010000000101000301020002
+01010000010000030102000a010200030102000201000000010100020100000201000002
+01020002010000000101003f01010009010000010100004a01000600010006000000060a
+0100060000000603020201010303010102020605010000c50601010006000000060c0100
+060000000603020201010301010102020603010000080100000101010004010000020100
+000201000001010100010100000101000002010000040100000901010001010000010100
+000201000001010000000100000001000001010000020100000101000002010000080100
+000201000001010000020100000301000056010100810101000801000009010000010100
+000e010000050100000b0100000101000004010000140101000801000001010100040100
+000201000002010000010101000101000001010000020100000401000009010100010100
+000101000002010000010100000001000000010000010100000201000008010000020100
+000101000002010000010101000101000001010000020100000101000002010000010101
+00010100003e01010009010000010100004a010106000000060c01000600000006020202
+010103030101020206050000010000c40602010006000000060a01000600000006040202
+010103010101020206030100000801000002010000040100000201000002010000010100
+000201000005010000040100000901000002010000050100000101000000010000000100
+000101000002010000010100000c01000002010000020100000001000004010000560101
+00810101000701000009010000020103000b010000050100000b01000001010000050100
+001301010008010000020100000401000002010000020100000101000002010000050100
+000401000009010000020100000501000001010000000100000001000001010000020100
+000801000005010000020100000101000005010000020100000101000002010000010100
+004201010009010000010100004a01000600010006000000060a01000600000006030202
+01010303010102020605010000c50601010006000000060c010006000000060302020101
+030101010202060301000008010000020100000401000002010000020100000101000002
+010000020103000401000009010000020100000201030001010000000100000001000001
+010400020102000901040003010000050100005601010081010100080100000701000003
+010000020100000a010000050100000b0100000101000004010000140101000801000002
+010000040100000201000002010000010100000201000002010300040100000901000002
+010000020103000101000000010000000100000101040009010200020104000101000006
+0100000001000002010400010100004201010009010000010100004a010106000000060c
+01000600000006020202010103030101020206050000010000c40602010006000000060a
+010006000000060402020101030101010202060301000008010000020100000401000002
+010000020100000101000002010000010100000201000004010000090100000201000001
+010000020100000101000000010000000100000101000009010000080100000601000000
+010000040100005601010081010100090100000501000004010000020100000a01000005
+0100000b0100000101000003010000150101000801000002010000040100000201000002
+010000010100000201000001010000020100000401000009010000020100000101000002
+010000010100000001000000010000010100001001000001010000050100000601000000
+01000002010000050100004201010009010000010100004a01000600010006000000060a
+0100060000000603020201010303010102020605010000c50601010006000000060c0100
+060000000603020201010301010102020603010000080100000101010004010000020100
+000201000001010100010100000101000002010000040100000901000002010000010100
+000201000001010000000100000001000001010000020100000101000002010000080100
+000201000001010000020100000301000056010100810101000a01000003010000050100
+000201000003010100040100000501000005010100030100000101000002010000160101
+000801000001010100040100000201000002010000010101000101000001010000020100
+000401000009010000020100000101000002010000010100000001000000010000010100
+000201000008010000020100000101000002010000010100000701000003010000020100
+00010100004201010009010000010100004a010106000000060c01000600000006020202
+010103030101020206050000010000c40602010006000000060a01000600000006040202
+010103010101020206030100000901010000010000040100000301020002010000000101
+000301030004010000090100000201000002010300010100000001000000010000020102
+00030102000a01020002010000020100000401010054010100810101000b010000020104
+000201020004010100020104000101040003010100040101000201000017010100090101
+000001000004010000030102000201000000010100030103000401000009010000020100
+0002010300010100000001000000010000020102000a0102000301020002010000070100
+000401020002010000420101000a0101004b01000600010006000000060a010006000000
+0603020201010303010102020605010000c50601010006000000060c0100060000000603
+0202010103010101020206030100000c010000230105002301050069010100810101000c
+01000031010000180101000c010000230105001c0105006801010058010106000000060c
+01000600000006020202010103030101020206050000010000c40602010006000000060a
+01000600000006040202010103010101020206030100000801000002010000bd01010081
+010100590101000801000002010000b50101005801000600010006000000060a01000600
+00000603020201010303010102020605010000c50601010006000000060c010006000000
+060302020101030101010202060301000009010200be0101008101010059010100090102
+00b601010058010106000000060c01000600000006020202010103030101020206050000
+010000c40602010006000000060a01000600000006040202010103010101020206030100
+00cb0101008101010059010100c30101005801000600010006000000060a010006000000
+0603020201010303010102020605010000c50601010006000000060c0100060000000603
+020201010301010102020603010000cb0101008101010059010100c30101005801010600
+0000060c01000600000006020202010103030101020206050000010000c4060201000600
+0000060a0100060000000604020201010301010102020603010000cb0101008101010059
+010100c30101005801000600010006000000060a01000600000006030202010103030101
+02020605010000c50601010006000000060c010006000000060302020101030101010202
+0603010000cb0101008101010059010100c301010058010106000000060c010006000000
+06020202010103030101020206050000010000c40602010006000000060a010006000000
+060402020101030101010202060301ff01ff01ce0600010006000000060a010006000000
+0603020201010303010102020605010000c50601010006000000060c0100060000000603
+02020101030101010202060301ff01ff01cf06000000060c010006000000060202020101
+03030101020206050000010000c40602010006000000060a010006000000060402020101
+0301010102020603010000cb0101008101010059010100c3010100580100060001000600
+0000060a0100060000000603020201010303010102020605010000c50601010006000000
+060c0100060000000603020201010301010102020603010000cb01010081010100590101
+00c301010058010106000000060c01000600000006020202010103030101020206050000
+010000c40602010006000000060a01000600000006040202010103010101020206030100
+00cb010100810101000c0100003101000018010100c30101005801000600010006000000
+060a0100060000000603020201010303010102020605010000c50601010006000000060c
+01000600000006030202010103010101020206030100000b010000120100001f01000089
+010100810101000b01000003010200030102000b010000040102000b0101000201000017
+0101000b010000120100000e010000010100008f0101000a0101004b010106000000060c
+01000600000006020202010103030101020206050000010000c40602010006000000060a
+01000600000006040202010103010101020206030100001f0100001f0100008901010081
+0101000a0100000301000002010000010100000201000009010100030100000201000009
+0100000101000002010000160101001f0100000e010000010100008f0101000901000001
+0100004a01000600010006000000060a0100060000000603020201010303010102020605
+010000c50601010006000000060c01000600000006030202010103010101020206030100
+000901020002010000000101000301020002010400090102000301020003010200020100
+0000010100030102007f010100810101000901000008010000010100000c010000000100
+000701000009010000010100000301000015010100090102000201000000010100030102
+0002010400090101000001000001010000000101008c01010009010000010100004a0101
+06000000060c01000600000006020202010103030101020206050000010000c406020100
+06000000060a01000600000006040202010103010101020206030100000b010000020101
+00010100000101000002010000030100000a010000020100000101000002010000010100
+0002010000010101000101000001010000020100007e0101008101010008010000090100
+00010100000e01000007010000090100000101000004010000140101000b010000020101
+00010100000101000002010000030100000a0100000101010001010100010100008b0101
+0009010000010100004a01000600010006000000060a0100060000000603020201010303
+010102020605010000c50601010006000000060c01000600000006030202010103010101
+020206030100000b01000002010000020100000101000002010000030100000a01000009
+01000001010000050100000201000001010000020100007e010100810101000701000009
+010000020103000b010000060100000a0100000101000005010000130101000b01000002
+010000020100000101000002010000030100000a0100000201000001010000020100008b
+01010009010000010100004a010106000000060c01000600000006020202010103030101
+020206050000010000c40602010006000000060a01000600000006040202010103010101
+020206030100000b010000020100000201000001010400030100000a0100000601030001
+0100000501000002010000010104007e0101008101010008010000070100000301000002
+0100000a010000050100000b0100000101000004010000140101000b0100000201000002
+01000001010400030100000a0100000201000001010000020100008b0101000901000001
+0100004a01000600010006000000060a0100060000000603020201010303010102020605
+010000c50601010006000000060c01000600000006030202010103010101020206030100
+000b010000020100000201000001010000070100000a0100000501000002010000010100
+000501000002010000010100008201010081010100090100000501000004010000020100
+000a010000040100000c0100000101000003010000150101000b01000002010000020100
+0001010000070100000a0100000201000001010000020100008b01010009010000010100
+004a010106000000060c01000600000006020202010103030101020206050000010000c4
+0602010006000000060a01000600000006040202010103010101020206030100000b0100
+0002010000020100000101000002010000030100000a0100000201000001010000020100
+000101000002010000010100000201000001010000020100007e010100810101000a0100
+000301000005010000020100000301010004010000030100000701010003010000010100
+0002010000160101000b01000002010000020100000101000002010000030100000a0100
+000101010001010100010100008b01010009010000010100004a01000600010006000000
+060a0100060000000603020201010303010102020605010000c50601010006000000060c
+01000600000006030202010103010101020206030100000b010000020100000201000002
+010200050101000901020003010300020102000201000002010000020102007f01010081
+0101000b0100000201040002010200040101000201040001010400030101000401010002
+010000170101000b01000002010000020100000201020005010100090101000001000001
+010000000101008c0101000a0101004b010106000000060c010006000000060202020101
+03030101020206050000010000c40602010006000000060a010006000000060402020101
+030101010202060301000023010500a1010100810101000c010000310100001801010023
+010500990101005801000600010006000000060a01000600000006030202010103030101
+02020605010000c50601010006000000060c010006000000060302020101030101010202
+0603010000cb0101008101010059010100c301010058010106000000060c010006000000
+06020202010103030101020206050000010000c40602010006000000060a010006000000
+0604020201010301010102020603010000cb0101008101010059010100c3010100580100
+0600010006000000060a0100060000000603020201010303010102020605010000c50601
+010006000000060c0100060000000603020201010301010102020603010000cb01010081
+01010059010100c301010058010106000000060c01000600000006020202010103030101
+020206050000010000c40602010006000000060a01000600000006040202010103010101
+02020603010000cb0101008101010059010100c30101005801000600010006000000060a
+0100060000000603020201010303010102020605010000c50601010006000000060c0100
+060000000603020201010301010102020603010000cb0101008101010059010100c30101
+0058010106000000060c01000600000006020202010103030101020206050000010000c4
+0602010006000000060a0100060000000604020201010301010102020603010000cb0101
+008101010059010100c30101005801000600010006000000060a01000600000006030202
+01010303010102020605010000c50601010006000000060c010006000000060302020101
+030101010202060301ff01ff01cf06000000060c01000600000006020202010103030101
+020206050000010000c40602010006000000060a01000600000006040202010103010101
+0202060301ff01ff01ce0600010006000000060a01000600000006030202010103030101
+02020605010000c50601010006000000060c010006000000060302020101030101010202
+0603010000cb0101008101010059010100c301010058010106000000060c010006000000
+06020202010103030101020206050000010000c40602010006000000060a010006000000
+0604020201010301010102020603010000cb0101008101010059010100c3010100580100
+0600010006000000060a0100060000000603020201010303010102020605010000c50601
+010006000000060c0100060000000603020201010301010102020603010000cb01010081
+0101000c0100003101000018010100c301010058010106000000060c0100060000000602
+0202010103030101020206050000010000c40602010006000000060a0100060000000604
+0202010103010101020206030100000b010000120100000e010000010100009701010081
+0101000b01000003010200030102000b010000040102000b01010002010000170101000b
+010000120100000e010000010100008f0101000a01000004010200440100060001000600
+0000060a0100060000000603020201010303010102020605010000c50601010006000000
+060c01000600000006030202010103010101020206030100001f0100000e010000010100
+0097010100810101000a0100000301000002010000010100000201000009010100030100
+0002010000090100000101000002010000160101001f0100000e010000010100008f0101
+0009010100030100000201000043010106000000060c0100060000000602020201010303
+0101020206050000010000c40602010006000000060a0100060000000604020201010301
+010102020603010000090102000201000000010100030102000201040009010100000100
+00010100000001010094010100810101000901000008010000010100000c010000000100
+000701000009010000010100000301000015010100090102000201000000010100030102
+0002010400090101000001000001010000000101008c0101000801000000010000030100
+00020100004301000600010006000000060a010006000000060302020101030301010202
+0605010000c50601010006000000060c0100060000000603020201010301010102020603
+0100000b01000002010100010100000101000002010000030100000a0100000101010001
+0101000101000093010100810101000801000009010000010100000e0100000701000009
+0100000101000004010000140101000b0100000201010001010000010100000201000003
+0100000a0100000101010001010100010100008b0101000a010000030100000201000043
+010106000000060c01000600000006020202010103030101020206050000010000c40602
+010006000000060a01000600000006040202010103010101020206030100000b01000002
+010000020100000101000002010000030100000a01000002010000010100000201000093
+010100810101000701000009010000020103000b010000060100000a0100000101000005
+010000130101000b01000002010000020100000101000002010000030100000a01000002
+01000001010000020100008b0101000a010000040103004301000600010006000000060a
+0100060000000603020201010303010102020605010000c50601010006000000060c0100
+0600000006030202010103010101020206030100000b0100000201000002010000010104
+00030100000a010000020100000101000002010000930101008101010008010000070100
+0003010000020100000a010000050100000b0100000101000004010000140101000b0100
+00020100000201000001010400030100000a0100000201000001010000020100008b0101
+000a0100000701000043010106000000060c010006000000060202020101030301010202
+06050000010000c40602010006000000060a010006000000060402020101030101010202
+06030100000b010000020100000201000001010000070100000a01000002010000010100
+00020100009301010081010100090100000501000004010000020100000a010000040100
+000c0100000101000003010000150101000b010000020100000201000001010000070100
+000a0100000201000001010000020100008b0101000a0100000701000043010006000100
+06000000060a0100060000000603020201010303010102020605010000c5060101000600
+0000060c01000600000006030202010103010101020206030100000b0100000201000002
+0100000101000002010000030100000a0100000101010001010100010100009301010081
+0101000a0100000301000005010000020100000301010004010000030100000701010003
+0100000101000002010000160101000b0100000201000002010000010100000201000003
+0100000a0100000101010001010100010100008b0101000a010000030100000201000043
+010106000000060c01000600000006020202010103030101020206050000010000c40602
+010006000000060a01000600000006040202010103010101020206030100000b01000002
+010000020100000201020005010100090101000001000001010000000101009401010081
+0101000b0100000201040002010200040101000201040001010400030101000401010002
+010000170101000b01000002010000020100000201020005010100090101000001000001
+010000000101008c01010008010400020102004401000600010006000000060a01000600
+00000603020201010303010102020605010000c50601010006000000060c010006000000
+060302020101030101010202060301000023010500a1010100810101000c010000310100
+0018010100230105009901010058010106000000060c0100060000000602020201010303
+0101020206050000010000c40602010006000000060a0100060000000604020201010301
+010102020603010000cb0101008101010059010100c30101005801000600010006000000
+060a0100060000000603020201010303010102020605010000c50601010006000000060c
+0100060000000603020201010301010102020603010000cb0101008101010059010100c3
+01010058010106000000060c010006000000060202020101030301010202060500000100
+00c40602010006000000060a0100060000000604020201010301010102020603010000cb
+0101008101010059010100c30101005801000600010006000000060a0100060000000603
+020201010303010102020605010000c50601010006000000060c01000600000006030202
+01010301010102020603010000cb0101008101010059010100c301010058010106000000
+060c01000600000006020202010103030101020206050000010000c40602010006000000
+060a0100060000000604020201010301010102020603010000cb01010081010100590101
+00c30101005801000600010006000000060a010006000000060302020101030301010202
+0605010000c50601010006000000060c0100060000000603020201010301010102020603
+010000cb0101008101010059010100c301010058010106000000060c0100060000000602
+0202010103030101020206050000010000c40602010006000000060a0100060000000604
+02020101030101010202060301ff01ff01ce0600010006000000060a0100060000000603
+020201010303010102020605010000c50601010006000000060c01000600000006030202
+0101030101010202060301ff01ff01cf06000000060c0100060000000602020201010303
+0101020206050000010000c40602010006000000060a0100060000000604020201010301
+010102020603010000cb0101008101010059010100c30101005801000600010006000000
+060a0100060000000603020201010303010102020605010000c50601010006000000060c
+0100060000000603020201010301010102020603010000cb0101008101010059010100c3
+01010058010106000000060c010006000000060202020101030301010202060500000100
+00c40602010006000000060a0100060000000604020201010301010102020603010000cb
+010100810101000c0100003101000018010100c30101005801000600010006000000060a
+0100060000000603020201010303010102020605010000c50601010006000000060c0100
+0600000006030202010103010101020206030100000b010000120100000a010000150100
+0087010100810101000b01000003010200030102000b010000040102000b010100020100
+00170101000b010000120100000e010000010100008f0101000c0100004a010106000000
+060c01000600000006020202010103030101020206050000010000c40602010006000000
+060a01000600000006040202010103010101020206030100001f0100000a010000150100
+0087010100810101000a0100000301000002010000010100000201000009010100030100
+0002010000090100000101000002010000160101001f0100000e010000010100008f0101
+000b0101004a01000600010006000000060a010006000000060302020101030301010202
+0605010000c50601010006000000060c0100060000000603020201010301010102020603
+010000090102000201000000010100030102000201040008010000000101000301020003
+01020002010400020102007f010100810101000901000008010000010100000c01000000
+010000070100000901000001010000030100001501010009010200020100000001010003
+01020002010400090101000001000001010000000101008c0101000a010000000100004a
+010106000000060c01000600000006020202010103030101020206050000010000c40602
+010006000000060a01000600000006040202010103010101020206030100000b01000002
+010100010100000101000002010000030100000a01010001010000010100000201000001
+010000020100000301000003010000020100007e01010081010100080100000901000001
+0100000e01000007010000090100000101000004010000140101000b0100000201010001
+0100000101000002010000030100000a0100000101010001010100010100008b01010009
+010000010100004a01000600010006000000060a01000600000006030202010103030101
+02020605010000c50601010006000000060c010006000000060302020101030101010202
+06030100000b01000002010000020100000101000002010000030100000a010000020100
+000101000002010000010100000701000003010000820101008101010007010000090100
+00020103000b010000060100000a0100000101000005010000130101000b010000020100
+00020100000101000002010000030100000a0100000201000001010000020100008b0101
+0008010000020100004a010106000000060c010006000000060202020101030301010202
+06050000010000c40602010006000000060a010006000000060402020101030101010202
+06030100000b010000020100000201000001010400030100000a01000002010000010100
+00020100000201020004010000040102007f010100810101000801000007010000030100
+00020100000a010000050100000b0100000101000004010000140101000b010000020100
+000201000001010400030100000a0100000201000001010000020100008b010100080100
+00020100004a01000600010006000000060a010006000000060302020101030301010202
+0605010000c50601010006000000060c0100060000000603020201010301010102020603
+0100000b010000020100000201000001010000070100000a010000020100000101000002
+0100000501000003010000070100007e0101008101010009010000050100000401000002
+0100000a010000040100000c0100000101000003010000150101000b0100000201000002
+01000001010000070100000a0100000201000001010000020100008b0101000801050049
+010106000000060c01000600000006020202010103030101020206050000010000c40602
+010006000000060a01000600000006040202010103010101020206030100000b01000002
+010000020100000101000002010000030100000a01000002010000010100000201000001
+010000020100000301000003010000020100007e010100810101000a0100000301000005
+010000020100000301010004010000030100000701010003010000010100000201000016
+0101000b01000002010000020100000101000002010000030100000a0100000101010001
+010100010100008b0101000c0100004a01000600010006000000060a0100060000000603
+020201010303010102020605010000c50601010006000000060c01000600000006030202
+010103010101020206030100000b01000002010000020100000201020005010100080100
+0002010000020102000301020005010100020102007f010100810101000b010000020104
+0002010200040101000201040001010400030101000401010002010000170101000b0100
+0002010000020100000201020005010100090101000001000001010000000101008c0101
+000c0100004a010106000000060c01000600000006020202010103030101020206050000
+010000c40602010006000000060a01000600000006040202010103010101020206030100
+0023010500a1010100810101000c01000031010000180101002301050099010100580100
+0600010006000000060a0100060000000603020201010303010102020605010000c50601
+010006000000060001000600010006000100060001000600010006000100060001000600
+00000603020201010301010102020603010000cb0101008101010059010100c301010058
+010106000000060c01000600000006020202010103030101020206050000010000c40602
+010006000100060001000600010006000100060001000600010006000100060000000604
+020201010301010102020603010000cb0101008101010059010100c30101005801000600
+010006000000060a0100060000000603020201010303010102020605010000c506010100
+0600040e060000000603020201010301010102020603010000cb01010081010100590101
+00c301010058010106000000060c01000600000006020202010103030101020206050000
+010000c40602010006000000060000000600000006000000060000000600000006000000
+060000000604020201010301010102020603010000cb0101008101010059010100c30101
+005801000600010006000000060a01000600000006030202010103030101020206050100
+00c506010100060004000600000006000000060000000600000006000000060000000600
+0100060000000603020201010301010102020603010000cb0101008101010059010100c3
+01010058010106000000060c010006000000060202020101030301010202060500000100
+00c40602010004000000060a0100040000000604020201010301010102020603010000cb
+0101008101010059010100c30101005801000600010006000000060a0100060000000603
+020201010303010102020605010000c50601010006000401000006080100060004000600
+0000060302020101030101010202060301ff01ff01cf06000000060c0100060000000602
+0202010103030101020206050000010000c4060201000401060000000606010006000401
+0000060402020101030101010202060301ff01ff01ce0600010006000000060a01000600
+00000603020201010303010102020605010000c506010100060004020600000006060100
+0401060000000603020201010301010102020603010000cb0101008101010059010100c3
+01010058010106000000060c010006000000060202020101030301010202060500000100
+00c4060201000402000006060100040200000604020201010301010102020603010000cb
+0101008101010059010100c30101005801000600010006000000060a0100060000000603
+020201010303010102020605010000c50601010006000403000006040100060004020600
+00000603020201010301010102020603010000cb010100810101000c0100003101000018
+010100c301010058010106000000060c0100060000000602020201010303010102020605
+0000010000c4060201000403060000000602010006000403000006040202010103010101
+0202060301000028010000040100000b0100008e010100810101000b0100000301020003
+0102000b010000030104000a0101000201000017010100180100000a0100002201020077
+0101000a0100004c01000600010006000000060a01000600000006030202010103030101
+02020605010000c506010100060004040600000006020100040306000000060302020101
+030101010202060301000028010000110100008e010100810101000a0100000301000002
+010000010100000201000009010100030100000201000009010000010100000201000016
+010100180100000a0100002401000077010100090101004c010106000000060c01000600
+000006020202010103030101020206050000010000c40602010004040000060201000404
+00000604020201010301010102020603010000090102000201000002010000020102000a
+010100000100000201020003010200020104008c01010081010100090100000801000001
+0100000c0100000001000007010000090100000101000003010000150101000801000000
+010100030102000201040008010000010100000301020002010000000101000201000000
+01010003010200050100007701010008010000000100004c01000600010006000000060a
+0100060000000603020201010303010102020605010000c5060101000600040500000600
+010006000404060000000603020201010301010102020603010000080100000201000001
+010000020100000101000002010000080100000101010004010000020100000201000003
+0100008e010100810101000801000009010000010100000e010000060100000a01000001
+010000040100001401010008010100010100000101000002010000030100000a01000000
+010000030100000201000001010100010100000101010001010000010100000201000004
+010000770101000a0100004c010106000000060c01000600000006020202010103030101
+020206050000010000c40602010004050600010006000405000006040202010103010101
+02020603010000080100000601000001010000010100000c010000020100000401000002
+010000070100008e010100810101000701000009010000020103000b010000060100000a
+01000001010000050100001301010008010000020100000101000002010000030100000a
+010100040100000201000001010000050100000201000001010000020100000401000077
+0101000a0100004c01000600010006000000060a01000600000006030202010103030101
+02020605010000c506010100060004060600010004050600000006030202010103010101
+020206030100000901020003010000010100000201020009010000020100000401000003
+010200040100008e01010081010100080100000701000003010000020100000a01000006
+0100000a010000010100000401000014010100080100000201000001010400030100000a
+010100040104000101000005010000020100000101040004010000770101000a0100004c
+010106000000060c010006000000060202020101030301010202060500c6060201000406
+01000406000006040202010103010101020206030100000c010000030100000001000005
+01000008010000020100000401000006010000030100008e010100810101000901000005
+01000004010000020100000a010000050100000b01000001010000030100001501010008
+0100000201000001010000070100000a0100000001000003010000050100000501000002
+0100000101000008010000770101000a0100004c01000600010006000000060a01000600
+000006030202010103030101020206ce0100060000000600000006000000060000000600
+000006000000060000000600000006000000060302020101030101010202060301000008
+010000020100000301010002010000020100000801000001010100040100000201000002
+010000030100008e010100810101000a0100000301000005010000020100000301010004
+010000050100000501010003010000010100000201000016010100080100000201000001
+01000002010000030100000a010000010100000201000002010000010100000501000002
+010000010100000201000004010000770101000a0100004c010106000000060c01000600
+000006020202010103030101020206cf0000060000000600000006000000060000000600
+000006000000060000000600000006040202010103010101020206030100000901020005
+010000030102000a010100000100000401000003010200050101008c010100810101000b
+010000020104000201020004010100020104000301000005010100040101000201000017
+010100080100000201000002010200050101000801000002010000020102000201000005
+01000002010000020102000501000077010100080104004a01000600010006000000060a
+010006000000060302020101030301010202060401000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000613
+0202010103010101020206030100001201000008010500a8010100810101000c01000031
+010000180101001c010500a001010058010106000000060c010006000000060202020101
+030301010202060301000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600000006120202010103010101
+020206030100000f01000000010000b80101008101010059010100c30101005801000600
+010006000000060a01000600000006030202010103030101020206040100040d06000400
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600040006000000040c00000613020201010301
+01010202060301000010010000b90101008101010059010100c301010058010106000000
+060c010006000000060202020101030301010202060301000600040b0000060001000400
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+00000600000006000000060000000600010004000000060000000600040a060000000612
+020201010301010102020603010000cb0101008101010059010100c30101005801000600
+010006000000060a01000600000006030202010103030101020206040100040906000000
+06000100060004000600000006a601000600040006000000060000000600000004080000
+0613020201010301010102020603010000cb0101008101010059010100c3010100580101
+06000000060c010006000000060202020101030301010202060301000600040700000600
+0000060201000400000006a8010004000000060200000600000006000406060000000612
+020201010301010102020603010000cb0101008101010059010100c30101005801000600
+010006000000060a01000600000006030202010103030101020206040100040506000000
+0600000006020100060004000600000006a6010006000400060000000604000006000000
+040400000613020201010301010102020603010000cb0101008101010059010100c30101
+0058010106000000060c0100060000000602020201010303010102020603010006000403
+000006000000060601000400000006a80100040000000606000006000000060004020600
+0000061202020101030101010202060301ff01ff01ce0600010006000000060a01000600
+000006030202010103030101020206040100040106000000060000000606010006000400
+0600000006a6010006000400060000000608000006000000040000000613020201010301
+01010202060301ff01ff01cf06000000060c010006000000060202020101030301010202
+060301000600010006000100060a01000400000006a8010004000000060a010006000100
+060000000612020201010301010102020603010000cb0101008101010059010100c30101
+005801000600010006000000060a01000600000006030202010103030101020206040100
+0401060001000600010006060100060004000600000006a6010006000400060000000608
+010006000100040000000613020201010301010102020603010000cb0101008101010059
+010100c301010058010106000000060c0100060000000602020201010303010102020603
+010006000403010006000100060601000400000006a80100040000000606010006000100
+06000402060000000612020201010301010102020603010000cb01010081010100590101
+00c30101005801000600010006000000060a010006000000060302020101030301010202
+060401000405060001000600010006020100060004000600000006a60100060004000600
+00000604010006000100040400000613020201010301010102020603010000cb01010081
+01010059010100c301010058010106000000060c01000600000006020202010103030101
+02020603010006000407010006000100060201000400000006a801000400000006020100
+0600010006000406060000000612020201010301010102020603010000cb010100810101
+0059010100c30101005801000600010006000000060a0100060000000603020201010303
+010102020604010004090600010006000100060004000600000006a60100060004000600
+00000600010006000100040800000613020201010301010102020603010000cb01010081
+01010059010100c301010058010106000000060c01000600000006020202010103030101
+0202060301000600040b0100060001000400000006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+04000000060001000600040a060000000612020201010301010102020603010000cb0101
+008101010059010100c30101005801000600010006000000060a01000600000006030202
+010103030101020206040100040d06000400060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+040006000100040c00000613020201010301010102020603010000cb0101008101010059
+010100c301010058010106000000060c0100060000000602020201010303000406030100
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+06000000060000000600000006000000061200040301010102020603010000cb01010081
+01010059010100c30101005801000600010006000000060a010006000000060302020101
+030300000202050006040000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000061300000202050003010101
+02020603010000cb0101008101010059010100c301010058010106000000060c01000600
+0000060202020101030300000202050006e50000020205000301010102020603010000cb
+0101008101010059010100c30101005801000600010006000000060a0100060000000603
+02020101030300000202050006e50000020205000301010102020603010000cb01010081
+01010059010100c301010058010106000000060c01000600000006020202010103030000
+0202050006e50000020205000301010102020603010000cb0101008101010059010100c3
+0101005801000600010006000000060a0100060000000603020201010303000002020500
+06e50000020205000301010102020603010000cb0101008101010059010100c301010058
+010106000000060c0100060000000602020201010303000002020500000502d900060202
+05000301010102020603010000cb0101008101010059010100c301010058010006000100
+06000000060a010006000000060302020101030300000208050002d90000020805000301
+010102020603010000cb0101008101010059010100c301010058010106000000060c0100
+06000000060202020101030300000208050002d900000208050003010101020206030100
+00cb0101008101010059010100c30101005801000600010006000000060a010006000000
+060302020101030300000208050001d90000020805000301010102020603010000cb0101
+008101010059010100c30101005801010600000006000100060001000600010006000100
+0600010006000100060001000600000006020202010103030000050901d9000005090301
+010102020603010000cb0101008101010059010100c30101005801000600010006000100
+0600010006000100060001000600010006000100060001000600000006030202010103f5
+01010202060301ff01ff01cf0600040e0600000006020202010103f501010202060301ff
+01ff01ce06000100040e000006030202010103f5010102020603010000cb010100810101
+0059010100c30101005801010600040e0600000006020202010103f50101020206030100
+00cb0101008101010059010100c301010058010006000100040e000006030202010103f5
+010102020603010000cb0101008101010059010100c30101005801010600040e06000000
+06020202010103f5010102020603010000cb0101008101010059010100c3010100580100
+06000100040e000006030202010103f5010102020603010000cb01010081010100590101
+00c30101005801010600040e0600000006020202010103f5010102020603010000cb0101
+008101010059010100c301010058010006000100040e000006030202010103f501010202
+0603010000cb0101008101010059010100c30101005801010600040e0600000006020202
+010103f5010102020603010000cb0101008101010059010100c301010058010006000100
+040e000006030202010103f5010102020603010000cb0101008101010059010100c30101
+005801010600040e0600000006020202010103f5010102020603010000cb010100810101
+0059010100c301010058010006000100040e000006030202010103f50101020206030100
+00cb0101008101010059010100c30101005801010600040e0600000006020202010103f5
+010102020603010000cb0101008101010059010100c301010058010006000100040e0000
+06030202010103f5010102020603010000cb0101008101010059010100c3010100580101
+0600040e0600000006020202010103f5010102020603010000cb01010081010100590101
+00c301010058010006000100040e000006030202010103f5010102020603010000cb0101
+008101010059010100c30101005801010600040e0600000006020202010103f501010202
+0603010000cb0101008101010059010100c301010058010006000100040e000006030202
+010103f5010102020603010000cb0101008101010059010100c30101005801010600040e
+0600000006020202010103f5010102020603010000cb0101008101010059010100c30101
+0058010006000100040e000006030202010103f5010102020603010000cb010100810101
+0059010100c30101005801010600040e0600000006020202010103f501010202060301ff
+01ff01ce06000100040e000006030202010103f501010202060301ff01ff01cf06000000
+060000000600000006000000060000000600000006000000060000000600000006020202
+010103f5010102020603010000cb0101008101010059010100c301010058010006000100
+040000000600000006000000060000000600000006000000060000000600000006030202
+010103f5010102020603010000cb0101008101010059010100c301010058010106000400
+0600000006080100060004000600000006020202010103f5010102020603010000cb0101
+008101010059010100c30101005801000600010004010600000006080100040000000603
+0202010103f5010102020603010000cb0101008101010059010100c30101005801010600
+040100000608010004010600000006020202010103f5010102020603010000cb01010081
+01010059010100c301010058010006000100040200000606010006000401000006030202
+010103f5010102020603010000cb0101008101010059010100c301010058010106000402
+0600000006040100060004020600000006020202010103f5010102020603010000cb0101
+008101010059010100c30101005801000600010004030600000006040100040200000603
+0202010103f5010102020603010000cb0101008101010059010100c30101005801010600
+040300000604010004030600000006020202010103f5010102020603010000cb01010081
+01010059010100c301010058010006000100040400000602010006000403000006030202
+010103f5010102020603010000cb0101008101010059010100c301010058010106000404
+0600000006000100060004040600000006020202010103f5010102020603010000cb0101
+008101010059010100c30101005801000600010004050600010006000100040400000603
+0202010103f5010102020603010000cb0101008101010059010100c30101005801010600
+040500000600010004050600000006020202010103f5010102020603010000cb01010081
+01010059010100c3010100580100060001000406010006000405000006030202010103f5
+010102020603010000cb0101008101010059010100c30101005801010600040606000406
+0600000006020202010103f5010102020603010000cb0101008101010059010100c30101
+005801000600010006000000060000000600000006000000060000000600000006000000
+0600000006030202010103f5010102020603010000cb0101008101010059010100c30101
+005801010600000006000000060000000600000006000000060000000600000006000000
+0600000006020202010103f5010102020603010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+06000100060001000600010006000100060001000600010006110202010103f501010202
+060201000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006000100060001000600010006000100060001000600010006000100
+060001000600010006120202010103f50101020206030100040d06000400060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+0000040000000600040c0600000006110202010103f501010202060201000600040b0000
+060001000400000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+060000000600000006000000060004000600000006000000040a000006120202010103f5
+010102020603010004090600000006000100060004000600000006ff06ff06ac01000400
+00000600000006000000060004080600000006110202010103f501010202060201000600
+0407000006000000060201000400000006ff06ff06ac0100060004000600000006020000
+060000000406000006120202010103f50101020206030100040506000000060000000602
+0100060004000600000006ff06ff06ac0100040000000604000006000000060004040600
+000006110202010103f50101020206020100060004030000060000000606010004000000
+06ff06ff06ac0100060004000600000006060000060000000402000006120202010103f5
+01010202060301000401060000000600000006060100060004000600000006ff06ff06ac
+0100040000000608000006000000060004000600000006110202010103f5010102020602
+01000600010006000100060a01000400000006ff06ff06ac010006000400060000000608
+0100060001000600000006120202010103f5010102020603010004010600010006000100
+06060100060004000600000006ff06ff06ac010004000000060801000600010006000400
+0600000006110202010103f5010102020602010006000403010006000100060601000400
+000006ff06ff06ac01000600040006000000060601000600010004020000061202020101
+03f501010202060301000405060001000600010006020100060004000600000006ff06ff
+06ac0100040000000604010006000100060004040600000006110202010103f501010202
+0602010006000407010006000100060201000400000006ff06ff06ac0100060004000600
+000006020100060001000406000006120202010103f50101020206030100040906000100
+06000100060004000600000006ff06ff06ac010004000000060001000600010006000408
+0600000006110202010103f501010202060201000600040b010006000100040000000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+0100060004000600000006000100040a000006120202010103f5000406030100040d0600
+040006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+010006000100060001000600010006000100060001000600010006000100060001000600
+01000600010006000100040000000600040c060000000611000403f50000020205000602
+010006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000061200000202050003f50000020205000603000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000060000000600
+000006000000060000000600000006000000060000000600000006000000061100000202
+050003f500000202050006ff06ff06e800000202050003f500000202050006ff06ff06e8
+00000202050003f500000202050006ff06ff06e800000202050003f50000020205000005
+02ff02ff02dc00060202050003f500000208050002ff02ff02dc00000208050003f50000
+0208050002ff02ff02dc00000208050003f500000208050001ff01ff01dc000002080500
+03f50000050901ff01ff01dc0000050903ff03ff03ff03ff03ff03ff03ff03d3
+%%EndData
+end
+%%PageTrailer
+%%Trailer
+%%BoundingBox: 0 21 400 186
+%%EOF
diff --git a/lib/tv/doc/src/tv_start_pid_sorted.gif b/lib/tv/doc/src/tv_start_pid_sorted.gif
new file mode 100644
index 0000000000..390f98541f
--- /dev/null
+++ b/lib/tv/doc/src/tv_start_pid_sorted.gif
Binary files differ
diff --git a/lib/tv/doc/src/tv_start_pid_sorted.ps b/lib/tv/doc/src/tv_start_pid_sorted.ps
new file mode 100644
index 0000000000..13ef2ed027
--- /dev/null
+++ b/lib/tv/doc/src/tv_start_pid_sorted.ps
@@ -0,0 +1,1853 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (ImageMagick)
+%%Title: (/clearcase/otp/erts/lib/tv/doc/src/tv_start_pid_sorted.eps)
+%%CreationDate: (Mon Mar 19 17:15:26 2001)
+%%BoundingBox: 0 0 377 205
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 0
+%%EndComments
+
+%%BeginDefaults
+%%PageOrientation: Portrait
+%%EndDefaults
+
+%%BeginProlog
+%
+% Display a color image. The image is displayed in color on
+% Postscript viewers or printers that support color, otherwise
+% it is displayed as grayscale.
+%
+/buffer 512 string def
+/byte 1 string def
+/color_packet 3 string def
+/pixels 768 string def
+
+/DirectClassPacket
+{
+ %
+ % Get a DirectClass packet.
+ %
+ % Parameters:
+ % red.
+ % green.
+ % blue.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/DirectClassImage
+{
+ %
+ % Display a DirectClass image.
+ %
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { DirectClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayDirectClassPacket } image
+ } ifelse
+} bind def
+
+/GrayDirectClassPacket
+{
+ %
+ % Get a DirectClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % red
+ % green
+ % blue
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/GrayPseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassImage
+{
+ %
+ % Display a PseudoClass image.
+ %
+ % Parameters:
+ % class: 0-PseudoClass or 1-Grayscale.
+ %
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ class 0 gt
+ {
+ currentfile buffer readline pop
+ token pop /depth exch def pop
+ /grays columns 8 add depth sub depth mul 8 idiv string def
+ columns rows depth
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { currentfile grays readhexstring pop } image
+ }
+ {
+ %
+ % Parameters:
+ % colors: number of colors in the colormap.
+ % colormap: red, green, blue color packets.
+ %
+ currentfile buffer readline pop
+ token pop /colors exch def pop
+ /colors colors 3 mul def
+ /colormap colors string def
+ currentfile colormap readhexstring pop pop
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { PseudoClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayPseudoClassPacket } image
+ } ifelse
+ } ifelse
+} bind def
+
+/DisplayImage
+{
+ %
+ % Display a DirectClass or PseudoClass image.
+ %
+ % Parameters:
+ % x & y translation.
+ % x & y scale.
+ % label pointsize.
+ % image label.
+ % image columns & rows.
+ % class: 0-DirectClass or 1-PseudoClass.
+ % compression: 0-RunlengthEncodedCompression or 1-NoCompression.
+ % hex color packets.
+ %
+ gsave
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ x y translate
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ currentfile buffer readline pop
+ token pop /pointsize exch def pop
+ /Helvetica findfont pointsize scalefont setfont
+ x y scale
+ currentfile buffer readline pop
+ token pop /columns exch def
+ token pop /rows exch def pop
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ currentfile buffer readline pop
+ token pop /compression exch def pop
+ class 0 gt { PseudoClassImage } { DirectClassImage } ifelse
+ grestore
+} bind def
+%%EndProlog
+%%Page: 1 1
+%%PageBoundingBox: 0 0 377 205
+userdict begin
+%%BeginData:
+DisplayImage
+0 0
+377.000000 205.000000
+12
+755 410
+1
+0
+0
+16
+ffffff
+000000
+d8d8d8
+c2c2c2
+6b6b6b
+d9d9d9
+b22222
+aab6aa
+e7e7e7
+000000
+000000
+000000
+000000
+000000
+000000
+000000
+000a01ff01ff01dc000b0208040001ff01ff01dc00000208040000000208040002ff02ff
+02dc000002080400000002080400020000ff00ff00d90400020000000208040000000202
+04060200000004ff04ff04d9020000000405020204000000020204000209000d02ff02ff
+02d000000202040000000202040002080000020d040002f6010302110103023801010206
+0101024001010230010102ff020400000202040000000202040002080000020d040002f6
+010102020107020001010203010102010101020e0105020001070201010302070100020b
+01010206010102400101020c0104021e010102ff02040000020204000000020204000208
+0000020d040002f6010102050101020301010203010102010101020e0101020701010203
+01010201010102050101020b010102060101024e010102020101021d010102ff02040000
+0202040000000202040002080000020204060203040002f6010102050101020301010203
+010102010101020e01010207010102030101020801040201010302030101020001010203
+010102020103020301040206010302030101020001010207010102000101020101010203
+010302030101020201010200010102020101020101030202010102000101020101010203
+010302020101020001010201010102020103020201010202010102f30000020204000000
+04030208000002020400030400000203040002f601010205010102040101020201000202
+0101020e0101020701010203010202080101020201010201010102020102020001010202
+010102010101020101010201010102090101020101010202010202000101020601020200
+010202000101020101010201010102020101020201020200010102010101020001010200
+010102020102020001020200010102010101020101010201010102000101020101010201
+010102010101020101010202010102f3000004030101020b000002030400030200000204
+040002f6010102050101020401010201010102020101020e010402040101020401030206
+010102060101020201010201010102020101020101010201010102010102020801010201
+010102020101020101010206010102010101020101010205010102020101020201010201
+010102010101020001010200010102020101020101010201010102050101020101020203
+01010201010102010101020101010202010002f70103020b000002030400030200000204
+040002f6010102050101020501010200010002030101020e010102070101020601020205
+010102030104020201010201010102020101020101050202010302060101020101010202
+010102010101020601010201010102010101020201040202010102020101020101010201
+010102000101020001010202010102010101020101010202010402010101020401010201
+0105020201010200010102f70103020b000002040400030000000205040002f601010205
+01010205010302030101020e010102070101020701010205010102020101020101010202
+010102010101020201010201010102080102020501010201010102020101020101010206
+010102010101020101010201010102010101020201010202010102010101020101010201
+010102000101020101010201010102010101020101010201010102010101020401010201
+0101020601010200010002f80103020b000002040400030000000205040002f601010205
+01010206010102040101020e010102070101020301010201010102050101020201010201
+010102020101020101010202010102010101020201000205010102050101020101010202
+010102010101020601010201010102010101020101010201010102020101020201010201
+010102020101020701010201010102010101020101010201010102010101020401010201
+0101020201000203010202f80103020b0000020500000206040002f60101020501010206
+010102040101020e01050203010102040103020701020201010202000101020101040203
+010102020103020201040207010302030101020101010206010102010101020101010202
+010202000101020101010202010102010101020301050202010102010101020101010202
+0102020001010200010102040101020201030204010102f90103020b0000020d040002f6
+01030211010302c4010102fa0103020b0000020d040002ff02d5010102fa0103020b0000
+020d040002ff02ff02d20103020c040d02ff02ff02d3010302ff02ff02ee010302ff02ff
+02ee0103020200ff00ff00e70400020201030202000004ff04ff04e70202010302ff02ff
+02ee01030202050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050002020103020200000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050001000202010302020500000005ff05ff05e401000500020201030202000005ff05ff
+05e601000202010302020500000005ff05ff05e401000500020201030202000005ff05ff
+05e601000202010302020500000005ff05ff05e4010005000202010302020000050c0604
+0504060005030602051f0600050206000504060005270602050b06000506060005ff05ff
+0535060005020600050906020514010002020103020205000000050b0600050f0600051f
+060005020600052c060005020600050a060005ff05ff053d060005020600050b06000513
+010005000202010302020000050c06000506060205050600050306020518060005020600
+050206020503060205020600050206000517060005020600050106000500060105020604
+050206020503060205020600050006010503060205ff05ff052006000502060005020602
+050506000502060005000601050d010002020103020205000000050b0600050806000505
+060005020600050206000518060005000600050506000502060005020600050106000502
+060005170600050206000501060105010600050306000506060005020600050206000501
+060105010600050106000502060005ff05ff051f06000502060005010600050206000504
+06000502060105010600050b010005000202010302020000050c06030505060005050600
+050206000502060005180600050006000505060005020600050206000501060005000600
+050006000517060005020600050106000502060005030600050606000502060005020600
+05010600050206000501060005ff05ff0523060405010600050206000504060005020600
+05020600050c010002020103020205000000050b06000508060005050600050206040518
+060005000600050506000502060405010600050006000500060005170600050206000501
+0600050206000503060005060600050206000502060005010600050206000502060205ff
+05ff052006000502060005010604050406000502060005020600050b0100050002020103
+02020000050c0600050806000505060005020600051d0600050606000502060005050600
+050006000500060005170600050206000501060005020600050306000506060005020600
+0502060005010600050206000505060005ff05ff051f0600050206000501060005080600
+0502060005020600050c010002020103020205000000050b060005080600050506000502
+060005020600051906000506060005020600050206000501060005000600050006000517
+060005020600050106010501060005030600050606000502060005020600050106000502
+0600050106000502060005ff05ff051f0600050206000501060005020600050406000502
+060105010600050b010005000202010302020000050c0600050806000505060005030602
+051a06000506060005030602050306000500060005190602050206000500060105050601
+050406000503060205020600050206000502060205ff05ff052006000502060005020602
+050506000502060005000601050d0100020201030202050000000576060005ff05ff055b
+0600050f010005000202010302020000050b0606052a0606052a06060500060005ff05ff
+05450606050e06000510010002020103020205000000050a0606052a0606052a06060500
+060005ff05ff05450606050e0600050f01000500020201030202000005ff05ff05e60100
+0202010302020500000005ff05ff05e401000500020201030202000005ff05ff05e60100
+020201030202050000000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050002020103020200000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+0500010002020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff
+05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff
+05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff
+05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff
+05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff
+05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff
+05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff
+05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff
+05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff
+05ff05e802020103020205ff05ff05e8020201030202051c01020504010305c101020504
+0103051a0102057f01010505010205f001020504010305190101052f020201030202050e
+01060508010005060101050f010205010102059b01060508010005060101051001050504
+0101054d010205240104050d0101051e0102052401020501010205930106050801000506
+0101051101030535020201030202050e0100050101010500010005070101050601000511
+010105010100059d0100050101010500010005070101050601000513010105060100054d
+0101050001010524010105000101050c0100051e01010500010105240101050101000595
+010005010101050001000507010105060100051101010501010105340202010302020510
+010105030103050201030503010105030103050801020500010105010103050001010500
+01000500010005020103058b010105030103050201030503010105030103050a01010503
+0104054c0101050101050500010305000102050201030501010105000102050701010501
+01010500010305030104051d010105010105050001030500010205020103050101010500
+010205070102050001010501010305000101050001000500010005020103058301010503
+010305020103050301010503010305090101050101000500010305020105050101030521
+020201030202051001010506010105000101050101010502010105020101050101010507
+0100050001000500010005050101050001050500010105010101058a0101050601010500
+010105010101050201010502010105010101050901010502010105010101054c01000502
+010105000101050201000500010205000101050001010501010105010102050001000507
+010105010101050201010502010105010101051d01000502010105000101050201000500
+010205000101050001010501010105010102050001000507010005000100050001000505
+010105000105050001010501010105820101050601010500010105010101050201010502
+010105010101050801020504010105020101050001010501010105010101052002020103
+020205100100050401040500010105010101050201010501010605070100050001020502
+0104050001010500010005000107058a0100050401040500010105010101050201010501
+0106050901010501010105020101054b0101050201000501010105000100050001000500
+01010501010805010101050a0103050401010501010105020101051c0101050201000501
+01010500010005000100050001010501010805010101050a010005000102050201040500
+010105000100050001070582010005040104050001010501010105020101050101060509
+01020503010105040101050101060520020201030202050f010105020101050101010500
+0101050201010501010105020101050b0101050001010501010105010101050101000500
+01000500010005000101058e010105020101050101010500010105020101050101010502
+0101050d01010502010105010101054c0101050101010501010205000100050101000502
+01000500010105050101050a0101050601010502010105010101051d0101050101010501
+01020500010005010100050201000500010105050101050a010105000101050101010501
+010105010100050001000500010005000101058601010502010105010101050001010502
+01010501010105020101050b010105010101050201010503010105030101052502020103
+0202050f0101050201010501010105000101050101010502010105020101050101010507
+01000501010105010101050101010500010105000100050001000500010105010101058a
+010105020101050101010500010105010101050201010502010105010101050901010502
+010105010101054c01010500010105020103050101010501010105000101050101010501
+0101050a0101050601010502010105010101051d01010500010105020103050101010501
+0101050001010501010105010101050a0100050101010501010105010101050001010500
+010005000100050001010501010105820101050201010501010105000101050101010502
+010105020101050101010507010105010101050201010502010205000101050001010501
+01010521020201030202050e01030502010a050101050501010305070102050001010502
+0107050001000500010105000103058a01030502010a0501010505010103050801050501
+0105054c0102050301010500010005000103050001020500010305010104050701030503
+010505010105051d01020503010105000100050001030500010205000103050101040507
+01020500010105020107050001000500010105000103058201030502010a050101050501
+010305090103050101050500010505010103052202020103020205ff05ff05e802020103
+020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103
+020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103
+0202050201ff01ff01e205020202010302020503010000cb0101008101010059010100c3
+010100580101050001000500010005000100050001000500010005000100050001000500
+01000500000005020202010302020503010000cb0101008101010059010100c301010058
+010005000100030601000306000005030202010302020503010000cb010100810101000c
+0100002301000026010100c3010100580101050003050000050003060500000005020202
+0103020205030100001f0100000a0100009e010100810101000b01000004010100090104
+000a01010002010000250101001e0102000501000012010000060100002e010000120102
+0003010200310101000a0100000501010044010005000100030505000100050003050000
+050302020103020205030100001f0100000a0100009e010100810101000a010000040100
+0001010000080100000d0100000101000002010000240101002001000019010000360100
+001401000005010000310101000901010004010000010100004301010500030405000000
+050001000305050000000502020201030202050301000009010200030102000901040002
+01020002010000000101009b01010081010100090100000501000001010000080100000d
+010000010100000301000023010100090102000201000000010100020100000001010005
+01000003010200030102000301020002010400020102000301020002010000000101000a
+010200030102000201000000010100020104000101000000010100030102000501000005
+010000030102000201000000010100230101000801000000010000040100000101000043
+010005000100030400000502010003040000050302020103020205030100000801000002
+01000001010000020100000a010000030100000201000001010100010100009a01010081
+010100080100000601000001010000080103000a01000001010000040100002201010008
+010000020100000101010001010000010101000101000004010000050100000201000002
+010000010100000201000003010000060100000201000002010000010101000101000008
+010000020100000101000002010000010101000101000003010000030101000101000001
+01000002010000040100000501000002010000020100000101010001010000220101000a
+010000040100000101000043010105000303000005020100050003040500000005020202
+0103020205030100000c010000010100000e0100000701000001010000020100009a0101
+00810101000701000007010000010100000c010000090100000101000005010000210101
+000c01000001010000020100000101000002010000040100000501000002010000090100
+000301000006010000020100000201000001010000020100000801000005010000020100
+000101000002010000030100000301000005010000020100000401000005010000020100
+000201000001010000260101000a01000004010000010100004301000500010003030500
+0000050201000500030300000503020201030202050301000009010300010100000e0100
+000401030001010000020100009a010100810101000801000006010000010100000c0100
+000901000001010000040100002201010009010300010100000201000001010000020100
+000401000005010000020100000601030003010000060100000201000002010000010100
+000201000008010000050100000201000001010000020100000301000003010000050100
+000201000004010000050100000201040001010000260101000a01000004010000010100
+004301010500030205000000050401000303050000000502020201030202050301000008
+01000002010000010100000e010000030100000201000001010000020100009a01010081
+010100090100000501000001010000080100000201000009010000010100000301000023
+010100080100000201000001010000020100000101000002010000040100000501000002
+010000050100000201000003010000060100000201000002010000010100000201000008
+010000050100000201000001010000020100000301000003010000050100000201000004
+010000050100000201000005010000260101000a01000004010000010100004301000500
+010003020000050601000302000005030202010302020503010000080100000201000001
+010000020100000a010000030100000201000001010100010100009a010100810101000a
+010000040100000101000003010100020100000201000003010100030100000101000002
+010000240101000801000002010000010101000101000001010100010100000401000005
+010000020100000201000001010000020100000301000006010000020100000201000001
+010000020100000801000002010000010100000201000001010000020100000301000003
+01000005010000020100000401000005010000020100000201000001010000260101000a
+010000040100000101000043010105000301000005060100050003020500000005020202
+01030202050301000009010300020102000c0101000201030001010000000101009b0101
+00810101000b010000040101000401010003010200040101000401010002010000250101
+000901030001010000000101000201000000010100050100000501000003010200030103
+000401010004010000030102000201000002010000090102000301020002010000020100
+000401010001010000060102000501000005010000030102000201000026010100080104
+000301010044010005000100030105000000050601000500030100000503020201030202
+050301000015010500af010100810101000c01000023010000260101000f010000050100
+003c01050068010100580101050003000500000005080100030105000000050202020103
+02020503010000cb01010081010100590101000f01000005010000ab0101005801000500
+010003000000050a01000300000005030202010302020503010000cb0101008101010059
+0101000f01000005010000ab010100580101050000000500010005000100050001000500
+01000500010005000100050003000500000005020202010302020503010000cb01010081
+01010059010100c301010058010005000100050001000500010005000100050001000500
+010005000100050001000500000005030202010302020503010000cb0101008101010059
+010100c30101005801010500030e0500000005020202010302020503010000cb01010081
+01010059010100c301010058010005000100050000000500000005000000050000000500
+000005000000050000000500000005030202010302020503010000cb0101008101010059
+010100c30101005801010500000005000000050000000500000005000000050000000500
+000005000100050000000502020201030202050301ff01ff01ce0500010005000000050a
+0100050000000503020201030202050301ff01ff01cf05000000050c0100050000000502
+0202010302020503010000cb0101008101010059010100c3010100580100050001000500
+0000050a01000500000005030202010302020503010000cb0101008101010059010100c3
+01010058010105000000050c01000500000005020202010302020503010000cb01010081
+0101000c0100002a0100001f010100c30101005801000500010005000000050a01000500
+00000503020201030202050301000010010200090100000d0102000a010200100100007b
+010100810101000b010000040101000b010000050100000c010100020100001e01010010
+010200090100000d010200930101000a0101004b010105000000050c0100050000000502
+020201030202050301000012010000090100000f0100000c010000100100007b01010081
+0101000a010000040100000101000009010100040101000b01000001010000020100001d
+01010012010000090100000f0100009301010009010000010100004a0100050001000500
+0000050a0100050000000503020201030202050301000009010100000100000401000003
+010200020100000001010003010200050100000c01000003010200030102000201000001
+010000030102007101010081010100090100000501000001010000080100000001000003
+010000000100000b01000001010000030100001c01010009010100000100000401000003
+010200020100000001010003010200050100000901000000010100030102000201010000
+010000030102000a01020003010200020100000001010002010000020100000201020002
+010000000101003f01010009010000010100004a010105000000050c0100050000000502
+020201030202050301000008010000010101000401000002010000020100000101010001
+0100000101000002010000040100000c0100000201000002010000010100000201000001
+01000000010000030100000201000070010100810101000801000006010000010100000a
+010000050100000b01000001010000040100001b01010008010000010101000401000002
+010000020100000101010001010000010100000201000004010000090101000101000001
+010000020100000101000000010000000100000101000002010000080100000201000001
+010000020100000101010001010000010100000201000001010000020100000101010001
+0100003e01010009010000010100004a01000500010005000000050a0100050000000503
+020201030202050301000008010000020100000401000002010000020100000101000002
+01000005010000040100000c010000020100000201000001010000050101000401000074
+010100810101000701000007010000010100000a010000050100000b0100000101000005
+0100001a0101000801000002010000040100000201000002010000010100000201000005
+010000040100000901000002010000050100000101000000010000000100000101000002
+010000080100000501000002010000010100000501000002010000010100000201000001
+0100004201010009010000010100004a010105000000050c010005000000050202020103
+020205030100000801000002010000040100000201000002010000010100000201000002
+010300040100000c01000002010000020100000101000005010100050102007101010081
+0101000801000006010000010100000a010000050100000b01000001010000040100001b
+010100080100000201000004010000020100000201000001010000020100000201030004
+010000090100000201000002010300010100000001000000010000010104000901020002
+01040001010000060100000001000002010400010100004201010009010000010100004a
+01000500010005000000050a010005000000050302020103020205030100000801000002
+01000004010000020100000201000001010000020100000101000002010000040100000c
+010000020100000201000001010000050100000001000007010000700101008101010009
+01000005010000010100000a010000050100000b01000001010000030100001c01010008
+010000020100000401000002010000020100000101000002010000010100000201000004
+010000090100000201000001010000020100000101000000010000000100000101000010
+010000010100000501000006010000000100000201000005010000420101000901000001
+0100004a010105000000050c010005000000050202020103020205030100000801000001
+01010004010000020100000201000001010100010100000101000002010000040100000c
+010000020100000201000001010000020100000101000001010000020100000201000070
+010100810101000a01000004010000010100000301010004010000050100000501010003
+01000001010000020100001d010100080100000101010004010000020100000201000001
+010100010100000101000002010000040100000901000002010000010100000201000001
+010000000100000001000001010000020100000801000002010000010100000201000001
+010000070100000301000002010000010100004201010009010000010100004a01000500
+010005000000050a01000500000005030202010302020503010000090101000001000004
+01000003010200020100000001010003010300040100000c010000030102000301020002
+010000020100000201020071010100810101000b01000004010100040101000201040001
+0104000301010004010100020100001e0101000901010000010000040100000301020002
+010000000101000301030004010000090100000201000002010300010100000001000000
+010000020102000a0102000301020002010000070100000401020002010000420101000a
+0101004b010105000000050c010005000000050202020103020205030100000c01000023
+01050093010100810101000c0100002a0100001f0101000c010000230105001c01050068
+0101005801000500010005000000050a0100050000000503020201030202050301000008
+01000002010000bd01010081010100590101000801000002010000b50101005801010500
+0000050c0100050000000502020201030202050301000009010200be0101008101010059
+01010009010200b60101005801000500010005000000050a010005000000050302020103
+02020503010000cb0101008101010059010100c301010058010105000000050c01000500
+000005020202010302020503010000cb0101008101010059010100c30101005801000500
+010005000000050a01000500000005030202010302020503010000cb0101008101010059
+010100c301010058010105000000050c01000500000005020202010302020503010000cb
+0101008101010059010100c30101005801000500010005000000050a0100050000000503
+020201030202050301ff01ff01cf05000000050c01000500000005020202010302020503
+01ff01ff01ce0500010005000000050a01000500000005030202010302020503010000cb
+0101008101010059010100c301010058010105000000050c010005000000050202020103
+02020503010000cb0101008101010059010100c30101005801000500010005000000050a
+01000500000005030202010302020503010000cb010100810101000c0100002a0100001f
+010100c301010058010105000000050c0100050000000502020201030202050301000010
+010200090100000d0102009b010100810101000b010000040101000b010000050100000c
+010100020100001e01010010010200090100000d010200930101000a0101004b01000500
+010005000000050a0100050000000503020201030202050301000012010000090100000f
+0100009b010100810101000a010000040100000101000009010100040101000b01000001
+010000020100001d01010012010000090100000f0100009301010009010000010100004a
+010105000000050c01000500000005020202010302020503010000090101000001000004
+010000030102000201000000010100030102000501000009010000000101000301020002
+010100000100000301020003010200710101008101010009010000050100000101000008
+0100000001000003010000000100000b01000001010000030100001c0101000901010000
+010000040100000301020002010000000101000301020005010000090100000001010003
+0102000201010000010000030102000a0102000301020002010000000101000201000002
+0100000201020002010000000101003f01010009010000010100004a0100050001000500
+0000050a0100050000000503020201030202050301000008010000010101000401000002
+010000020100000101010001010000010100000201000004010000090101000101000001
+010000020100000101000000010000000100000101000002010000010100000201000070
+010100810101000801000006010000010100000a010000050100000b0100000101000004
+0100001b0101000801000001010100040100000201000002010000010101000101000001
+010000020100000401000009010100010100000101000002010000010100000001000000
+010000010100000201000008010000020100000101000002010000010101000101000001
+01000002010000010100000201000001010100010100003e01010009010000010100004a
+010105000000050c01000500000005020202010302020503010000080100000201000004
+010000020100000201000001010000020100000501000004010000090100000201000005
+010000010100000001000000010000010100000201000001010000740101008101010007
+01000007010000010100000a010000050100000b01000001010000050100001a01010008
+010000020100000401000002010000020100000101000002010000050100000401000009
+010000020100000501000001010000000100000001000001010000020100000801000005
+010000020100000101000005010000020100000101000002010000010100004201010009
+010000010100004a01000500010005000000050a01000500000005030202010302020503
+010000080100000201000004010000020100000201000001010000020100000201030004
+010000090100000201000002010300010100000001000000010000010104000201020071
+010100810101000801000006010000010100000a010000050100000b0100000101000004
+0100001b0101000801000002010000040100000201000002010000010100000201000002
+010300040100000901000002010000020103000101000000010000000100000101040009
+010200020104000101000006010000000100000201040001010000420101000901000001
+0100004a010105000000050c010005000000050202020103020205030100000801000002
+010000040100000201000002010000010100000201000001010000020100000401000009
+010000020100000101000002010000010100000001000000010000010100000901000070
+010100810101000901000005010000010100000a010000050100000b0100000101000003
+0100001c0101000801000002010000040100000201000002010000010100000201000001
+010000020100000401000009010000020100000101000002010000010100000001000000
+010000010100001001000001010000050100000601000000010000020100000501000042
+01010009010000010100004a01000500010005000000050a010005000000050302020103
+020205030100000801000001010100040100000201000002010000010101000101000001
+010000020100000401000009010000020100000101000002010000010100000001000000
+0100000101000002010000010100000201000070010100810101000a0100000401000001
+010000030101000401000005010000050101000301000001010000020100001d01010008
+010000010101000401000002010000020100000101010001010000010100000201000004
+010000090100000201000001010000020100000101000000010000000100000101000002
+010000080100000201000001010000020100000101000007010000030100000201000001
+0100004201010009010000010100004a010105000000050c010005000000050202020103
+020205030100000901010000010000040100000301020002010000000101000301030004
+010000090100000201000002010300010100000001000000010000020102000301020071
+010100810101000b01000004010100040101000201040001010400030101000401010002
+0100001e0101000901010000010000040100000301020002010000000101000301030004
+010000090100000201000002010300010100000001000000010000020102000a01020003
+01020002010000070100000401020002010000420101000a0101004b0100050001000500
+0000050a010005000000050302020103020205030100000c010000230105009301010081
+0101000c0100002a0100001f0101000c010000230105001c010500680101005801010500
+0000050c010005000000050202020103020205030100000801000002010000bd01010081
+010100590101000801000002010000b50101005801000500010005000000050a01000500
+00000503020201030202050301000009010200be010100810101005901010009010200b6
+01010058010105000000050c01000500000005020202010302020503010000cb01010081
+01010059010100c30101005801000500010005000000050a010005000000050302020103
+02020503010000cb0101008101010059010100c301010058010105000000050c01000500
+000005020202010302020503010000cb0101008101010059010100c30101005801000500
+010005000000050a01000500000005030202010302020503010000cb0101008101010059
+010100c301010058010105000000050c0100050000000502020201030202050301ff01ff
+01ce0500010005000000050a0100050000000503020201030202050301ff01ff01cf0500
+0000050c01000500000005020202010302020503010000cb0101008101010059010100c3
+0101005801000500010005000000050a01000500000005030202010302020503010000cb
+0101008101010059010100c301010058010105000000050c010005000000050202020103
+02020503010000cb010100810101000c0100002a0100001f010100c30101005801000500
+010005000000050a0100050000000503020201030202050301000010010200090100000d
+0102004301000056010100810101000b010000040101000b010000050100000c01010002
+0100001e01010010010200090100000d010200930101000a0101004b010105000000050c
+0100050000000502020201030202050301000012010000090100000f0100004301000056
+010100810101000a010000040100000101000009010100040101000b0100000101000002
+0100001d01010012010000090100000f0100009301010009010000010100004a01000500
+010005000000050a01000500000005030202010302020503010000090101000001000004
+010000030102000201000000010100030102000501000009010000000101000301020002
+0101000001000003010200030102000a0102000201000002010000010104005401010081
+010100090100000501000001010000080100000001000003010000000100000b01000001
+010000030100001c01010009010100000100000401000003010200020100000001010003
+010200050100000901000000010100030102000201010000010000030102000a01020003
+010200020100000001010002010000020100000201020002010000000101003f01010009
+010000010100004a010105000000050c0100050000000502020201030202050301000008
+010000010101000401000002010000020100000101010001010000010100000201000004
+010000090101000101000001010000020100000101000000010000000100000101000002
+010000010100000201000008010000020100000101000002010000030100005601010081
+0101000801000006010000010100000a010000050100000b01000001010000040100001b
+010100080100000101010004010000020100000201000001010100010100000101000002
+010000040100000901010001010000010100000201000001010000000100000001000001
+010000020100000801000002010000010100000201000001010100010100000101000002
+010000010100000201000001010100010100003e01010009010000010100004a01000500
+010005000000050a01000500000005030202010302020503010000080100000201000004
+010000020100000201000001010000020100000501000004010000090100000201000005
+0100000101000000010000000100000101000002010000010100000c0100000201000002
+010000000100000401000056010100810101000701000007010000010100000a01000005
+0100000b01000001010000050100001a0101000801000002010000040100000201000002
+010000010100000201000005010000040100000901000002010000050100000101000000
+010000000100000101000002010000080100000501000002010000010100000501000002
+0100000101000002010000010100004201010009010000010100004a010105000000050c
+010005000000050202020103020205030100000801000002010000040100000201000002
+010000010100000201000002010300040100000901000002010000020103000101000000
+010000000100000101040002010200090104000301000005010000560101008101010008
+01000006010000010100000a010000050100000b01000001010000040100001b01010008
+010000020100000401000002010000020100000101000002010000020103000401000009
+010000020100000201030001010000000100000001000001010400090102000201040001
+010000060100000001000002010400010100004201010009010000010100004a01000500
+010005000000050a01000500000005030202010302020503010000080100000201000004
+010000020100000201000001010000020100000101000002010000040100000901000002
+010000010100000201000001010000000100000001000001010000090100000801000006
+010000000100000401000056010100810101000901000005010000010100000a01000005
+0100000b01000001010000030100001c0101000801000002010000040100000201000002
+010000010100000201000001010000020100000401000009010000020100000101000002
+010000010100000001000000010000010100001001000001010000050100000601000000
+01000002010000050100004201010009010000010100004a010105000000050c01000500
+000005020202010302020503010000080100000101010004010000020100000201000001
+010100010100000101000002010000040100000901000002010000010100000201000001
+010000000100000001000001010000020100000101000002010000080100000201000001
+010000020100000301000056010100810101000a01000004010000010100000301010004
+01000005010000050101000301000001010000020100001d010100080100000101010004
+010000020100000201000001010100010100000101000002010000040100000901000002
+010000010100000201000001010000000100000001000001010000020100000801000002
+010000010100000201000001010000070100000301000002010000010100004201010009
+010000010100004a01000500010005000000050a01000500000005030202010302020503
+010000090101000001000004010000030102000201000000010100030103000401000009
+010000020100000201030001010000000100000001000002010200030102000a01020002
+010000020100000401010054010100810101000b01000004010100040101000201040001
+0104000301010004010100020100001e0101000901010000010000040100000301020002
+010000000101000301030004010000090100000201000002010300010100000001000000
+010000020102000a0102000301020002010000070100000401020002010000420101000a
+0101004b010105000000050c010005000000050202020103020205030100000c01000023
+0105002301050069010100810101000c0100002a0100001f0101000c010000230105001c
+010500680101005801000500010005000000050a01000500000005030202010302020503
+0100000801000002010000bd01010081010100590101000801000002010000b501010058
+010105000000050c0100050000000502020201030202050301000009010200be01010081
+0101005901010009010200b60101005801000500010005000000050a0100050000000503
+0202010302020503010000cb0101008101010059010100c301010058010105000000050c
+01000500000005020202010302020503010000cb0101008101010059010100c301010058
+01000500010005000000050a01000500000005030202010302020503010000cb01010081
+01010059010100c301010058010105000000050c01000500000005020202010302020503
+010000cb0101008101010059010100c30101005801000500010005000000050a01000500
+00000503020201030202050301ff01ff01cf05000000050c010005000000050202020103
+0202050301ff01ff01ce0500010005000000050a01000500000005030202010302020503
+010000cb0101008101010059010100c301010058010105000000050c0100050000000502
+0202010302020503010000cb0101008101010059010100c3010100580100050001000500
+0000050a01000500000005030202010302020503010000cb010100810101000c0100002a
+0100001f010100c301010058010105000000050c01000500000005020202010302020503
+0100000b010000120100001f01000089010100810101000b010000040101000b01000004
+0102000b010100020100001e0101000b010000120100000e010000010100008f0101000a
+0101004b01000500010005000000050a010005000000050302020103020205030100001f
+0100001f01000089010100810101000a0100000401000001010000090101000301000002
+0100000901000001010000020100001d0101001f0100000e010000010100008f01010009
+010000010100004a010105000000050c0100050000000502020201030202050301000009
+010200020100000001010003010200020104000901020003010200030102000201000000
+010100030102007f01010081010100090100000501000001010000080100000001000007
+0100000901000001010000030100001c0101000901020002010000000101000301020002
+010400090101000001000001010000000101008c01010009010000010100004a01000500
+010005000000050a010005000000050302020103020205030100000b0100000201010001
+0100000101000002010000030100000a0100000201000001010000020100000101000002
+010000010101000101000001010000020100007e01010081010100080100000601000001
+0100000a010000070100000901000001010000040100001b0101000b0100000201010001
+0100000101000002010000030100000a0100000101010001010100010100008b01010009
+010000010100004a010105000000050c010005000000050202020103020205030100000b
+01000002010000020100000101000002010000030100000a010000090100000101000005
+0100000201000001010000020100007e010100810101000701000007010000010100000a
+010000060100000a01000001010000050100001a0101000b010000020100000201000001
+01000002010000030100000a0100000201000001010000020100008b0101000901000001
+0100004a01000500010005000000050a010005000000050302020103020205030100000b
+010000020100000201000001010400030100000a01000006010300010100000501000002
+010000010104007e010100810101000801000006010000010100000a010000050100000b
+01000001010000040100001b0101000b010000020100000201000001010400030100000a
+0100000201000001010000020100008b01010009010000010100004a010105000000050c
+010005000000050202020103020205030100000b01000002010000020100000101000007
+0100000a0100000501000002010000010100000501000002010000010100008201010081
+0101000901000005010000010100000a010000040100000c01000001010000030100001c
+0101000b010000020100000201000001010000070100000a010000020100000101000002
+0100008b01010009010000010100004a01000500010005000000050a0100050000000503
+02020103020205030100000b01000002010000020100000101000002010000030100000a
+010000020100000101000002010000010100000201000001010000020100000101000002
+0100007e010100810101000a010000040100000101000003010100040100000301000007
+0101000301000001010000020100001d0101000b01000002010000020100000101000002
+010000030100000a0100000101010001010100010100008b01010009010000010100004a
+010105000000050c010005000000050202020103020205030100000b0100000201000002
+01000002010200050101000901020003010300020102000201000002010000020102007f
+010100810101000b01000004010100040101000201040001010400030101000401010002
+0100001e0101000b01000002010000020100000201020005010100090101000001000001
+010000000101008c0101000a0101004b01000500010005000000050a0100050000000503
+020201030202050301000023010500a1010100810101000c0100002a0100001f01010023
+0105009901010058010105000000050c01000500000005020202010302020503010000cb
+0101008101010059010100c30101005801000500010005000000050a0100050000000503
+0202010302020503010000cb0101008101010059010100c301010058010105000000050c
+01000500000005020202010302020503010000cb0101008101010059010100c301010058
+01000500010005000000050a01000500000005030202010302020503010000cb01010081
+01010059010100c301010058010105000000050c01000500000005020202010302020503
+010000cb0101008101010059010100c30101005801000500010005000000050a01000500
+000005030202010302020503010000cb0101008101010059010100c30101005801010500
+0000050c0100050000000502020201030202050301ff01ff01ce0500010005000000050a
+0100050000000503020201030202050301ff01ff01cf05000000050c0100050000000502
+0202010302020503010000cb0101008101010059010100c3010100580100050001000500
+0000050a01000500000005030202010302020503010000cb0101008101010059010100c3
+01010058010105000000050c01000500000005020202010302020503010000cb01010081
+0101000c0100002a0100001f010100c30101005801000500010005000000050a01000500
+0000050302020103020205030100000b010000120100000e010000010100009701010081
+0101000b010000040101000b010000040102000b010100020100001e0101000b01000012
+0100000e010000010100008f0101000a0100000401020044010105000000050c01000500
+0000050202020103020205030100001f0100000e0100000101000097010100810101000a
+01000004010000010100000901010003010000020100000901000001010000020100001d
+0101001f0100000e010000010100008f0101000901010003010000020100004301000500
+010005000000050a01000500000005030202010302020503010000090102000201000000
+010100030102000201040009010100000100000101000000010100940101008101010009
+01000005010000010100000801000000010000070100000901000001010000030100001c
+010100090102000201000000010100030102000201040009010100000100000101000000
+0101008c0101000801000000010000030100000201000043010105000000050c01000500
+0000050202020103020205030100000b0100000201010001010000010100000201000003
+0100000a0100000101010001010100010100009301010081010100080100000601000001
+0100000a010000070100000901000001010000040100001b0101000b0100000201010001
+0100000101000002010000030100000a0100000101010001010100010100008b0101000a
+01000003010000020100004301000500010005000000050a010005000000050302020103
+020205030100000b01000002010000020100000101000002010000030100000a01000002
+010000010100000201000093010100810101000701000007010000010100000a01000006
+0100000a01000001010000050100001a0101000b01000002010000020100000101000002
+010000030100000a0100000201000001010000020100008b0101000a0100000401030043
+010105000000050c010005000000050202020103020205030100000b0100000201000002
+01000001010400030100000a010000020100000101000002010000930101008101010008
+01000006010000010100000a010000050100000b01000001010000040100001b0101000b
+010000020100000201000001010400030100000a0100000201000001010000020100008b
+0101000a010000070100004301000500010005000000050a010005000000050302020103
+020205030100000b010000020100000201000001010000070100000a0100000201000001
+0100000201000093010100810101000901000005010000010100000a010000040100000c
+01000001010000030100001c0101000b010000020100000201000001010000070100000a
+0100000201000001010000020100008b0101000a0100000701000043010105000000050c
+010005000000050202020103020205030100000b01000002010000020100000101000002
+010000030100000a01000001010100010101000101000093010100810101000a01000004
+01000001010000030101000401000003010000070101000301000001010000020100001d
+0101000b01000002010000020100000101000002010000030100000a0100000101010001
+010100010100008b0101000a01000003010000020100004301000500010005000000050a
+010005000000050302020103020205030100000b01000002010000020100000201020005
+0101000901010000010000010100000001010094010100810101000b0100000401010004
+01010002010400010104000301010004010100020100001e0101000b0100000201000002
+0100000201020005010100090101000001000001010000000101008c0101000801040002
+01020044010105000000050c0100050000000502020201030202050301000023010500a1
+010100810101000c0100002a0100001f0101002301050099010100580100050001000500
+0000050a01000500000005030202010302020503010000cb0101008101010059010100c3
+01010058010105000000050c01000500000005020202010302020503010000cb01010081
+01010059010100c30101005801000500010005000000050a010005000000050302020103
+02020503010000cb0101008101010059010100c301010058010105000000050c01000500
+000005020202010302020503010000cb0101008101010059010100c30101005801000500
+010005000000050a01000500000005030202010302020503010000cb0101008101010059
+010100c301010058010105000000050c01000500000005020202010302020503010000cb
+0101008101010059010100c30101005801000500010005000000050a0100050000000503
+020201030202050301ff01ff01cf05000000050c01000500000005020202010302020503
+01ff01ff01ce0500010005000000050a01000500000005030202010302020503010000cb
+0101008101010059010100c301010058010105000000050c010005000000050202020103
+02020503010000cb0101008101010059010100c30101005801000500010005000000050a
+01000500000005030202010302020503010000cb010100810101000c0100002a0100001f
+010100c301010058010105000000050c010005000000050202020103020205030100000b
+010000120100000a0100001501000087010100810101000b010000040101000b01000004
+0102000b010100020100001e0101000b010000120100000e010000010100008f0101000c
+0100004a01000500010005000000050a010005000000050302020103020205030100001f
+0100000a0100001501000087010100810101000a01000004010000010100000901010003
+010000020100000901000001010000020100001d0101001f0100000e010000010100008f
+0101000b0101004a010105000000050c0100050000000502020201030202050301000009
+010200020100000001010003010200020104000801000000010100030102000301020002
+010400020102007f01010081010100090100000501000001010000080100000001000007
+0100000901000001010000030100001c0101000901020002010000000101000301020002
+010400090101000001000001010000000101008c0101000a010000000100004a01000500
+010005000000050001000500010005000100050001000500010005000100050000000503
+02020103020205030100000b01000002010100010100000101000002010000030100000a
+01010001010000010100000201000001010000020100000301000003010000020100007e
+010100810101000801000006010000010100000a01000007010000090100000101000004
+0100001b0101000b01000002010100010100000101000002010000030100000a01000001
+01010001010100010100008b01010009010000010100004a010105000000050001000500
+010005000100050001000500010005000100050001000500000005020202010302020503
+0100000b01000002010000020100000101000002010000030100000a0100000201000001
+010000020100000101000007010000030100008201010081010100070100000701000001
+0100000a010000060100000a01000001010000050100001a0101000b0100000201000002
+0100000101000002010000030100000a0100000201000001010000020100008b01010008
+010000020100004a010005000100030e0000050302020103020205030100000b01000002
+0100000201000001010400030100000a0100000201000001010000020100000201020004
+010000040102007f010100810101000801000006010000010100000a010000050100000b
+01000001010000040100001b0101000b010000020100000201000001010400030100000a
+0100000201000001010000020100008b01010008010000020100004a01010500030e0500
+0000050202020103020205030100000b010000020100000201000001010000070100000a
+0100000201000001010000020100000501000003010000070100007e0101008101010009
+01000005010000010100000a010000040100000c01000001010000030100001c0101000b
+010000020100000201000001010000070100000a0100000201000001010000020100008b
+0101000801050049010005000100030e0000050302020103020205030100000b01000002
+010000020100000101000002010000030100000a01000002010000010100000201000001
+010000020100000301000003010000020100007e010100810101000a0100000401000001
+010000030101000401000003010000070101000301000001010000020100001d0101000b
+01000002010000020100000101000002010000030100000a010000010101000101010001
+0100008b0101000c0100004a01010500030e05000000050202020103020205030100000b
+010000020100000201000002010200050101000801000002010000020102000301020005
+010100020102007f010100810101000b0100000401010004010100020104000101040003
+01010004010100020100001e0101000b0100000201000002010000020102000501010009
+0101000001000001010000000101008c0101000c0100004a010005000100030e00000503
+020201030202050301000023010500a1010100810101000c0100002a0100001f01010023
+010500990101005801010500030e0500000005020202010302020503010000cb01010081
+01010059010100c301010058010005000100030e000005030202010302020503010000cb
+0101008101010059010100c30101005801010500030e0500000005020202010302020503
+010000cb0101008101010059010100c301010058010005000100030e0000050302020103
+02020503010000cb0101008101010059010100c30101005801010500030e050000000502
+0202010302020503010000cb0101008101010059010100c301010058010005000100030e
+000005030202010302020503010000cb0101008101010059010100c30101005801010500
+030e050000000502020201030202050301ff01ff01ce05000100030e0000050302020103
+0202050307cd01ff01ff01010500030e0500000005020202010302020503070008cb0700
+0100088101010859010108c301010858010005000100030e000005030202010302020503
+070008cb07000100080b010108470101082901010859010108c30101085801010500030e
+0500000005020202010302020503070008cb07000100080a010008150100082a01000808
+010008280101080c0100082a0100081f010108c301010858010005000100030e00000503
+02020103020205030700081d07000808070008a207000100080a010008040102080c0100
+08040101080b010008030104080a0101080201000807010008280101080b010008040101
+080b010008030104080a010108020100081e010108180100080a01000822010208770101
+080a0100084c01010500030e05000000050202020103020205030700081d070008ac0700
+0100080a01000803010008020100080a0100080401000801010008090101080301000802
+01000809010008010100080201000806010008280101080a010008040100080101000809
+01010803010008020100080901000801010008020100081d010108180100080a01000824
+01000877010108090101084c010005000100030e00000503020201030202050307000809
+070208030702080307020802070008010700080307020803070208030702089407000100
+080a01000803010008020100080901000805010008010100080801000800010008070100
+080901000801010008030100080501000828010108090100080501000801010008080100
+0800010008070100080901000801010008030100081c0101080801000800010108030102
+080201040808010008010100080301020802010008000101080201000800010108030102
+08050100087701010808010008000100084c01010500030e050000000502020201030202
+050307000808070008020700080107000802070008010700080207000801070008000700
+0806070008020700080207000801070008020700089307000100080a0100080301000802
+0100080801000806010008010100080a010008060100080a010008010100080401000804
+010008280101080801000806010008010100080a010008060100080a0100080101000804
+0100081b01010808010108010100080101000802010008030100080a0100080001000803
+010008020100080101010801010008010101080101000801010008020100080401000877
+0101080a0100084c010005000100030e0000050302020103020205030700080807000805
+070008020700080107000802070008010701080707000802070008020700080107000897
+070001000808010108050102080801000807010008010100080a010008060100080a0100
+08010100080501000804010108260101080701000807010008010100080a010008060100
+080a01000801010008050100081a01010808010008020100080101000802010008030100
+080a01010804010008020100080101000805010008020100080101000802010008040100
+08770101080a0100084c01010500030e0500000005020202010302020503070008080700
+080507000802070008010700080207000801070108070700080207040802070208940700
+0100080a01000803010008020100080801000806010008010100080a010008060100080a
+010008010100080401000804010008280101080801000806010008010100080a01000806
+0100080a01000801010008040100081b010108080100080201000801010408030100080a
+010108040104080101000805010008020100080101040804010008770101080a0100084c
+010005000100030e00000503020201030202050307000808070008050700080207000801
+0700080207000801070008000700080607000802070008090700089307000100080a0100
+0803010008020100080901000805010008010100080a010008050100080b010008010100
+080301000805010008280101080901000805010008010100080a010008050100080b0100
+0801010008030100081c010108080100080201000801010008070100080a010008000100
+08030100080501000805010008020100080101000808010008770101080a0100084c0101
+0500030e0500000005020202010302020503070008080700080207000801070008020700
+080107000802070008010700080107000805070008020700080207000801070008020700
+089307000100080a01000803010008020100080301010804010008040100080101000803
+01010804010008050100080501010803010008010100080201000806010008280101080a
+010008040100080101000803010108040100080501000805010108030100080101000802
+0100081d01010808010008020100080101000802010008030100080a0100080101000802
+01000802010008010100080501000802010008010100080201000804010008770101080a
+0100084c010005000100030e000005030202010302020503070008090702080307020803
+07020802070008020700080407000803070208030702089407000100080a010008040102
+080401010805010008040101080401010802010408030100080501010804010108020100
+0807010008280101080b0100080401010804010108020104080301000805010108040101
+08020100081e010108080100080201000802010208050101080801000802010008020102
+08020100080501000802010008020102080501000877010108080104084a01010500030e
+0500000005020202010302020503070008cb07000100080a0100080d010008060100082a
+01000808010008280101080c0100082a0100081f0101081c010508a00101085801000500
+0100030e000005030202010302020503070008cb07000100080b010108090101083b0101
+082901010859010108c30101085801010500030e05000000050202020103020205030700
+08cb07000100088101010859010108c301010858010005000100030e0000050302020103
+02020503070008cb07000100088101010859010108c30101085801010500030e05000000
+05020202010302020503070008cb07000100088101010859010108c30101085801000500
+0100030e000005030202010302020503070008cb07000100088101010859010108c30101
+085801010500030e0500000005020202010302020503070008cb07000100088101010859
+010108c301010858010005000100030e00000503020201030202050307cd01ff01ff0101
+0500030e050000000502020201030202050301ff01ff01ce05000100030e000005030202
+010302020503010000cb0101008101010059010100c30101005801010500030e05000000
+05020202010302020503010000cb0101008101010059010100c301010058010005000100
+030e000005030202010302020503010000cb010100810101000c0100002a0100001f0101
+00c30101005801010500030e050000000502020201030202050301000028010000040100
+000b0100008e010100810101000b010000040101000b010000030104000a010100020100
+001e010100180100000a01000022010200770101000a0101004b010005000100030e0000
+0503020201030202050301000028010000110100008e010100810101000a010000040100
+00010100000901010003010000020100000901000001010000020100001d010100180100
+000a010000240100007701010009010000010100004a01010500030e0500000005020202
+010302020503010000090102000201000002010000020102000a01010000010000020102
+0003010200020104008c0101008101010009010000050100000101000008010000000100
+00070100000901000001010000030100001c010100080100000001010003010200020104
+000801000001010000030102000201000000010100020100000001010003010200050100
+007701010009010000010100004a010005000100030e0000050302020103020205030100
+000801000002010000010100000201000001010000020100000801000001010100040100
+000201000002010000030100008e010100810101000801000006010000010100000a0100
+00060100000a01000001010000040100001b010100080101000101000001010000020100
+00030100000a010000000100000301000002010000010101000101000001010100010100
+000101000002010000040100007701010009010000010100004a01010500030e05000000
+05020202010302020503010000080100000601000001010000010100000c010000020100
+000401000002010000070100008e010100810101000701000007010000010100000a0100
+00060100000a01000001010000050100001a010100080100000201000001010000020100
+00030100000a010100040100000201000001010000050100000201000001010000020100
+00040100007701010009010000010100004a010005000100030e00000503020201030202
+050301000009010200030100000101000002010200090100000201000004010000030102
+00040100008e010100810101000801000006010000010100000a010000060100000a0100
+0001010000040100001b010100080100000201000001010400030100000a010100040104
+0001010000050100000201000001010400040100007701010009010000010100004a0101
+0500030e05000000050202020103020205030100000c0100000301000000010000050100
+0008010000020100000401000006010000030100008e0101008101010009010000050100
+00010100000a010000050100000b01000001010000030100001c01010008010000020100
+0001010000070100000a0100000001000003010000050100000501000002010000010100
+00080100007701010009010000010100004a010005000100030e00000503020201030202
+050301000008010000020100000301010002010000020100000801000001010100040100
+000201000002010000030100008e010100810101000a0100000401000001010000030101
+000401000005010000050101000301000001010000020100001d01010008010000020100
+000101000002010000030100000a01000001010000020100000201000001010000050100
+00020100000101000002010000040100007701010009010000010100004a01010500030e
+05000000050202020103020205030100000901020005010000030102000a010100000100
+000401000003010200050101008c010100810101000b0100000401010004010100020104
+00030100000501010004010100020100001e010100080100000201000002010200050101
+000801000002010000020102000201000005010000020100000201020005010000770101
+000a0101004b010005000100030e00000503020201030202050301000012010000080105
+00a8010100810101000c0100002a0100001f0101001c010500a00101005801010500030e
+05000000050202020103020205030100000f01000000010000b801010081010100590101
+00c301010058010005000100030e00000503020201030202050301000010010000b90101
+008101010059010100c30101005801010500030e05000000050202020103020205030100
+00cb0101008101010059010100c301010058010005000100030e00000503020201030202
+0503010000cb0101008101010059010100c30101005801010500030e0500000005020202
+010302020503010000cb0101008101010059010100c301010058010005000100030e0000
+05030202010302020503010000cb0101008101010059010100c30101005801010500030e
+050000000502020201030202050301ff01ff01ce05000100030e00000503020201030202
+050307cd01ff01ff01010500030e0500000005020202010302020503070008cb07000100
+088101010859010108c301010858010005000100030e0000050302020103020205030700
+08cb07000100080b0101084e0101082201010859010108c30101085801010500030e0500
+000005020202010302020503070008cb07000100080a0100081c0100082a010008080100
+08210101080c0100082a0100081f010108c301010858010005000100030e000005030202
+0103020205030700081a070008af07000100080a01000805010008050101080c01000804
+0101080a010208020104080a0101080201000807010008210101080b010008040101080a
+010208020104080a010108020100081e0101081a010008a7010108090102080201040802
+0102083d01010500030e05000000050202020103020205030700081a070008af07000100
+080a0100080401010804010008010100080a010008040100080101000808010008020100
+08010100080201000809010008010100080201000806010008210101080a010008040100
+0801010008080100080201000801010008020100080901000801010008020100081d0101
+081a010008a701010808010008020100080101000805010008020100083c010005000100
+030e00000503020201030202050307000809070208030702080307010800070008020702
+08a907000100080a01000803010008000100080401000801010008090100080501000801
+0100080c0100080501000809010008010100080301000805010008210101080901000805
+010008010100080c010008050100080901000801010008030100081c0101080901020803
+0102080301010800010008020102080a0102080301020802010008000101080201000802
+010008020102080201000800010108700101080c01000801010008090100083c01010500
+030e05000000050202020103020205030700080807000802070008010700080207000801
+070008010701080107000802070008a807000100080a0100080501000804010008010100
+080801000806010008010100080c010008040100080a0100080101000804010008040100
+08210101080801000806010008010100080c010008040100080a01000801010008040100
+081b01010808010008020100080101000802010008010100080101010801010008020100
+080801000802010008010100080201000801010108010100080101000802010008010100
+080201000801010108010100086f0101080c01000801010308060100083c010005000100
+030e00000503020201030202050307000808070008050700080207000801070008020700
+080107000802070008a80700010008080101080601000804010008010100080701000807
+010008010100080b010008050100080a0100080101000805010008040101081f01010807
+01000807010008010100080b010008050100080a01000801010008050100081a01010808
+010008050100080201000801010008020100080101000802010008080100080501000802
+010008010100080501000802010008010100080201000801010008730101080b01000806
+010008040100083d01010500030e05000000050202020103020205030700080807000805
+07000802070008010700080207000801070408a807000100080a01000805010008040100
+08010100080801000806010008010100080a010008060100080a01000801010008040100
+0804010008210101080801000806010008010100080a010008060100080a010008010100
+08040100081b010108080100080501000802010008010100080201000801010408090102
+08020104080101000806010008000100080201040801010008730101080a010008070100
+08030100083e010005000100030e00000503020201030202050307000808070008050700
+0802070008010700080207000801070008ac07000100080a010008050100080401000801
+01000809010008050100080101000809010008060100080b010008010100080301000805
+0100082101010809010008050100080101000809010008060100080b0100080101000803
+0100081c0101080801000805010008020100080101000802010008010100081001000801
+010008050100080601000800010008020100080501000873010108090100080401000802
+010008020100083f01010500030e05000000050202020103020205030700080807000802
+070008010700080207000801070008010701080107000802070008a807000100080a0100
+080501000804010008010100080301010804010008040100080101000803010108020100
+08070100080501010803010008010100080201000806010008210101080a010008040100
+0801010008030101080201000807010008050101080301000801010008020100081d0101
+080801000802010008010100080201000801010008010101080101000802010008080100
+080201000801010008020100080101000807010008030100080201000801010008730101
+080801000805010008020100080101000840010005000100030e00000503020201030202
+05030700080907020803070208030701080007000802070208a907000100080a01000803
+010408030101080401010805010008040101080401010802010408030100080501010804
+0101080201000807010008210101080b0100080401010804010108020104080301000805
+01010804010108020100081e01010809010208030102080301010800010008020102080a
+010208030102080201000807010008040102080201000873010108080104080201020802
+0104083c01010500030e0500000005020202010302020503070008cb07000100080a0100
+0814010008060100082a01000808010008210101080c0100082a0100081f010108230105
+089901010858010005000100030e000005030202010302020503070008cb07000100080b
+010108100101083b0101082201010859010108c30101085801010500030e050000000502
+0202010302020503070008cb07000100088101010859010108c301010858010005000100
+030e000005030202010302020503070008cb07000100088101010859010108c301010858
+01010500030e0500000005020202010302020503070008cb070001000881010108590101
+08c301010858010005000100030e000005030202010302020503070008cb070001000881
+01010859010108c30101085801010500030e0500000005020202010302020503070008cb
+07000100088101010859010108c301010858010005000100030e00000503020201030202
+050307cd01ff01ff01010500030e050000000502020201030202050307cd01ff01ff0100
+05000100030e000005030202010302020503070008cb07000100088101010859010108c3
+0101085801010500030e0500000005020202010302020503070008cb07000100080b0101
+084e0101082201010859010108c301010858010005000100030e00000503020201030202
+0503070008cb07000100080a0100081c0100082a01000808010008210101080c0100082a
+0100081f010108c30101085801010500030e05000000050202020103020205030700081a
+070008af07000100080a01000805010008050100080d010008040101080a010208020104
+080a0101080201000807010008210101080b010008040101080a010208020104080a0101
+08020100081e0101081a010008a7010108090102080301020844010005000100030e0000
+050302020103020205030700081a070008af07000100080a01000804010108040101080c
+010008040100080101000808010008020100080101000802010008090100080101000802
+01000806010008210101080a010008040100080101000808010008020100080101000802
+0100080901000801010008020100081d0101081a010008a7010108080100080201000801
+010008020100084301010500030e05000000050202020103020205030700080907020803
+070208030701080007000802070208090700080007010803070208020701080007000803
+070208030702087f07000100080a010008030100080001000803010008000100080b0100
+0805010008010100080c0100080501000809010008010100080301000805010008210101
+080901000805010008010100080c010008050100080901000801010008030100081c0101
+0809010208030102080301010800010008020102080a0102080301020802010008000101
+080201000802010008020102080201000800010108700101080c01000805010008430100
+05000100030e000005030202010302020503070008080700080207000801070008020700
+080107000801070108010700080207000808070108010700080107000802070008010700
+080007000800070008010700080207000801070008020700087e07000100080a01000805
+010008050100080a01000806010008010100080c010008040100080a0100080101000804
+01000804010008210101080801000806010008010100080c010008040100080a01000801
+010008040100081b01010808010008020100080101000802010008010100080101010801
+010008020100080801000802010008010100080201000801010108010100080101000802
+010008010100080201000801010108010100086f0101080c010008050100084301010500
+030e05000000050202020103020205030700080807000805070008020700080107000802
+070008010700080207000808070008020700080507000801070008000700080007000801
+070008020700080107000882070001000808010108060100080501000809010008070100
+08010100080b010008050100080a0100080101000805010008040101081f010108070100
+0807010008010100080b010008050100080a01000801010008050100081a010108080100
+080501000802010008010100080201000801010008020100080801000805010008020100
+08010100080501000802010008010100080201000801010008730101080a010108040101
+0844010005000100030e0000050302020103020205030700080807000805070008020700
+080107000802070008010704080807000802070008020703080107000800070008000700
+0801070408020702087f07000100080a01000805010008050100080a0100080601000801
+0100080a010008060100080a010008010100080401000804010008210101080801000806
+010008010100080a010008060100080a01000801010008040100081b0101080801000805
+010008020100080101000802010008010104080901020802010408010100080601000800
+0100080201040801010008730101080c010008050100084301010500030e050000000502
+02020103020205030700080807000805070008020700080107000802070008010700080c
+07000802070008010700080207000801070008000700080007000801070008090700087e
+07000100080a01000805010008050100080b010008050100080101000809010008060100
+080b01000801010008030100080501000821010108090100080501000801010008090100
+08060100080b01000801010008030100081c010108080100080501000802010008010100
+080201000801010008100100080101000805010008060100080001000802010008050100
+08730101080c0100080501000843010005000100030e0000050302020103020205030700
+080807000802070008010700080207000801070008010701080107000802070008080700
+080207000801070008020700080107000800070008000700080107000802070008010700
+08020700087e07000100080a010008050100080501000805010108040100080401000801
+010008030101080201000807010008050101080301000801010008020100080601000821
+0101080a0100080401000801010008030101080201000807010008050101080301000801
+010008020100081d01010808010008020100080101000802010008010100080101010801
+010008020100080801000802010008010100080201000801010008070100080301000802
+0100080101000873010108080100080201000801010008020100084301010500030e0500
+000005020202010302020503070008090702080307020803070108000700080207020809
+070008020700080207030801070008000700080007000802070208030702087f07000100
+080a01000803010408010104080301010805010008040101080401010802010408030100
+0805010108040101080201000807010008210101080b0100080401010804010108020104
+08030100080501010804010108020100081e010108090102080301020803010108000100
+08020102080a010208030102080201000807010008040102080201000873010108090102
+080301020844010005000100030e00000503020201030202050307000823070508a10700
+0100080a01000814010008060100082a01000808010008210101080c0100082a0100081f
+01010823010508990101085801010500030e0500000005020202010302020503070008cb
+07000100080b010108100101083b0101082201010859010108c301010858010005000100
+030e000005030202010302020503070008cb07000100088101010859010108c301010858
+01010500030e0500000005020202010302020503070008cb070001000881010108590101
+08c301010858010005000100030e000005030202010302020503070008cb070001000881
+01010859010108c30101085801010500030e0500000005020202010302020503070008cb
+07000100088101010859010108c301010858010005000100030e00000503020201030202
+0503070008cb07000100088101010859010108c30101085801010500030e050000000502
+020201030202050307cd01ff01ff010005000100030e00000503020201030202050301ff
+01ff01cf0500030e0500000005020202010302020503010000cb01010081010100590101
+00c301010058010005000100030e000005030202010302020503010000cb010100810101
+0059010100c30101005801010500030e0500000005020202010302020503010000cb0101
+00810101000c0100002a0100001f010100c301010058010005000100030e000005030202
+0103020205030100003d0100000a0100000a010000060102006a010100810101000b0100
+00040101000a010200030102000b010100020100001e010100c30101000a0101004b0101
+0500030e05000000050202020103020205030100003d0100000a0100000a010000080100
+006a010100810101000a0100000401000001010000080100000201000001010000020100
+000901000001010000020100001d010100c301010009010000010100004a010005000100
+030e00000503020201030202050301000008010100000100000201000002010000080100
+000001010003010200020101000001000003010200030101000001000008010400020102
+000201000000010100050100000301020063010100810101000901000005010000010100
+000c010000050100000901000001010000030100001c010100c301010009010000010100
+004a01010500030e05000000050202020103020205030100000801000000010000000100
+000101000002010000080101000101000001010000020100000101000000010000000100
+00010100000201000001010000010101000a010000030100000201000001010100010100
+0004010000020100000201000062010100810101000801000006010000010100000c0100
+00050100000901000001010000040100001b010100c301010009010000010100004a0100
+05000100030e000005030202010302020503010000080100000001000000010000020100
+000101000008010000020100000501000001010000000100000001000001010000020100
+0001010000020100000a0100000701000001010000020100000401000002010000020100
+0062010100810101000701000007010000010100000a010100040101000a010000010100
+00050100001a010100c301010009010000010100004a01010500030e0500000005020202
+010302020503010000080100000001000000010000020100000101000008010000020100
+00020103000101000000010000000100000101040001010000020100000a010000040103
+000101000002010000040100000201040062010100810101000801000006010000010100
+000c010000050100000901000001010000040100001b010100c301010009010000010100
+004a010005000100030e0000050302020103020205030100000801000000010000000100
+000301000000010000080100000201000001010000020100000101000000010000000100
+000101000005010000020100000a01000003010000020100000101000002010000040100
+000201000066010100810101000901000005010000010100000c01000005010000090100
+0001010000030100001c010100c301010009010000010100004a01010500030e05000000
+050202020103020205030100000801000000010000000100000301010009010000020100
+000101000002010000010100000001000000010000010100000201000001010000010101
+000a01000003010000020100000101010001010000040100000201000002010000620101
+00810101000a010000040100000101000003010100020100000201000001010000020100
+00030101000301000001010000020100001d010100c301010009010000010100004a0100
+05000100030e000005030202010302020503010000080100000001000000010000040100
+000901000002010000020103000101000000010000000100000201020003010100000100
+000b010100020103000101000000010100050100000301020063010100810101000b0100
+00040101000401010003010200030102000401010004010100020100001e010100c30101
+000a0101004b01010500030e050000000502020201030202050301000012010000010105
+002301050085010100810101000c0100002a0100001f010100c301010058010005000100
+030e0000050302020103020205030100000f01000000010000b801010081010100590101
+00c30101005801010500030e050000000502020201030202050301000010010000b90101
+008101010059010100c301010058010005000100030e0000050302020103020205030100
+00cb0101008101010059010100c30101005801010500030e050000000502020201030202
+0503010000cb0101008101010059010100c301010058010005000100030e000005030202
+010302020503010000cb0101008101010059010100c30101005801010500030e05000000
+05020202010302020503010000cb0101008101010059010100c301010058010005000100
+030e00000503020201030202050301ff01ff01cf0500030e050000000502020201030202
+050307cd01ff01ff010005000100030e000005030202010302020503070000cb07000100
+008101010059010100c30101005801010500030e05000000050202020103020205030700
+00cb07000100000b0101004e0101002201010059010100c301010058010005000100030e
+000005030202010302020503070000cb07000100000a0100001c0100002a010000080100
+00210101000c0100002a0100001f010100c30101005801010500030e0500000005020202
+0103020205030700001f0700000a070000060702009407000100000a0100000401020003
+0102000c010000040101000a010200030102000b0101000201000007010000210101000b
+010000040101000a010200030102000b010100020100001e010100c30101000a0101004b
+010005000100030e0000050302020103020205030700001f0700000a0700000807000094
+07000100000a010000030100000201000001010000020100000a01000004010000010100
+000801000002010000010100000201000009010000010100000201000006010000210101
+000a01000004010000010100000801000002010000010100000201000009010000010100
+00020100001d010100c301010009010000010100004a01010500030e0500000005020202
+010302020503070000080701000007000002070000020700000807040002070200020700
+000007010005070000030702008d07000100000a01000007010000050100000901000005
+010000010100000c01000005010000090100000101000003010000050100002101010009
+01000005010000010100000c010000050100000901000001010000030100001c010100c3
+01010009010000010100004a010005000100030e00000503020201030202050307000008
+070000000700000007000001070000020700000a07000003070000020700000107010001
+0700000407000002070000020700008c07000100000a0100000701000005010000080100
+0006010000010100000c0100000501000009010000010100000401000004010000210101
+000801000006010000010100000c010000050100000901000001010000040100001b0101
+00c301010009010000010100004a01010500030e05000000050202020103020205030700
+0008070000000700000007000002070000010700000a0700000707000001070000020700
+000407000002070000020700008c07000100000801010007010000050100000801000007
+010000010100000a010100040101000a0100000101000005010000040101001f01010007
+01000007010000010100000a010100040101000a01000001010000050100001a010100c3
+01010009010000010100004a010005000100030e00000503020201030202050307000008
+070000000700000007000002070000010700000a07000004070300010700000207000004
+070000020704008c07000100000a01000005010000050100000a01000006010000010100
+000c01000005010000090100000101000004010000040100002101010008010000060100
+00010100000c010000050100000901000001010000040100001b010100c3010100090100
+00010100004a01010500030e050000000502020201030202050307000008070000000700
+000007000003070000000700000a07000003070000020700000107000002070000040700
+00020700009007000100000a01000004010000050100000c01000005010000010100000c
+010000050100000901000001010000030100000501000021010100090100000501000001
+0100000c010000050100000901000001010000030100001c010100c30101000901000001
+0100004a010005000100030e000005030202010302020503070000080700000007000000
+070000030701000b07000003070000020700000107010001070000040700000207000002
+0700008c07000100000a0100000301000005010000070101000401000004010000010100
+000301010002010000020100000101000002010000030101000301000001010000020100
+0006010000210101000a0100000401000001010000030101000201000002010000010100
+0002010000030101000301000001010000020100001d010100c301010009010000010100
+004a01010500030e05000000050202020103020205030700000807000000070000000700
+00040700000c07010002070300010700000007010005070000030702008d07000100000a
+010000030104000101040003010100050100000401010004010100030102000301020004
+010100040101000201000007010000210101000b01000004010100040101000301020003
+0102000401010004010100020100001e010100c30101000a0101004b010005000100030e
+0000050302020103020205030700001207000001070500af07000100000a010000140100
+00060100002a01000008010000210101000c0100002a0100001f010100c3010100580101
+0500030e05000000050202020103020205030700000f07000000070000b807000100000b
+010100100101003b0101002201010059010100c301010058010005000100030e00000503
+020201030202050307000010070000b907000100008101010059010100c3010100580101
+0500030e0500000005020202010302020503070000cb07000100008101010059010100c3
+01010058010005000100030e000005030202010302020503070000cb0700010000810101
+0059010100c30101005801010500030e0500000005020202010302020503070000cb0700
+0100008101010059010100c301010058010005000100030e000005030202010302020503
+070000cb07000100008101010059010100c30101005801010500030e0500000005020202
+01030202050307cd01ff01ff010005000100030e00000503020201030202050307cd01ff
+01ff01010500000005000000050000000500000005000000050000000500000005000000
+0500000005020202010302020503070000cb07000100008101010059010100c301010058
+010005000100030000000500000005000000050000000500000005000000050000000500
+000005030202010302020503070000cb07000100000b0101004e01010022010100590101
+00c301010058010105000300050000000508010005000300050000000502020201030202
+0503070000cb07000100000a0100001c0100002a01000008010000210101000c0100002a
+0100001f010100c301010058010005000100030105000000050801000300000005030202
+010302020503070000cb07000100000a01000005010000040102000c010000040101000d
+010000020102000b0101000201000007010000210101000b010000040101000d01000002
+0102000b010100020100001e0101002001010018010000150100006f0101000a01000005
+010100040101003d01010500030100000508010003010500000005020202010302020503
+070000cb07000100000a0100000401010003010000020100000a01000004010000010100
+000b010100010100000201000009010000010100000201000006010000210101000a0100
+0004010000010100000b01010001010000020100000901000001010000020100001d0101
+001f0100001a010000150100006f01010009010100040100000101000002010000010100
+003c01000500010003020000050601000500030100000503020201030202050307000009
+070100000700000207020009070000000701000307020002070100000700000307020003
+0702008d07000100000a0100000301000000010000070100000901000005010000010100
+000a01000000010000050100000901000001010000030100000501000021010100090100
+0005010000010100000a01000000010000050100000901000001010000030100001c0101
+000901010000010000020102000b01000003010000000101000301020002010000000101
+000201040002010200020100000001010003010100000100006f01010008010000000100
+00040100000101000002010000010100003c010105000302050000000504010005000302
+050000000502020201030202050307000008070000010701000107000002070000080701
+000107000001070000020700000107000000070000000700000107000002070000010700
+00020700008c07000100000a010000050100000701000008010000060100000101000009
+010000010100000501000009010000010100000401000004010000210101000801000006
+010000010100000901000001010000050100000901000001010000040100001b01010008
+010000010101000101000002010000080104000101010001010000010100000201000001
+01010001010000030100000301000002010000010101000101000001010000010101006f
+0101000a010000040100000101000002010000010100003c010005000100030305000000
+0504010003020000050302020103020205030700000807000002070000010700000c0700
+000207000005070000010700000007000000070000010700000207000001070000900700
+010000080101000601000006010000080100000701000001010000080100000201000003
+0101000a0100000101000005010000040101001f01010007010000070100000101000008
+01000002010000030101000a01000001010000050100001a010100080100000201000001
+0100000e0100000301000005010000020100000101000002010000030100000301000002
+010000010100000201000001010000020100006f0101000a010000040100000101000002
+010000010100003c01010500030300000504010003030500000005020202010302020503
+070000080700000207000002070200090700000207000002070300010700000007000000
+07000001070400020702008d07000100000a01000005010000050100000a010000060100
+000101000008010000020100000501000009010000010100000401000004010000210101
+000801000006010000010100000801000002010000050100000901000001010000040100
+001b0101000801000002010000020102000b010000030100000501000002010000010100
+00020100000301000003010400010100000201000001010000020100006f0101000a0100
+00040100000101000002010000010100003c010005000100030400000502010005000303
+000005030202010302020503070000080700000207000005070000080700000207000001
+0700000207000001070000000700000007000001070000090700008c07000100000a0100
+0005010000040100000c0100000501000001010000080105000401000009010000010100
+000301000005010000210101000901000005010000010100000801050004010000090100
+0001010000030100001c0101000801000002010000050100000a01000003010000050100
+000201000001010000020100000301000003010000050100000201000001010000020100
+006f0101000a010000040100000101000002010000010100003c01010500030405000000
+050001000500030405000000050202020103020205030700000807000001070100010700
+000207000008070000020700000107000002070000010700000007000000070000010700
+000207000001070000020700008c07000100000a01000005010000030100000701010004
+010000040100000101000003010100060100000101000002010000030101000301000001
+0100000201000006010000210101000a0100000401000001010000030101000601000001
+01000002010000030101000301000001010000020100001d010100080100000101010001
+010000020100000a01000003010000050100000201000001010000020100000301000003
+01000002010000010100000201000001010000010101006f0101000a0100000401000001
+01000002010000010100003c010005000100030505000100050001000304000005030202
+010302020503070000090701000007000002070200090700000207000002070300010700
+00000700000007000002070200030702008d07000100000a010000030104000101040003
+010100050100000401010004010100060100000201020004010100040101000201000007
+010000210101000b01000004010100040101000601000002010200040101000401010002
+0100001e0101000901010000010000020102000b01000003010000060102000201000002
+0100000401010002010200020100000201000002010100000100006f0101000801040003
+010100040101003d01010500030500000500010003050500000005020202010302020503
+0700000c07000007070500af07000100000a01000014010000060100002a010000080100
+00210101000c0100002a0100001f0101000c01000007010500a701010058010005000100
+03060100050003050000050302020103020205030700000807000002070000bd07000100
+000b010100100101003b01010022010100590101000801000002010000b5010100580101
+0500030605000306050000000502020201030202050307000009070200be070001000081
+0101005901010009010200b6010100580100050001000500000005000000050000000500
+00000500000005000000050000000500000005030202010302020503070000cb07000100
+008101010059010100c30101005801010500000005000000050000000500000005000000
+050000000500000005000000050000000502020201030202050301000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005110202
+010302020502010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100051202020103020205030100030d05000300050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+0000030000000500030c050000000511020201030202050201000500030b000005000100
+030000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+0500000005000000050003000500000005000000030a0000051202020103020205030100
+03090500000005000100050003000500000005ff05ff05ac010003000000050000000500
+000005000308050000000511020201030202050201000500030700000500000005020100
+0300000005ff05ff05ac0100050003000500000005020000050000000306000005120202
+01030202050301000305050000000500000005020100050003000500000005ff05ff05ac
+010003000000050400000500000005000304050000000511020201030202050201000500
+0303000005000000050601000300000005ff05ff05ac0100050003000500000005060000
+050000000302000005120202010302020503010003010500000005000000050601000500
+03000500000005ff05ff05ac010003000000050800000500000005000300050000000511
+020201030202050201000500010005000100050a01000300000005ff05ff05ac01000500
+030005000000050801000500010005000000051202020103020205030100030105000100
+0500010005060100050003000500000005ff05ff05ac0100030000000508010005000100
+050003000500000005110202010302020502010005000303010005000100050601000300
+000005ff05ff05ac01000500030005000000050601000500010003020000051202020103
+0202050301000305050001000500010005020100050003000500000005ff05ff05ac0100
+030000000504010005000100050003040500000005110202010302020502010005000307
+010005000100050201000300000005ff05ff05ac01000500030005000000050201000500
+010003060000051202020103020205030100030905000100050001000500030005000000
+05ff05ff05ac010003000000050001000500010005000308050000000511020201030202
+050201000500030b01000500010003000000050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+01000500010005000100050001000500010005000100050003000500000005000100030a
+0000051202020101000405030100030d0500030005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+05000100050001000500010005000100050001000500010005000100030000000500030c
+050000000511000502020400050201000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005120000020204000000020204000503
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000051100000202040000000202040005ff05ff05e800000202040000000202
+040005ff05ff05e800000202040000000202040005ff05ff05e800000202040000000202
+0400000502ff02ff02dc00060202040000000208040002ff02ff02dc0000020804000000
+0208040002ff02ff02dc00000208040000000208040001ff01ff01dc0000020804000000
+040901ff01ff01dc00000409
+%%EndData
+end
+%%PageTrailer
+%%Trailer
+%%BoundingBox: 0 0 377 205
+%%EOF
diff --git a/lib/tv/doc/src/tv_start_system.gif b/lib/tv/doc/src/tv_start_system.gif
new file mode 100644
index 0000000000..3d9502b00c
--- /dev/null
+++ b/lib/tv/doc/src/tv_start_system.gif
Binary files differ
diff --git a/lib/tv/doc/src/tv_start_system.ps b/lib/tv/doc/src/tv_start_system.ps
new file mode 100644
index 0000000000..5c115328c5
--- /dev/null
+++ b/lib/tv/doc/src/tv_start_system.ps
@@ -0,0 +1,1330 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (ImageMagick)
+%%Title: (/clearcase/otp/erts/lib/tv/doc/src/tv_start_system.eps)
+%%CreationDate: (Mon Mar 19 17:15:27 2001)
+%%BoundingBox: 0 0 377 205
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 0
+%%EndComments
+
+%%BeginDefaults
+%%PageOrientation: Portrait
+%%EndDefaults
+
+%%BeginProlog
+%
+% Display a color image. The image is displayed in color on
+% Postscript viewers or printers that support color, otherwise
+% it is displayed as grayscale.
+%
+/buffer 512 string def
+/byte 1 string def
+/color_packet 3 string def
+/pixels 768 string def
+
+/DirectClassPacket
+{
+ %
+ % Get a DirectClass packet.
+ %
+ % Parameters:
+ % red.
+ % green.
+ % blue.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/DirectClassImage
+{
+ %
+ % Display a DirectClass image.
+ %
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { DirectClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayDirectClassPacket } image
+ } ifelse
+} bind def
+
+/GrayDirectClassPacket
+{
+ %
+ % Get a DirectClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % red
+ % green
+ % blue
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/GrayPseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassImage
+{
+ %
+ % Display a PseudoClass image.
+ %
+ % Parameters:
+ % class: 0-PseudoClass or 1-Grayscale.
+ %
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ class 0 gt
+ {
+ currentfile buffer readline pop
+ token pop /depth exch def pop
+ /grays columns 8 add depth sub depth mul 8 idiv string def
+ columns rows depth
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { currentfile grays readhexstring pop } image
+ }
+ {
+ %
+ % Parameters:
+ % colors: number of colors in the colormap.
+ % colormap: red, green, blue color packets.
+ %
+ currentfile buffer readline pop
+ token pop /colors exch def pop
+ /colors colors 3 mul def
+ /colormap colors string def
+ currentfile colormap readhexstring pop pop
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { PseudoClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayPseudoClassPacket } image
+ } ifelse
+ } ifelse
+} bind def
+
+/DisplayImage
+{
+ %
+ % Display a DirectClass or PseudoClass image.
+ %
+ % Parameters:
+ % x & y translation.
+ % x & y scale.
+ % label pointsize.
+ % image label.
+ % image columns & rows.
+ % class: 0-DirectClass or 1-PseudoClass.
+ % compression: 0-RunlengthEncodedCompression or 1-NoCompression.
+ % hex color packets.
+ %
+ gsave
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ x y translate
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ currentfile buffer readline pop
+ token pop /pointsize exch def pop
+ /Helvetica findfont pointsize scalefont setfont
+ x y scale
+ currentfile buffer readline pop
+ token pop /columns exch def
+ token pop /rows exch def pop
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ currentfile buffer readline pop
+ token pop /compression exch def pop
+ class 0 gt { PseudoClassImage } { DirectClassImage } ifelse
+ grestore
+} bind def
+%%EndProlog
+%%Page: 1 1
+%%PageBoundingBox: 0 0 377 205
+userdict begin
+%%BeginData:
+DisplayImage
+0 0
+377.000000 205.000000
+12
+755 410
+1
+0
+0
+16
+ffffff
+000000
+d8d8d8
+c2c2c2
+6b6b6b
+d9d9d9
+b22222
+828282
+aab6aa
+000000
+000000
+000000
+000000
+000000
+000000
+000000
+000a01ff01ff01dc000b0208040001ff01ff01dc00000208040000000208040002ff02ff
+02dc000002080400000002080400020000ff00ff00d90400020000000208040000000202
+04060200000004ff04ff04d9020000000405020204000000020204000209000d02ff02ff
+02d000000202040000000202040002080000020d040002f6010302110103023801010206
+0101024001010230010102ff020400000202040000000202040002080000020d040002f6
+010102020107020001010203010102010101020e0105020001070201010302070100020b
+01010206010102400101020c0104021e010102ff02040000020204000000020204000208
+0000020d040002f6010102050101020301010203010102010101020e0101020701010203
+01010201010102050101020b010102060101024e010102020101021d010102ff02040000
+0202040000000202040002080000020204060203040002f6010102050101020301010203
+010102010101020e01010207010102030101020801040201010302030101020001010203
+010102020103020301040206010302030101020001010207010102000101020101010203
+010302030101020201010200010102020101020101030202010102000101020101010203
+010302020101020001010201010102020103020201010202010102f30000020204000000
+04030208000002020400030400000203040002f601010205010102040101020201000202
+0101020e0101020701010203010202080101020201010201010102020102020001010202
+010102010101020101010201010102090101020101010202010202000101020601020200
+010202000101020101010201010102020101020201020200010102010101020001010200
+010102020102020001020200010102010101020101010201010102000101020101010201
+010102010101020101010202010102f3000004030101020b000002030400030200000204
+040002f6010102050101020401010201010102020101020e010402040101020401030206
+010102060101020201010201010102020101020101010201010102010102020801010201
+010102020101020101010206010102010101020101010205010102020101020201010201
+010102010101020001010200010102020101020101010201010102050101020101020203
+01010201010102010101020101010202010002f70103020b000002030400030200000204
+040002f6010102050101020501010200010002030101020e010102070101020601020205
+010102030104020201010201010102020101020101050202010302060101020101010202
+010102010101020601010201010102010101020201040202010102020101020101010201
+010102000101020001010202010102010101020101010202010402010101020401010201
+0105020201010200010102f70103020b000002040400030000000205040002f601010205
+01010205010302030101020e010102070101020701010205010102020101020101010202
+010102010101020201010201010102080102020501010201010102020101020101010206
+010102010101020101010201010102010101020201010202010102010101020101010201
+010102000101020101010201010102010101020101010201010102010101020401010201
+0101020601010200010002f80103020b000002040400030000000205040002f601010205
+01010206010102040101020e010102070101020301010201010102050101020201010201
+010102020101020101010202010102010101020201000205010102050101020101010202
+010102010101020601010201010102010101020101010201010102020101020201010201
+010102020101020701010201010102010101020101010201010102010101020401010201
+0101020201000203010202f80103020b0000020500000206040002f60101020501010206
+010102040101020e01050203010102040103020701020201010202000101020101040203
+010102020103020201040207010302030101020101010206010102010101020101010202
+010202000101020101010202010102010101020301050202010102010101020101010202
+0102020001010200010102040101020201030204010102f90103020b0000020d040002f6
+01030211010302c4010102fa0103020b0000020d040002ff02d5010102fa0103020b0000
+020d040002ff02ff02d20103020c040d02ff02ff02d3010302ff02ff02ee010302ff02ff
+02ee0103020200ff00ff00e70400020201030202000004ff04ff04e70202010302ff02ff
+02ee0103020200ff00ff00e802020103020200ff00ff00e70700020201030202000105ff
+05ff05e40701020201030202000105ff05ff05e40701020201030202000105ff05ff05e4
+0701020201030202000105ff05ff05e40701020201030202000105ff05ff05e407010202
+010302020001050b06040504060005030602051f0600050206000504060005270602050b
+06000506060005ff05ff053506000502060005090602051307010202010302020001050b
+0600050f0600051f060005020600052c060005020600050a060005ff05ff053d06000502
+0600050b0600051307010202010302020001050b06000506060205050600050306020518
+060005020600050206020503060205020600050206000517060005020600050106000500
+060105020604050206020503060205020600050006010503060205ff05ff052006000502
+060005020602050506000502060005000601050c07010202010302020001050b06000508
+060005050600050206000502060005180600050006000505060005020600050206000501
+060005020600051706000502060005010601050106000503060005060600050206000502
+06000501060105010600050106000502060005ff05ff051f060005020600050106000502
+0600050406000502060105010600050b07010202010302020001050b0603050506000505
+060005020600050206000518060005000600050506000502060005020600050106000500
+060005000600051706000502060005010600050206000503060005060600050206000502
+060005010600050206000501060005ff05ff052306040501060005020600050406000502
+060005020600050b07010202010302020001050b06000508060005050600050206040518
+060005000600050506000502060405010600050006000500060005170600050206000501
+0600050206000503060005060600050206000502060005010600050206000502060205ff
+05ff052006000502060005010604050406000502060005020600050b0701020201030202
+0001050b0600050806000505060005020600051d06000506060005020600050506000500
+060005000600051706000502060005010600050206000503060005060600050206000502
+060005010600050206000505060005ff05ff051f06000502060005010600050806000502
+060005020600050b07010202010302020001050b06000508060005050600050206000502
+060005190600050606000502060005020600050106000500060005000600051706000502
+060005010601050106000503060005060600050206000502060005010600050206000501
+06000502060005ff05ff051f060005020600050106000502060005040600050206010501
+0600050b07010202010302020001050b0600050806000505060005030602051a06000506
+060005030602050306000500060005190602050206000500060105050601050406000503
+060205020600050206000502060205ff05ff052006000502060005020602050506000502
+060005000601050c070102020103020200010576060005ff05ff055b0600050f07010202
+010302020001050a0606052a0606052a06060500060005ff05ff05450606050e0600050f
+07010202010302020001050a0606052a0606052a06060500060005ff05ff05450606050e
+0600050f0701020201030202000105ff05ff05e40701020201030202000105ff05ff05e4
+0701020201030202000105ff05ff05e40701020201030202000107ff07ff07e602020103
+0202000007ff07ff07e702020103020205ff05ff05e802020103020205ff05ff05e80202
+0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
+0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
+0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
+0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
+0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
+0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
+0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
+0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
+0103020205ff05ff05e802020103020205ff05ff05e8020201030202051c010205040103
+05c1010205040103051a0102057f01010505010205f001020504010305190101052f0202
+01030202050e01060508010005060101050f010205010102059b01060508010005060101
+0510010505040101054d010205240104050d0101051e0102052401020501010205930106
+0508010005060101051101030535020201030202050e0100050101010500010005070101
+050601000511010105010100059d01000501010105000100050701010506010005130101
+05060100054d0101050001010524010105000101050c0100051e01010500010105240101
+050101000595010005010101050001000507010105060100051101010501010105340202
+010302020510010105030103050201030503010105030103050801020500010105010103
+05000101050001000500010005020103058b010105030103050201030503010105030103
+050a010105030104054c0101050101050500010305000102050201030501010105000102
+05070101050101010500010305030104051d010105010105050001030500010205020103
+050101010500010205070102050001010501010305000101050001000500010005020103
+058301010503010305020103050301010503010305090101050101000500010305020105
+050101030521020201030202051001010506010105000101050101010502010105020101
+0501010105070100050001000500010005050101050001050500010105010101058a0101
+050601010500010105010101050201010502010105010101050901010502010105010101
+054c01000502010105000101050201000500010205000101050001010501010105010102
+050001000507010105010101050201010502010105010101051d01000502010105000101
+050201000500010205000101050001010501010105010102050001000507010005000100
+050001000505010105000105050001010501010105820101050601010500010105010101
+050201010502010105010101050801020504010105020101050001010501010105010101
+052002020103020205100100050401040500010105010101050201010501010605070100
+0500010205020104050001010500010005000107058a0100050401040500010105010101
+0502010105010106050901010501010105020101054b0101050201000501010105000100
+05000100050001010501010805010101050a0103050401010501010105020101051c0101
+05020100050101010500010005000100050001010501010805010101050a010005000102
+050201040500010105000100050001070582010005040104050001010501010105020101
+05010106050901020503010105040101050101060520020201030202050f010105020101
+0501010105000101050201010501010105020101050b0101050001010501010105010101
+05010100050001000500010005000101058e010105020101050101010500010105020101
+0501010105020101050d01010502010105010101054c0101050101010501010205000100
+05010100050201000500010105050101050a0101050601010502010105010101051d0101
+05010101050101020500010005010100050201000500010105050101050a010105000101
+050101010501010105010100050001000500010005000101058601010502010105010101
+05000101050201010501010105020101050b010105010101050201010503010105030101
+0525020201030202050f0101050201010501010105000101050101010502010105020101
+050101010507010005010101050101010501010105000101050001000500010005000101
+05010101058a010105020101050101010500010105010101050201010502010105010101
+050901010502010105010101054c01010500010105020103050101010501010105000101
+0501010105010101050a0101050601010502010105010101051d01010500010105020103
+0501010105010101050001010501010105010101050a0100050101010501010105010101
+050001010500010005000100050001010501010105820101050201010501010105000101
+050101010502010105020101050101010507010105010101050201010502010205000101
+05000101050101010521020201030202050e01030502010a050101050501010305070102
+0500010105020107050001000500010105000103058a01030502010a0501010505010103
+0508010505010105054c0102050301010500010005000103050001020500010305010104
+050701030503010505010105051d01020503010105000100050001030500010205000103
+05010104050701020500010105020107050001000500010105000103058201030502010a
+050101050501010305090103050101050500010505010103052202020103020205ff05ff
+05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff
+05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff
+05e8020201030202050201ff01ff01e205020202010302020503010000cb010100810101
+0059010100c30101005801000711000005020202010302020503010000cb010100810101
+0059010100c30101005801000701030607000306000105020202010302020503010000cb
+010100810101000c0100002301000026010100c301010058010007010305000007000306
+0001050202020103020205030100001f0100000a0100009e010100810101000b01000004
+010100090104000a01010002010000250101001e0102000501000012010000060100002e
+010000120102000301020031010100080104004a01000701030500000701030500010502
+02020103020205030100001f0100000a0100009e010100810101000a0100000401000001
+010000080100000d01000001010000020100002401010020010000190100003601000014
+010000050100003101010008010000020100004a01000701030400010701030500010502
+02020103020205030100000901020003010200090104000201020002010000000101009b
+01010081010100090100000501000001010000080100000d010000010100000301000023
+010100090102000201000000010100020100000001010005010000030102000301020003
+01020002010400020102000301020002010000000101000a010200030102000201000000
+010100020104000101000000010100030102000501000005010000030102000201000000
+010100230101000c0100004a010007010304000105000701030400010502020201030202
+0503010000080100000201000001010000020100000a0100000301000002010000010101
+00010100009a01010081010100080100000601000001010000080103000a010000010100
+000401000022010100080100000201000001010100010100000101010001010000040100
+000501000002010000020100000101000002010000030100000601000002010000020100
+000101010001010000080100000201000001010000020100000101010001010000030100
+000301010001010000010100000201000004010000050100000201000002010000010101
+0001010000220101000b0100004b01000701030300010501070103040001050202020103
+020205030100000c010000010100000e0100000701000001010000020100009a01010081
+0101000701000007010000010100000c010000090100000101000005010000210101000c
+010000010100000201000001010000020100000401000005010000020100000901000003
+010000060100000201000002010000010100000201000008010000050100000201000001
+010000020100000301000003010000050100000201000004010000050100000201000002
+01000001010000260101000b0100004b0100070103030001050207010303000105020202
+01030202050301000009010300010100000e0100000401030001010000020100009a0101
+00810101000801000006010000010100000c010000090100000101000004010000220101
+000901030001010000020100000101000002010000040100000501000002010000060103
+000301000006010000020100000201000001010000020100000801000005010000020100
+000101000002010000030100000301000005010000020100000401000005010000020104
+0001010000260101000b0100004b01000701030200010503070103030001050202020103
+020205030100000801000002010000010100000e01000003010000020100000101000002
+0100009a0101008101010009010000050100000101000008010000020100000901000001
+010000030100002301010008010000020100000101000002010000010100000201000004
+010000050100000201000005010000020100000301000006010000020100000201000001
+010000020100000801000005010000020100000101000002010000030100000301000005
+0100000201000004010000050100000201000005010000260101000a0100004c01000701
+030200010504070103020001050202020103020205030100000801000002010000010100
+00020100000a010000030100000201000001010100010100009a010100810101000a0100
+000401000001010000030101000201000002010000030101000301000001010000020100
+002401010008010000020100000101010001010000010101000101000004010000050100
+000201000002010000010100000201000003010000060100000201000002010000010100
+000201000008010000020100000101000002010000010100000201000003010000030100
+0005010000020100000401000005010000020100000201000001010000260101000a0100
+004c01000701030100010505070103020001050202020103020205030100000901030002
+0102000c0101000201030001010000000101009b010100810101000b0100000401010004
+010100030102000401010004010100020100002501010009010300010100000001010002
+010000000101000501000005010000030102000301030004010100040100000301020002
+010000020100000901020003010200020100000201000004010100010100000601020005
+010000050100000301020002010000260101000a0100004c010007010301000105060701
+030100010502020201030202050301000015010500af010100810101000c010000230100
+00260101000f010000050100003c01050068010100580100070103000001050707010301
+000105020202010302020503010000cb01010081010100590101000f01000005010000ab
+010100580100070103000001050807010300000105020202010302020503010000cb0101
+0081010100590101000f01000005010000ab01010058010007010001070b030000010502
+0202010302020503010000cb0101008101010059010100c301010058010007010000070d
+000105020202010302020503010000cb0101008101010059010100c30101005801000701
+030e000105020202010302020503010000cb0101008101010059010100c3010100580100
+0701001005020202010302020503010000cb0101008101010059010100c3010100580100
+0701000d070000010502020201030202050301ff01ff01ce07010001050a070100010502
+020201030202050301ff01ff01ce07010001050a07010001050202020103020205030100
+00cb0101008101010059010100c301010058010007010001050a07010001050202020103
+02020503010000cb0101008101010059010100c301010058010007010001050a07010001
+05020202010302020503010000cb010100810101000c0100002a0100001f010100c30101
+0058010007010001050a070100010502020201030202050301000010010200090100000d
+0102000a010200100100007b010100810101000b010000040101000b010000050100000c
+010100020100001e01010010010200090100000d010200930101000a0101004b01000701
+0001050a070100010502020201030202050301000012010000090100000f0100000c0100
+00100100007b010100810101000a010000040100000101000009010100040101000b0100
+0001010000020100001d01010012010000090100000f0100009301010009010000010100
+004a010007010001050a0701000105020202010302020503010000090101000001000004
+01000003010200020100000001010003010200050100000c010000030102000301020002
+010000010100000301020071010100810101000901000005010000010100000801000000
+01000003010000000100000b01000001010000030100001c010100090101000001000004
+010000030102000201000000010100030102000501000009010000000101000301020002
+01010000010000030102000a010200030102000201000000010100020100000201000002
+01020002010000000101003f01010009010000010100004a010007010001050a07010001
+050202020103020205030100000801000001010100040100000201000002010000010101
+00010100000101000002010000040100000c010000020100000201000001010000020100
+000101000000010000030100000201000070010100810101000801000006010000010100
+000a010000050100000b01000001010000040100001b0101000801000001010100040100
+000201000002010000010101000101000001010000020100000401000009010100010100
+000101000002010000010100000001000000010000010100000201000008010000020100
+000101000002010000010101000101000001010000020100000101000002010000010101
+00010100003e01010009010000010100004a010007010001050a07010001050202020103
+020205030100000801000002010000040100000201000002010000010100000201000005
+010000040100000c01000002010000020100000101000005010100040100007401010081
+0101000701000007010000010100000a010000050100000b01000001010000050100001a
+010100080100000201000004010000020100000201000001010000020100000501000004
+010000090100000201000005010000010100000001000000010000010100000201000008
+010000050100000201000001010000050100000201000001010000020100000101000042
+01010009010000010100004a010007010001050a07010001050202020103020205030100
+000801000002010000040100000201000002010000010100000201000002010300040100
+000c01000002010000020100000101000005010100050102007101010081010100080100
+0006010000010100000a010000050100000b01000001010000040100001b010100080100
+000201000004010000020100000201000001010000020100000201030004010000090100
+000201000002010300010100000001000000010000010104000901020002010400010100
+00060100000001000002010400010100004201010009010000010100004a010007010001
+050a07010001050202020103020205030100000801000002010000040100000201000002
+01000001010000020100000101000002010000040100000c010000020100000201000001
+01000005010000000100000701000070010100810101000901000005010000010100000a
+010000050100000b01000001010000030100001c01010008010000020100000401000002
+010000020100000101000002010000010100000201000004010000090100000201000001
+010000020100000101000000010000000100000101000010010000010100000501000006
+0100000001000002010000050100004201010009010000010100004a010007010001050a
+070100010502020201030202050301000008010000010101000401000002010000020100
+0001010100010100000101000002010000040100000c0100000201000002010000010100
+00020100000101000001010000020100000201000070010100810101000a010000040100
+0001010000030101000401000005010000050101000301000001010000020100001d0101
+000801000001010100040100000201000002010000010101000101000001010000020100
+000401000009010000020100000101000002010000010100000001000000010000010100
+000201000008010000020100000101000002010000010100000701000003010000020100
+00010100004201010009010000010100004a010007010001050a07010001050202020103
+020205030100000901010000010000040100000301020002010000000101000301030004
+0100000c010000030102000301020002010000020100000201020071010100810101000b
+010000040101000401010002010400010104000301010004010100020100001e01010009
+010100000100000401000003010200020100000001010003010300040100000901000002
+01000002010300010100000001000000010000020102000a010200030102000201000007
+0100000401020002010000420101000a0101004b010007010001050a0701000105020202
+0103020205030100000c0100002301050093010100810101000c0100002a0100001f0101
+000c010000230105001c0105006801010058010007010001050a07010001050202020103
+020205030100000801000002010000bd01010081010100590101000801000002010000b5
+01010058010007010001050a070100010502020201030202050301000009010200be0101
+00810101005901010009010200b601010058010007010001050a07010001050202020103
+02020503010000cb0101008101010059010100c301010058010007010001050a07010001
+05020202010302020503010000cb0101008101010059010100c301010058010007010001
+050a0701000105020202010302020503010000cb0101008101010059010100c301010058
+010007010001050a0701000105020202010302020503010000cb01010081010100590101
+00c301010058010007010001050a070100010502020201030202050301ff01ff01ce0701
+0001050a070100010502020201030202050301ff01ff01ce07010001050a070100010502
+0202010302020503010000cb0101008101010059010100c301010058010007010001050a
+0701000105020202010302020503010000cb0101008101010059010100c3010100580100
+07010001050a0701000105020202010302020503010000cb010100810101000c0100002a
+0100001f010100c301010058010007010001050a07010001050202020103020205030100
+0010010200090100000d0102009b010100810101000b010000040101000b010000050100
+000c010100020100001e01010010010200090100000d010200930101000a0101004b0100
+07010001050a070100010502020201030202050301000012010000090100000f0100009b
+010100810101000a010000040100000101000009010100040101000b0100000101000002
+0100001d01010012010000090100000f0100009301010009010000010100004a01000701
+0001050a0701000105020202010302020503010000090101000001000004010000030102
+000201000000010100030102000501000009010000000101000301020002010100000100
+000301020003010200710101008101010009010000050100000101000008010000000100
+0003010000000100000b01000001010000030100001c0101000901010000010000040100
+000301020002010000000101000301020005010000090100000001010003010200020101
+0000010000030102000a0102000301020002010000000101000201000002010000020102
+0002010000000101003f01010009010000010100004a010007010001050a070100010502
+020201030202050301000008010000010101000401000002010000020100000101010001
+010000010100000201000004010000090101000101000001010000020100000101000000
+010000000100000101000002010000010100000201000070010100810101000801000006
+010000010100000a010000050100000b01000001010000040100001b0101000801000001
+010100040100000201000002010000010101000101000001010000020100000401000009
+010100010100000101000002010000010100000001000000010000010100000201000008
+010000020100000101000002010000010101000101000001010000020100000101000002
+01000001010100010100003e01010009010000010100004a010007010001050a07010001
+050202020103020205030100000801000002010000040100000201000002010000010100
+000201000005010000040100000901000002010000050100000101000000010000000100
+0001010000020100000101000074010100810101000701000007010000010100000a0100
+00050100000b01000001010000050100001a010100080100000201000004010000020100
+000201000001010000020100000501000004010000090100000201000005010000010100
+000001000000010000010100000201000008010000050100000201000001010000050100
+00020100000101000002010000010100004201010009010000010100004a010007010001
+050a07010001050202020103020205030100000801000002010000040100000201000002
+010000010100000201000002010300040100000901000002010000020103000101000000
+01000000010000010104000201020071010100810101000801000006010000010100000a
+010000050100000b01000001010000040100001b01010008010000020100000401000002
+010000020100000101000002010000020103000401000009010000020100000201030001
+010000000100000001000001010400090102000201040001010000060100000001000002
+010400010100004201010009010000010100004a010007010001050a0701000105020202
+010302020503010000080100000201000004010000020100000201000001010000020100
+000101000002010000040100000901000002010000010100000201000001010000000100
+0000010000010100000901000070010100810101000901000005010000010100000a0100
+00050100000b01000001010000030100001c010100080100000201000004010000020100
+000201000001010000020100000101000002010000040100000901000002010000010100
+000201000001010000000100000001000001010000100100000101000005010000060100
+000001000002010000050100004201010009010000010100004a010007010001050a0701
+000105020202010302020503010000080100000101010004010000020100000201000001
+010100010100000101000002010000040100000901000002010000010100000201000001
+01000000010000000100000101000002010000010100000201000070010100810101000a
+010000040100000101000003010100040100000501000005010100030100000101000002
+0100001d0101000801000001010100040100000201000002010000010101000101000001
+010000020100000401000009010000020100000101000002010000010100000001000000
+010000010100000201000008010000020100000101000002010000010100000701000003
+01000002010000010100004201010009010000010100004a010007010001050a07010001
+050202020103020205030100000901010000010000040100000301020002010000000101
+000301030004010000090100000201000002010300010100000001000000010000020102
+000301020071010100810101000b01000004010100040101000201040001010400030101
+0004010100020100001e0101000901010000010000040100000301020002010000000101
+000301030004010000090100000201000002010300010100000001000000010000020102
+000a0102000301020002010000070100000401020002010000420101000a0101004b0100
+07010001050a07010001050202020103020205030100000c010000230105009301010081
+0101000c0100002a0100001f0101000c010000230105001c010500680101005801000701
+0001050a07010001050202020103020205030100000801000002010000bd010100810101
+00590101000801000002010000b501010058010007010001050a07010001050202020103
+0202050301000009010200be010100810101005901010009010200b60101005801000701
+0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
+0058010007010001050a0701000105020202010302020503010000cb0101008101010059
+010100c301010058010007010001050a0701000105020202010302020503010000cb0101
+008101010059010100c301010058010007010001050a0701000105020202010302020503
+010000cb0101008101010059010100c301010058010007010001050a0701000105020202
+01030202050301ff01ff01ce07010001050a070100010502020201030202050301ff01ff
+01ce07010001050a0701000105020202010302020503010000cb01010081010100590101
+00c301010058010007010001050a0701000105020202010302020503010000cb01010081
+01010059010100c301010058010007010001050a07010001050202020103020205030100
+00cb010100810101000c0100002a0100001f010100c301010058010007010001050a0701
+00010502020201030202050301000010010200090100000d010200430100005601010081
+0101000b010000040101000b010000050100000c010100020100001e0101001001020009
+0100000d010200930101000a0101004b010007010001050a070100010502020201030202
+050301000012010000090100000f0100004301000056010100810101000a010000040100
+000101000009010100040101000b01000001010000020100001d01010012010000090100
+000f0100009301010009010000010100004a010007010001050a07010001050202020103
+020205030100000901010000010000040100000301020002010000000101000301020005
+010000090100000001010003010200020101000001000003010200030102000a01020002
+010000020100000101040054010100810101000901000005010000010100000801000000
+01000003010000000100000b01000001010000030100001c010100090101000001000004
+010000030102000201000000010100030102000501000009010000000101000301020002
+01010000010000030102000a010200030102000201000000010100020100000201000002
+01020002010000000101003f01010009010000010100004a010007010001050a07010001
+050202020103020205030100000801000001010100040100000201000002010000010101
+000101000001010000020100000401000009010100010100000101000002010000010100
+000001000000010000010100000201000001010000020100000801000002010000010100
+00020100000301000056010100810101000801000006010000010100000a010000050100
+000b01000001010000040100001b01010008010000010101000401000002010000020100
+000101010001010000010100000201000004010000090101000101000001010000020100
+000101000000010000000100000101000002010000080100000201000001010000020100
+0001010100010100000101000002010000010100000201000001010100010100003e0101
+0009010000010100004a010007010001050a070100010502020201030202050301000008
+010000020100000401000002010000020100000101000002010000050100000401000009
+01000002010000050100000101000000010000000100000101000002010000010100000c
+010000020100000201000000010000040100005601010081010100070100000701000001
+0100000a010000050100000b01000001010000050100001a010100080100000201000004
+010000020100000201000001010000020100000501000004010000090100000201000005
+010000010100000001000000010000010100000201000008010000050100000201000001
+01000005010000020100000101000002010000010100004201010009010000010100004a
+010007010001050a07010001050202020103020205030100000801000002010000040100
+000201000002010000010100000201000002010300040100000901000002010000020103
+000101000000010000000100000101040002010200090104000301000005010000560101
+00810101000801000006010000010100000a010000050100000b01000001010000040100
+001b01010008010000020100000401000002010000020100000101000002010000020103
+000401000009010000020100000201030001010000000100000001000001010400090102
+000201040001010000060100000001000002010400010100004201010009010000010100
+004a010007010001050a0701000105020202010302020503010000080100000201000004
+010000020100000201000001010000020100000101000002010000040100000901000002
+010000010100000201000001010000000100000001000001010000090100000801000006
+010000000100000401000056010100810101000901000005010000010100000a01000005
+0100000b01000001010000030100001c0101000801000002010000040100000201000002
+010000010100000201000001010000020100000401000009010000020100000101000002
+010000010100000001000000010000010100001001000001010000050100000601000000
+01000002010000050100004201010009010000010100004a010007010001050a07010001
+050202020103020205030100000801000001010100040100000201000002010000010101
+000101000001010000020100000401000009010000020100000101000002010000010100
+000001000000010000010100000201000001010000020100000801000002010000010100
+00020100000301000056010100810101000a010000040100000101000003010100040100
+0005010000050101000301000001010000020100001d0101000801000001010100040100
+000201000002010000010101000101000001010000020100000401000009010000020100
+000101000002010000010100000001000000010000010100000201000008010000020100
+000101000002010000010100000701000003010000020100000101000042010100090100
+00010100004a010007010001050a07010001050202020103020205030100000901010000
+010000040100000301020002010000000101000301030004010000090100000201000002
+01030001010000000100000001000002010200030102000a010200020100000201000004
+01010054010100810101000b010000040101000401010002010400010104000301010004
+010100020100001e01010009010100000100000401000003010200020100000001010003
+01030004010000090100000201000002010300010100000001000000010000020102000a
+0102000301020002010000070100000401020002010000420101000a0101004b01000701
+0001050a07010001050202020103020205030100000c0100002301050023010500690101
+00810101000c0100002a0100001f0101000c010000230105001c01050068010100580100
+07010001050a07010001050202020103020205030100000801000002010000bd01010081
+010100590101000801000002010000b501010058010007010001050a0701000105020202
+01030202050301000009010200be010100810101005901010009010200b6010100580100
+07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
+01010058010007010001050a0701000105020202010302020503010000cb010100810101
+0059010100c301010058010007010001050a0701000105020202010302020503010000cb
+0101008101010059010100c301010058010007010001050a070100010502020201030202
+0503010000cb0101008101010059010100c301010058010007010001050a070100010502
+020201030202050301ff01ff01ce07010001050a070100010502020201030202050308cd
+01ff01ff010007010001050a0701000105020202010302020503080000cb080001000081
+01010059010100c301010058010007010001050a07010001050202020103020205030800
+00cb08000100000b0101004e0101002201010059010100c301010058010007010001050a
+0701000105020202010302020503080000cb08000100000a0100001c0100002a01000008
+010000210101000c0100002a0100001f010100c301010058010007010001050a07010001
+05020202010302020503080000cb08000100000a01000005010000040102000c01000004
+0101000d010000020102000b0101000201000007010000210101000b010000040101000d
+010000020102000b010100020100001e0101002001010018010000150100006f01010008
+0104000301010044010007010001050a0701000105020202010302020503080000cb0800
+0100000a0100000401010003010000020100000a01000004010000010100000b01010001
+0100000201000009010000010100000201000006010000210101000a0100000401000001
+0100000b01010001010000020100000901000001010000020100001d0101001f0100001a
+010000150100006f0101000801000002010000020100000101000043010007010001050a
+070100010502020201030202050308000009080100000800000208020009080000000801
+0003080200020801000008000003080200030802008d08000100000a0100000301000000
+010000070100000901000005010000010100000a01000000010000050100000901000001
+0100000301000005010000210101000901000005010000010100000a0100000001000005
+0100000901000001010000030100001c0101000901010000010000020102000b01000003
+010000000101000301020002010000000101000201040002010200020100000001010003
+010100000100006f0101000c010000020100000101000043010007010001050a07010001
+050202020103020205030800000808000001080100010800000208000008080100010800
+000108000002080000010800000008000000080000010800000208000001080000020800
+008c08000100000a01000005010000070100000801000006010000010100000901000001
+010000050100000901000001010000040100000401000021010100080100000601000001
+0100000901000001010000050100000901000001010000040100001b0101000801000001
+010100010100000201000008010400010101000101000001010000020100000101010001
+010000030100000301000002010000010101000101000001010000010101006f0101000b
+010000030100000101000043010007010001050a07010001050202020103020205030800
+000808000002080000010800000c08000002080000050800000108000000080000000800
+000108000002080000010800009008000100000801010006010000060100000801000007
+010000010100000801000002010000030101000a0100000101000005010000040101001f
+0101000701000007010000010100000801000002010000030101000a0100000101000005
+0100001a0101000801000002010000010100000e01000003010000050100000201000001
+01000002010000030100000301000002010000010100000201000001010000020100006f
+0101000b010000030100000101000043010007010001050a070100010502020201030202
+050308000008080000020800000208020009080000020800000208030001080000000800
+000008000001080400020802008d08000100000a01000005010000050100000a01000006
+010000010100000801000002010000050100000901000001010000040100000401000021
+010100080100000601000001010000080100000201000005010000090100000101000004
+0100001b0101000801000002010000020102000b01000003010000050100000201000001
+010000020100000301000003010400010100000201000001010000020100006f0101000b
+010000030100000101000043010007010001050a07010001050202020103020205030800
+000808000002080000050800000808000002080000010800000208000001080000000800
+000008000001080000090800008c08000100000a01000005010000040100000c01000005
+010000010100000801050004010000090100000101000003010000050100002101010009
+010000050100000101000008010500040100000901000001010000030100001c01010008
+01000002010000050100000a010000030100000501000002010000010100000201000003
+01000003010000050100000201000001010000020100006f0101000a0100000401000001
+01000043010007010001050a070100010502020201030202050308000008080000010801
+000108000002080000080800000208000001080000020800000108000000080000000800
+00010800000208000001080000020800008c08000100000a010000050100000301000007
+010100040100000401000001010000030101000601000001010000020100000301010003
+010000010100000201000006010000210101000a01000004010000010100000301010006
+0100000101000002010000030101000301000001010000020100001d0101000801000001
+01010001010000020100000a010000030100000501000002010000010100000201000003
+0100000301000002010000010100000201000001010000010101006f0101000a01000004
+0100000101000043010007010001050a0701000105020202010302020503080000090801
+000008000002080200090800000208000002080300010800000008000000080000020802
+00030802008d08000100000a010000030104000101040003010100050100000401010004
+010100060100000201020004010100040101000201000007010000210101000b01000004
+0101000401010006010000020102000401010004010100020100001e0101000901010000
+010000020102000b01000003010000060102000201000002010000040101000201020002
+0100000201000002010100000100006f0101000a0100000501010044010007010001050a
+07010001050202020103020205030800000c08000007080500af08000100000a01000014
+010000060100002a01000008010000210101000c0100002a0100001f0101000c01000007
+010500a701010058010007010001050a0701000105020202010302020503080000080800
+0002080000bd08000100000b010100100101003b01010022010100590101000801000002
+010000b501010058010007010001050a0701000105020202010302020503080000090802
+00be0800010000810101005901010009010200b601010058010007010001050a07010001
+05020202010302020503080000cb08000100008101010059010100c30101005801000701
+0001050a0701000105020202010302020503080000cb08000100008101010059010100c3
+01010058010007010001050a0701000105020202010302020503080000cb080001000081
+01010059010100c301010058010007010001050a07010001050202020103020205030800
+00cb08000100008101010059010100c301010058010007010001050a0701000105020202
+01030202050308cd01ff01ff010007010001050a070100010502020201030202050308cd
+01ff01ff010007010001050a0701000105020202010302020503080000cb080001000081
+01010059010100c301010058010007010001050a07010001050202020103020205030800
+00cb08000100000b0101004e0101002201010059010100c301010058010007010001050a
+0701000105020202010302020503080000cb08000100000a0100001c0100002a01000008
+010000210101000c0100002a0100001f010100c301010058010007010001050a07010001
+05020202010302020503080000110800000308000010080000010800009e08000100000a
+01000005010000040102000c010000040101000d010000050100000a0101000201000007
+010000210101000b010000040101000d010000050100000a010100020100001e010100c3
+0101000a0100000401020044010007010001050a07010001050202020103020205030800
+00110800000308000010080000010800009e08000100000a010000040101000301000002
+0100000a01000004010000010100000b0101000401010009010000010100000201000006
+010000210101000a01000004010000010100000b01010004010100090100000101000002
+0100001d010100c301010009010100030100000201000043010007010001050a07010001
+0502020201030202050308000009080100000800000108040001080000010800000a0801
+000008000001080000000801009b08000100000a01000003010000000100000701000009
+01000005010000010100000a010000000100000301000000010000090100000101000003
+01000005010000210101000901000005010000010100000a010000000100000301000000
+0100000901000001010000030100001c010100c301010008010000000100000301000002
+01000043010007010001050a070100010502020201030202050308000008080000010801
+000308000003080000000800000a0800000108010001080100010800009a08000100000a
+010000050100000701000008010000060100000101000009010000010100000201000001
+010000090100000101000004010000040100002101010008010000060100000101000009
+0100000101000002010000010100000901000001010000040100001b010100c30101000a
+010000030100000201000043010007010001050a07010001050202020103020205030800
+00080800000208000003080000030801000b0800000208000001080000020800009a0800
+010000080101000601000005010100080100000701000001010000080100000201000001
+01000002010000090100000101000005010000040101001f010100070100000701000001
+010000080100000201000001010000020100000901000001010000050100001a010100c3
+0101000a0100000401030043010007010001050a07010001050202020103020205030800
+00080800000208000003080000030801000b0800000208000001080000020800009a0800
+0100000a0100000501000007010000080100000601000001010000080100000201000001
+010000020100000901000001010000040100000401000021010100080100000601000001
+010000080100000201000001010000020100000901000001010000040100001b010100c3
+0101000a0100000701000043010007010001050a07010001050202020103020205030800
+0008080000020800000308000003080000000800000a0800000208000001080000020800
+009a08000100000a01000005010000070100000901000005010000010100000801050000
+010500080100000101000003010000050100002101010009010000050100000101000008
+010500000105000801000001010000030100001c010100c30101000a0100000701000043
+010007010001050a07010001050202020103020205030800000808000001080100030800
+000308000001080000090800000108010001080100010800009a08000100000a01000005
+010000030100000201000003010100040100000401000001010000030101000601000005
+0100000301010003010000010100000201000006010000210101000a0100000401000001
+010000030101000601000005010000030101000301000001010000020100001d010100c3
+0101000a010000030100000201000043010007010001050a070100010502020201030202
+050308000009080100000800000408010001080000020800000908010000080000010800
+00000801009b08000100000a010000030104000201020004010100050100000401010004
+010100060100000501000003010100040101000201000007010000210101000b01000004
+0101000401010006010000050100000301010004010100020100001e010100c301010008
+0104000201020044010007010001050a07010001050202020103020205030800000c0800
+000e080500a808000100000a01000014010000060100002a01000008010000210101000c
+0100002a0100001f010100c301010058010007010001050a070100010502020201030202
+05030800000808000002080000bd08000100000b010100100101003b0101002201010059
+010100c301010058010007010001050a0701000105020202010302020503080000090802
+00be08000100008101010059010100c301010058010007010001050a0701000105020202
+010302020503080000cb08000100008101010059010100c301010058010007010001050a
+0701000105020202010302020503080000cb08000100008101010059010100c301010058
+010007010001050a0701000105020202010302020503080000cb08000100008101010059
+010100c301010058010007010001050a0701000105020202010302020503080000cb0800
+0100008101010059010100c301010058010007010001050a070100010502020201030202
+050308cd01ff01ff010007010001050a070100010502020201030202050308cd01ff01ff
+010007010001050a0701000105020202010302020503080000cb08000100008101010059
+010100c301010058010007010001050a0701000105020202010302020503080000cb0800
+0100000b0101004e0101002201010059010100c301010058010007010001050a07010001
+05020202010302020503080000cb08000100000a0100001c0100002a0100000801000021
+0101000c0100002a0100001f010100c301010058010007010001050a0701000105020202
+010302020503080000110800000308000010080000010800009e08000100000a01000005
+010000070100000b010000040101000d010000050100000a010100020100000701000021
+0101000b010000040101000d010000050100000a010100020100001e010100c30101000c
+0100000201020044010007010001050a0701000105020202010302020503080000110800
+000308000010080000010800009e08000100000a01000004010100060101000a01000004
+010000010100000b0101000401010009010000010100000201000006010000210101000a
+01000004010000010100000b010100040101000901000001010000020100001d010100c3
+0101000b010100010100000201000043010007010001050a070100010502020201030202
+050308000009080100000800000108040001080000010800000a08010000080000010800
+00000801009b08000100000a010000030100000001000005010000000100000901000005
+010000010100000a01000000010000030100000001000009010000010100000301000005
+010000210101000901000005010000010100000a01000000010000030100000001000009
+01000001010000030100001c010100c30101000a01000000010000050100004301000701
+0001050a0701000105020202010302020503080000080800000108010003080000030800
+00000800000a0800000108010001080100010800009a08000100000a0100000501000004
+010000010100000801000006010000010100000901000001010000020100000101000009
+010000010100000401000004010000210101000801000006010000010100000901000001
+01000002010000010100000901000001010000040100001b010100c30101000901000001
+0100000501000043010007010001050a0701000105020202010302020503080000080800
+000208000003080000030801000b0800000208000001080000020800009a080001000008
+010100060100000301000002010000070100000701000001010000080100000201000001
+01000002010000090100000101000005010000040101001f010100070100000701000001
+010000080100000201000001010000020100000901000001010000050100001a010100c3
+01010008010000020100000301010044010007010001050a070100010502020201030202
+0503080000080800000208000003080000030801000b0800000208000001080000020800
+009a08000100000a01000005010000030100000201000008010000060100000101000008
+010000020100000101000002010000090100000101000004010000040100002101010008
+010000060100000101000008010000020100000101000002010000090100000101000004
+0100001b010100c301010008010000020100000501000043010007010001050a07010001
+0502020201030202050308000008080000020800000308000003080000000800000a0800
+000208000001080000020800009a08000100000a01000005010000030105000801000005
+010000010100000801050000010500080100000101000003010000050100002101010009
+010000050100000101000008010500000105000801000001010000030100001c010100c3
+010100080105000401000043010007010001050a07010001050202020103020205030800
+000808000001080100030800000308000001080000090800000108010001080100010800
+009a08000100000a01000005010000070100000301010004010000040100000101000003
+01010006010000050100000301010003010000010100000201000006010000210101000a
+010000040100000101000003010100060100000501000003010100030100000101000002
+0100001d010100c30101000c010000010100000201000043010007010001050a07010001
+050202020103020205030800000908010000080000040801000108000002080000090801
+000008000001080000000801009b08000100000a01000003010400050100000301010005
+010000040101000401010006010000050100000301010004010100020100000701000021
+0101000b010000040101000401010006010000050100000301010004010100020100001e
+010100c30101000c0100000201020044010007010001050a070100010502020201030202
+05030800000c0800000e080500a808000100000a01000014010000060100002a01000008
+010000210101000c0100002a0100001f010100c301010058010007010001050a07010001
+050202020103020205030800000808000002080000bd08000100000b010100100101003b
+0101002201010059010100c301010058010007010001050a070100010502020201030202
+050308000009080200be08000100008101010059010100c301010058010007010001050a
+0701000105020202010302020503080000cb08000100008101010059010100c301010058
+010007010001050a0701000105020202010302020503080000cb08000100008101010059
+010100c301010058010007010001050a0701000105020202010302020503080000cb0800
+0100008101010059010100c301010058010007010001050a070100010502020201030202
+0503080000cb08000100008101010059010100c301010058010007010001050a07010001
+0502020201030202050308cd01ff01ff010007010001050a070100010502020201030202
+050308cd01ff01ff010007010001050a0701000105020202010302020503080000cb0800
+0100008101010059010100c301010058010007010001050a070100010502020201030202
+0503080000cb08000100000b0101004e0101002201010059010100c30101005801000701
+0001050a0701000105020202010302020503080000cb08000100000a0100001c0100002a
+01000008010000210101000c0100002a0100001f010100c301010058010007010001050a
+0701000105020202010302020503080000110800000308000010080000010800009e0800
+0100000a01000005010000030104000b010000040101000d010000050100000a01010002
+01000007010000210101000b010000040101000d010000050100000a010100020100001e
+010100c3010100090102000301020044010007010001050a070100010502020201030202
+0503080000110800000308000010080000010800009e08000100000a0100000401010003
+0100000e01000004010000010100000b0101000401010009010000010100000201000006
+010000210101000a01000004010000010100000b01010004010100090100000101000002
+0100001d010100c30101000801000002010000010100000201000043010007010001050a
+070100010502020201030202050308000009080100000800000108040001080000010800
+000a0801000008000001080000000801009b08000100000a010000030100000001000003
+0100000d01000005010000010100000a0100000001000003010000000100000901000001
+0100000301000005010000210101000901000005010000010100000a0100000001000003
+010000000100000901000001010000030100001c010100c30101000c0100000501000043
+010007010001050a07010001050202020103020205030800000808000001080100030800
+0003080000000800000a0800000108010001080100010800009a08000100000a01000005
+010000030103000901000006010000010100000901000001010000020100000101000009
+010000010100000401000004010000210101000801000006010000010100000901000001
+01000002010000010100000901000001010000040100001b010100c30101000c01000005
+01000043010007010001050a070100010502020201030202050308000008080000020800
+0003080000030801000b0800000208000001080000020800009a08000100000801010006
+010000070100000701000007010000010100000801000002010000010100000201000009
+0100000101000005010000040101001f0101000701000007010000010100000801000002
+01000001010000020100000901000001010000050100001a010100c30101000a01010004
+01010044010007010001050a070100010502020201030202050308000008080000020800
+0003080000030801000b0800000208000001080000020800009a08000100000a01000005
+010000070100000801000006010000010100000801000002010000010100000201000009
+010000010100000401000004010000210101000801000006010000010100000801000002
+01000001010000020100000901000001010000040100001b010100c30101000c01000005
+01000043010007010001050a070100010502020201030202050308000008080000020800
+000308000003080000000800000a0800000208000001080000020800009a08000100000a
+010000050100000301000002010000090100000501000001010000080105000001050008
+010000010100000301000005010000210101000901000005010000010100000801050000
+0105000801000001010000030100001c010100c30101000c010000050100004301000701
+0001050a0701000105020202010302020503080000080800000108010003080000030800
+0001080000090800000108010001080100010800009a08000100000a0100000501000003
+010000020100000301010004010000040100000101000003010100060100000501000003
+01010003010000010100000201000006010000210101000a010000040100000101000003
+0101000601000005010000030101000301000001010000020100001d010100c301010008
+01000002010000010100000201000043010007010001050a070100010502020201030202
+050308000009080100000800000408010001080000020800000908010000080000010800
+00000801009b08000100000a010000030104000201020004010100050100000401010004
+010100060100000501000003010100040101000201000007010000210101000b01000004
+0101000401010006010000050100000301010004010100020100001e010100c301010009
+0102000301020044010007010001050a07010001050202020103020205030800000c0800
+000e080500a808000100000a01000014010000060100002a01000008010000210101000c
+0100002a0100001f010100c301010058010007010001050a070100010502020201030202
+05030800000808000002080000bd08000100000b010100100101003b0101002201010059
+010100c301010058010007010001050a0701000105020202010302020503080000090802
+00be08000100008101010059010100c301010058010007010001050a0701000105020202
+010302020503080000cb08000100008101010059010100c301010058010007010001050a
+0701000105020202010302020503080000cb08000100008101010059010100c301010058
+010007010001050a0701000105020202010302020503080000cb08000100008101010059
+010100c301010058010007010001050a0701000105020202010302020503080000cb0800
+0100008101010059010100c301010058010007010001050a070100010502020201030202
+050308cd01ff01ff010007010001050a070100010502020201030202050308cd01ff01ff
+010007010001050a0701000105020202010302020503080000cb08000100008101010059
+010100c301010058010007010001050a0701000105020202010302020503080000cb0800
+0100000b0101004e0101002201010059010100c301010058010007010001050a07010001
+05020202010302020503080000cb08000100000a0100001c0100002a0100000801000021
+0101000c0100002a0100001f010100c301010058010007010001050a0701000105020202
+010302020503080000110800000308000010080000010800009e08000100000a01000005
+010000040102000c010000040101000d010000050100000a010100020100000701000021
+0101000b010000040101000d010000050100000a010100020100001e010100c30101000a
+0101004b010007010001050a070100010502020201030202050308000011080000030800
+0010080000010800009e08000100000a0100000401010003010000020100000a01000004
+010000010100000b0101000401010009010000010100000201000006010000210101000a
+01000004010000010100000b010100040101000901000001010000020100001d010100c3
+01010009010000010100004a010007010001050a07010001050202020103020205030800
+0009080100000800000108040001080000010800000a0801000008000001080000000801
+009b08000100000a0100000301000000010000030100000d01000005010000010100000a
+010000000100000301000000010000090100000101000003010000050100002101010009
+01000005010000010100000a010000000100000301000000010000090100000101000003
+0100001c010100c301010009010000010100004a010007010001050a0701000105020202
+01030202050308000008080000010801000308000003080000000800000a080000010801
+0001080100010800009a08000100000a01000005010000030100000c0100000601000001
+010000090100000101000002010000010100000901000001010000040100000401000021
+010100080100000601000001010000090100000101000002010000010100000901000001
+010000040100001b010100c301010009010000010100004a010007010001050a07010001
+05020202010302020503080000080800000208000003080000030801000b080000020800
+0001080000020800009a0800010000080101000601000003010300080100000701000001
+01000008010000020100000101000002010000090100000101000005010000040101001f
+010100070100000701000001010000080100000201000001010000020100000901000001
+010000050100001a010100c301010009010000010100004a010007010001050a07010001
+05020202010302020503080000080800000208000003080000030801000b080000020800
+0001080000020800009a08000100000a0100000501000003010000020100000801000006
+010000010100000801000002010000010100000201000009010000010100000401000004
+010000210101000801000006010000010100000801000002010000010100000201000009
+01000001010000040100001b010100c301010009010000010100004a010007010001050a
+070100010502020201030202050308000008080000020800000308000003080000000800
+000a0800000208000001080000020800009a08000100000a010000050100000301000002
+010000090100000501000001010000080105000001050008010000010100000301000005
+010000210101000901000005010000010100000801050000010500080100000101000003
+0100001c010100c301010009010000010100004a010007010001050a0701000105020202
+010302020503080000080800000108010003080000030800000108000009080000010801
+0001080100010800009a08000100000a0100000501000003010000020100000301010004
+010000040100000101000003010100060100000501000003010100030100000101000002
+01000006010000210101000a010000040100000101000003010100060100000501000003
+0101000301000001010000020100001d010100c301010009010000010100004a01000701
+0001050a0701000105020202010302020503080000090801000008000004080100010800
+0002080000090801000008000001080000000801009b08000100000a0100000301040002
+010200040101000501000004010100040101000601000005010000030101000401010002
+01000007010000210101000b010000040101000401010006010000050100000301010004
+010100020100001e010100c30101000a0101004b010007010001050a0701000105020202
+0103020205030800000c0800000e080500a808000100000a01000014010000060100002a
+01000008010000210101000c0100002a0100001f010100c301010058010007010001050a
+07010001050202020103020205030800000808000002080000bd08000100000b01010010
+0101003b0101002201010059010100c301010058010007010001050a0701000105020202
+01030202050308000009080200be08000100008101010059010100c30101005801000701
+0001050a0701000105020202010302020503080000cb08000100008101010059010100c3
+01010058010007010001050a0701000105020202010302020503080000cb080001000081
+01010059010100c301010058010007010001050a07010001050202020103020205030800
+00cb08000100008101010059010100c301010058010007010001050a0701000105020202
+010302020503080000cb08000100008101010059010100c301010058010007010001050a
+070100010502020201030202050308cd01ff01ff010007010001050a0701000105020202
+01030202050308cd01ff01ff010007010001050a07010001050202020103020205030800
+00cb08000100008101010059010100c301010058010007010001050a0701000105020202
+010302020503080000cb08000100000b0101004e0101002201010059010100c301010058
+010007010001050a0701000105020202010302020503080000cb08000100000a0100001c
+0100002a01000008010000210101000c0100002a0100001f010100c30101005801000701
+0001050a0701000105020202010302020503080000110800000308000010080000010800
+009e08000100000a01000005010000030104000b010000040101000d010000050100000a
+0101000201000007010000210101000b010000040101000d010000050100000a01010002
+0100001e010100c3010100090102000401010044010007010001050a0701000105020202
+010302020503080000110800000308000010080000010800009e08000100000a01000004
+01010003010000020100000a01000004010000010100000b010100040101000901000001
+0100000201000006010000210101000a01000004010000010100000b0101000401010009
+01000001010000020100001d010100c30101000801000002010000020100000101000043
+010007010001050a07010001050202020103020205030800000908010000080000010804
+0001080000010800000a0801000008000001080000000801009b08000100000a01000003
+01000000010000070100000901000005010000010100000a010000000100000301000000
+01000009010000010100000301000005010000210101000901000005010000010100000a
+0100000001000003010000000100000901000001010000030100001c010100c301010008
+01000002010000020100000101000043010007010001050a070100010502020201030202
+050308000008080000010801000308000003080000000800000a08000001080100010801
+00010800009a08000100000a010000050100000601000009010000060100000101000009
+010000010100000201000001010000090100000101000004010000040100002101010008
+010000060100000101000009010000010100000201000001010000090100000101000004
+0100001b010100c30101000801000002010000020100000101000043010007010001050a
+0701000105020202010302020503080000080800000208000003080000030801000b0800
+000208000001080000020800009a08000100000801010006010000060100000801000007
+010000010100000801000002010000010100000201000009010000010100000501000004
+0101001f0101000701000007010000010100000801000002010000010100000201000009
+01000001010000050100001a010100c30101000901030002010000010100004301000701
+0001050a0701000105020202010302020503080000080800000208000003080000030801
+000b0800000208000001080000020800009a08000100000a010000050100000601000009
+010000060100000101000008010000020100000101000002010000090100000101000004
+010000040100002101010008010000060100000101000008010000020100000101000002
+0100000901000001010000040100001b010100c30101000c010000020100000101000043
+010007010001050a07010001050202020103020205030800000808000002080000030800
+0003080000000800000a0800000208000001080000020800009a08000100000a01000005
+010000050100000b01000005010000010100000801050000010500080100000101000003
+010000050100002101010009010000050100000101000008010500000105000801000001
+010000030100001c010100c30101000c010000020100000101000043010007010001050a
+070100010502020201030202050308000008080000010801000308000003080000010800
+00090800000108010001080100010800009a08000100000a010000050100000501000005
+010100040100000401000001010000030101000601000005010000030101000301000001
+0100000201000006010000210101000a0100000401000001010000030101000601000005
+010000030101000301000001010000020100001d010100c3010100080100000201000002
+0100000101000043010007010001050a0701000105020202010302020503080000090801
+0000080000040801000108000002080000090801000008000001080000000801009b0800
+0100000a0100000301040003010000050101000501000004010100040101000601000005
+01000003010100040101000201000007010000210101000b010000040101000401010006
+010000050100000301010004010100020100001e010100c3010100090102000401010044
+010007010001050a07010001050202020103020205030800000c0800000e080500a80800
+0100000a01000014010000060100002a01000008010000210101000c0100002a0100001f
+010100c301010058010007010001050a0701000105020202010302020503080000080800
+0002080000bd08000100000b010100100101003b0101002201010059010100c301010058
+010007010001050a070100010502020201030202050308000009080200be080001000081
+01010059010100c301010058010007010001050a07010001050202020103020205030800
+00cb08000100008101010059010100c301010058010007010001050a0701000105020202
+010302020503080000cb08000100008101010059010100c301010058010007010001050a
+0701000105020202010302020503080000cb08000100008101010059010100c301010058
+010007010001050a0701000105020202010302020503080000cb08000100008101010059
+010100c301010058010007010001050a070100010502020201030202050308cd01ff01ff
+010007010001050a070100010502020201030202050308cd01ff01ff010007010001050a
+0701000105020202010302020503080000cb08000100008101010059010100c301010058
+010007010001050a0701000105020202010302020503080000cb08000100000b0101004e
+0101002201010059010100c301010058010007010001050a070100010502020201030202
+0503080000cb08000100000a0100001c0100002a01000008010000210101000c0100002a
+0100001f010100c301010058010007010001050a07010001050202020103020205030800
+00110800000308000010080000010800009e08000100000a01000005010000040102000c
+010000040101000d010000050100000a0101000201000007010000210101000b01000004
+0101000d010000050100000a010100020100001e010100c3010100090102000301020044
+010007010001050a07010001050202020103020205030800001108000003080000100800
+00010800009e08000100000a0100000401010003010000020100000a0100000401000001
+0100000b0101000401010009010000010100000201000006010000210101000a01000004
+010000010100000b010100040101000901000001010000020100001d010100c301010008
+01000002010000010100000201000043010007010001050a070100010502020201030202
+050308000009080100000800000108040001080000010800000a08010000080000010800
+00000801009b08000100000a010000030100000001000003010000020100000901000005
+010000010100000a01000000010000030100000001000009010000010100000301000005
+010000210101000901000005010000010100000a01000000010000030100000001000009
+01000001010000030100001c010100c3010100080100000901000043010007010001050a
+070100010502020201030202050308000008080000010801000308000003080000000800
+000a0800000108010001080100010800009a08000100000a010000050100000301000002
+010000080100000601000001010000090100000101000002010000010100000901000001
+010000040100000401000021010100080100000601000001010000090100000101000002
+010000010100000901000001010000040100001b010100c3010100080100000901000043
+010007010001050a07010001050202020103020205030800000808000002080000030800
+00030801000b0800000208000001080000020800009a0800010000080101000601000004
+010200080100000701000001010000080100000201000001010000020100000901000001
+01000005010000040101001f010100070100000701000001010000080100000201000001
+010000020100000901000001010000050100001a010100c3010100080103000501000044
+010007010001050a07010001050202020103020205030800000808000002080000030800
+00030801000b0800000208000001080000020800009a08000100000a0100000501000003
+010000020100000801000006010000010100000801000002010000010100000201000009
+010000010100000401000004010000210101000801000006010000010100000801000002
+01000001010000020100000901000001010000040100001b010100c30101000801000002
+0100000301000045010007010001050a0701000105020202010302020503080000080800
+00020800000308000003080000000800000a0800000208000001080000020800009a0800
+0100000a0100000501000003010000020100000901000005010000010100000801050000
+010500080100000101000003010000050100002101010009010000050100000101000008
+010500000105000801000001010000030100001c010100c3010100080100000201000002
+01000046010007010001050a070100010502020201030202050308000008080000010801
+00030800000308000001080000090800000108010001080100010800009a08000100000a
+010000050100000301000002010000030101000401000004010000010100000301010006
+010000050100000301010003010000010100000201000006010000210101000a01000004
+01000001010000030101000601000005010000030101000301000001010000020100001d
+010100c301010008010000020100000101000047010007010001050a0701000105020202
+010302020503080000090801000008000004080100010800000208000009080100000800
+0001080000000801009b08000100000a0100000301040002010200040101000501000004
+01010004010100060100000501000003010100040101000201000007010000210101000b
+010000040101000401010006010000050100000301010004010100020100001e010100c3
+010100090102000201040043010007010001050a07010001050202020103020205030800
+000c0800000e080500a808000100000a01000014010000060100002a0100000801000021
+0101000c0100002a0100001f010100c301010058010007010001050a0701000105020202
+0103020205030800000808000002080000bd08000100000b010100100101003b01010022
+01010059010100c301010058010007010001050a07010001050202020103020205030800
+0009080200be08000100008101010059010100c301010058010007010001050a07010001
+05020202010302020503080000cb08000100008101010059010100c30101005801000701
+0001050a0701000105020202010302020503080000cb08000100008101010059010100c3
+01010058010007010001050a0701000105020202010302020503080000cb080001000081
+01010059010100c301010058010007010001050a07010001050202020103020205030800
+00cb08000100008101010059010100c301010058010007010001050a0701000105020202
+01030202050308cd01ff01ff010007010001050a070100010502020201030202050301ff
+01ff01ce07010001050a0701000105020202010302020503010000cb0101008101010059
+010100c301010058010007010001050a0701000105020202010302020503010000cb0101
+008101010059010100c301010058010007010001050a0701000105020202010302020503
+010000cb010100810101000c0100002a0100001f010100c301010058010007010001050a
+07010001050202020103020205030100000b010000120100001f01000089010100810101
+000b010000040101000b010000040102000b010100020100001e0101000b010000120100
+000e010000010100008f0101000a0101004b010007010001050a07010001050202020103
+020205030100001f0100001f01000089010100810101000a010000040100000101000009
+01010003010000020100000901000001010000020100001d0101001f0100000e01000001
+0100008f01010009010000010100004a010007010001050a070100010502020201030202
+050301000009010200020100000001010003010200020104000901020003010200030102
+000201000000010100030102007f01010081010100090100000501000001010000080100
+0000010000070100000901000001010000030100001c0101000901020002010000000101
+000301020002010400090101000001000001010000000101008c01010009010000010100
+004a010007010001050a07010001050202020103020205030100000b0100000201010001
+0100000101000002010000030100000a0100000201000001010000020100000101000002
+010000010101000101000001010000020100007e01010081010100080100000601000001
+0100000a010000070100000901000001010000040100001b0101000b0100000201010001
+0100000101000002010000030100000a0100000101010001010100010100008b01010009
+010000010100004a010007010001050a07010001050202020103020205030100000b0100
+0002010000020100000101000002010000030100000a0100000901000001010000050100
+000201000001010000020100007e010100810101000701000007010000010100000a0100
+00060100000a01000001010000050100001a0101000b0100000201000002010000010100
+0002010000030100000a0100000201000001010000020100008b01010009010000010100
+004a010007010001050a07010001050202020103020205030100000b0100000201000002
+01000001010400030100000a01000006010300010100000501000002010000010104007e
+010100810101000801000006010000010100000a010000050100000b0100000101000004
+0100001b0101000b010000020100000201000001010400030100000a0100000201000001
+010000020100008b01010009010000010100004a010007010001050a0701000105020202
+0103020205030100000b010000020100000201000001010000070100000a010000050100
+000201000001010000050100000201000001010000820101008101010009010000050100
+00010100000a010000040100000c01000001010000030100001c0101000b010000020100
+000201000001010000070100000a0100000201000001010000020100008b010100090100
+00010100004a010007010001050a07010001050202020103020205030100000b01000002
+010000020100000101000002010000030100000a01000002010000010100000201000001
+01000002010000010100000201000001010000020100007e010100810101000a01000004
+01000001010000030101000401000003010000070101000301000001010000020100001d
+0101000b01000002010000020100000101000002010000030100000a0100000101010001
+010100010100008b01010009010000010100004a010007010001050a0701000105020202
+0103020205030100000b0100000201000002010000020102000501010009010200030103
+00020102000201000002010000020102007f010100810101000b01000004010100040101
+0002010400010104000301010004010100020100001e0101000b01000002010000020100
+000201020005010100090101000001000001010000000101008c0101000a0101004b0100
+07010001050a070100010502020201030202050301000023010500a1010100810101000c
+0100002a0100001f010100230105009901010058010007010001050a0701000105020202
+010302020503010000cb0101008101010059010100c301010058010007010001050a0701
+000105020202010302020503010000cb0101008101010059010100c30101005801000701
+0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
+0058010007010001050a0701000105020202010302020503010000cb0101008101010059
+010100c301010058010007010001050a0701000105020202010302020503010000cb0101
+008101010059010100c301010058010007010001070c0001050202020103020205030100
+00cb0101008101010059010100c301010058010007010000070d00010502020201030202
+050301ff01ff01ce0701030e00010502020201030202050301ff01ff01ce0701030e0001
+05020202010302020503010000cb0101008101010059010100c30101005801000701030e
+000105020202010302020503010000cb0101008101010059010100c30101005801000701
+030e000105020202010302020503010000cb010100810101000c0100002a0100001f0101
+00c30101005801000701030e0001050202020103020205030100000b010000120100000e
+0100000101000097010100810101000b010000040101000b010000040102000b01010002
+0100001e0101000b010000120100000e010000010100008f0101000a0100000401020044
+01000701030e0001050202020103020205030100001f0100000e01000001010000970101
+00810101000a010000040100000101000009010100030100000201000009010000010100
+00020100001d0101001f0100000e010000010100008f0101000901010003010000020100
+004301000701030e00010502020201030202050301000009010200020100000001010003
+010200020104000901010000010000010100000001010094010100810101000901000005
+010000010100000801000000010000070100000901000001010000030100001c01010009
+01020002010000000101000301020002010400090101000001000001010000000101008c
+010100080100000001000003010000020100004301000701030e00010502020201030202
+05030100000b01000002010100010100000101000002010000030100000a010000010101
+00010101000101000093010100810101000801000006010000010100000a010000070100
+000901000001010000040100001b0101000b010000020101000101000001010000020100
+00030100000a0100000101010001010100010100008b0101000a01000003010000020100
+004301000701030e0001050202020103020205030100000b010000020100000201000001
+01000002010000030100000a010000020100000101000002010000930101008101010007
+01000007010000010100000a010000060100000a01000001010000050100001a0101000b
+01000002010000020100000101000002010000030100000a010000020100000101000002
+0100008b0101000a010000040103004301000701030e0001050202020103020205030100
+000b010000020100000201000001010400030100000a0100000201000001010000020100
+0093010100810101000801000006010000010100000a010000050100000b010000010100
+00040100001b0101000b010000020100000201000001010400030100000a010000020100
+0001010000020100008b0101000a010000070100004301000701030e0001050202020103
+020205030100000b010000020100000201000001010000070100000a0100000201000001
+0100000201000093010100810101000901000005010000010100000a010000040100000c
+01000001010000030100001c0101000b010000020100000201000001010000070100000a
+0100000201000001010000020100008b0101000a010000070100004301000701030e0001
+050202020103020205030100000b01000002010000020100000101000002010000030100
+000a01000001010100010101000101000093010100810101000a01000004010000010100
+00030101000401000003010000070101000301000001010000020100001d0101000b0100
+0002010000020100000101000002010000030100000a0100000101010001010100010100
+008b0101000a01000003010000020100004301000701030e000105020202010302020503
+0100000b0100000201000002010000020102000501010009010100000100000101000000
+01010094010100810101000b010000040101000401010002010400010104000301010004
+010100020100001e0101000b010000020100000201000002010200050101000901010000
+01000001010000000101008c01010008010400020102004401000701030e000105020202
+01030202050301000023010500a1010100810101000c0100002a0100001f010100230105
+00990101005801000701030e000105020202010302020503010000cb0101008101010059
+010100c30101005801000701030e000105020202010302020503010000cb010100810101
+0059010100c30101005801000701030e000105020202010302020503010000cb01010081
+01010059010100c30101005801000701030e000105020202010302020503010000cb0101
+008101010059010100c30101005801000701030e000105020202010302020503010000cb
+0101008101010059010100c30101005801000701030e0001050202020103020205030100
+00cb0101008101010059010100c30101005801000701030e000105020202010302020503
+01ff01ff01ce0701030e00010502020201030202050301ff01ff01ce0701001005020202
+010302020503010000cb0101008101010059010100c301010058010007010300000c0700
+000105020202010302020503010000cb0101008101010059010100c30101005801000701
+03000001050807010300000105020202010302020503010000cb010100810101000c0100
+002a0100001f010100c30101005801000701030100010507070103000001050202020103
+020205030100000b010000120100000a0100001501000087010100810101000b01000004
+0101000b010000040102000b010100020100001e0101000b010000120100000e01000001
+0100008f0101000c0100004a010007010301000105060701030100010502020201030202
+05030100001f0100000a0100001501000087010100810101000a01000004010000010100
+000901010003010000020100000901000001010000020100001d0101001f0100000e0100
+00010100008f0101000b0101004a01000701030200010505070103010001050202020103
+020205030100000901020002010000000101000301020002010400080100000001010003
+0102000301020002010400020102007f0101008101010009010000050100000101000008
+01000000010000070100000901000001010000030100001c010100090102000201000000
+0101000301020002010400090101000001000001010000000101008c0101000a01000000
+0100004a01000701030200010504070103020001050202020103020205030100000b0100
+0002010100010100000101000002010000030100000a0101000101000001010000020100
+0001010000020100000301000003010000020100007e0101008101010008010000060100
+00010100000a010000070100000901000001010000040100001b0101000b010000020101
+00010100000101000002010000030100000a0100000101010001010100010100008b0101
+0009010000010100004a0100070103030001050307010302000105020202010302020503
+0100000b01000002010000020100000101000002010000030100000a0100000201000001
+010000020100000101000007010000030100008201010081010100070100000701000001
+0100000a010000060100000a01000001010000050100001a0101000b0100000201000002
+0100000101000002010000030100000a0100000201000001010000020100008b01010008
+010000020100004a01000701030300010502070103030001050202020103020205030100
+000b010000020100000201000001010400030100000a0100000201000001010000020100
+000201020004010000040102007f010100810101000801000006010000010100000a0100
+00050100000b01000001010000040100001b0101000b0100000201000002010000010104
+00030100000a0100000201000001010000020100008b01010008010000020100004a0100
+0701030400010501070103030001050202020103020205030100000b0100000201000002
+01000001010000070100000a010000020100000101000002010000050100000301000007
+0100007e010100810101000901000005010000010100000a010000040100000c01000001
+010000030100001c0101000b010000020100000201000001010000070100000a01000002
+01000001010000020100008b010100080105004901000701030400010500070103040001
+050202020103020205030100000b01000002010000020100000101000002010000030100
+000a01000002010000010100000201000001010000020100000301000003010000020100
+007e010100810101000a0100000401000001010000030101000401000003010000070101
+000301000001010000020100001d0101000b010000020100000201000001010000020100
+00030100000a0100000101010001010100010100008b0101000c0100004a010007010305
+0000070203040001050202020103020205030100000b0100000201000002010000020102
+00050101000801000002010000020102000301020005010100020102007f010100810101
+000b010000040101000401010002010400010104000301010004010100020100001e0101
+000b01000002010000020100000201020005010100090101000001000001010000000101
+008c0101000c0100004a0100070103050000070103050001050202020103020205030100
+0023010500a1010100810101000c0100002a0100001f0101002301050099010100580100
+0701030607010305000105020202010302020503010000cb0101008101010059010100c3
+0101005801000701030607000306000105020202010302020503010000cb010100810101
+0059010100c30101005801000701001005020202010302020503010000cb010100810101
+0059010100c3010100580100070000110502020201030202050207ff07ff07d305110202
+01030202050207ff07ff07d20000051102020103020205020701030d0000030000ff00ff
+00af03000001030c0001051102020103020205020701030b00010700030000ff00ff00ae
+070003000003030a00010511020201030202050207010309000207010300000105ff05ff
+05ab07010300000503080001051102020103020205020701030700030500070103000001
+05ff05ff05ab070103000001050100030306000105110202010302020502070103050003
+050207010300000105ff05ff05ab07010300000105030003030400010511020201030202
+0502070103030003050407010300000105ff05ff05ab0701030000010505000303020001
+05110202010302020502070103010003050607010300000105ff05ff05ab070103000001
+0507000303000001051102020103020205020705050807010300000105ff05ff05ab0701
+0300000105080703000105110202010302020502070103010703050607010300000105ff
+05ff05ab0701030000010507070303000001051102020103020205020701030307030504
+07010300000105ff05ff05ab070103000001050507030302000105110202010302020502
+070103050703050207010300000105ff05ff05ab07010300000105030703030400010511
+0202010302020502070103070703050007010300000105ff05ff05ab0701030000010501
+070303060001051102020103020205020701030907040300000105ff05ff05ab07010300
+0001070303080001051102020103020205020701030b07020300000107ff07ff07ad0300
+00010701030a0001051102020101000405020701030d07000300000007ff07ff07ae0300
+00000700030c000105110005020204000502070100ff00ff00d105110000020204000000
+020204000502070000ff00ff00d2051100000202040000000202040005ff05ff05e80000
+0202040000000202040005ff05ff05e800000202040000000202040005ff05ff05e80000
+02020400000002020400000502ff02ff02dc00060202040000000208040002ff02ff02dc
+00000208040000000208040002ff02ff02dc00000208040000000208040001ff01ff01dc
+0000020804000000040901ff01ff01dc00000409
+%%EndData
+end
+%%PageTrailer
+%%Trailer
+%%BoundingBox: 0 0 377 205
+%%EOF
diff --git a/lib/tv/doc/src/tv_start_system_unreadable.gif b/lib/tv/doc/src/tv_start_system_unreadable.gif
new file mode 100644
index 0000000000..38b69deb8e
--- /dev/null
+++ b/lib/tv/doc/src/tv_start_system_unreadable.gif
Binary files differ
diff --git a/lib/tv/doc/src/tv_start_system_unreadable.ps b/lib/tv/doc/src/tv_start_system_unreadable.ps
new file mode 100644
index 0000000000..4486557837
--- /dev/null
+++ b/lib/tv/doc/src/tv_start_system_unreadable.ps
@@ -0,0 +1,1377 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (ImageMagick)
+%%Title: (/clearcase/otp/erts/lib/tv/doc/src/tv_start_system_unreadable.eps)
+%%CreationDate: (Mon Mar 19 17:15:29 2001)
+%%BoundingBox: 0 0 377 205
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 0
+%%EndComments
+
+%%BeginDefaults
+%%PageOrientation: Portrait
+%%EndDefaults
+
+%%BeginProlog
+%
+% Display a color image. The image is displayed in color on
+% Postscript viewers or printers that support color, otherwise
+% it is displayed as grayscale.
+%
+/buffer 512 string def
+/byte 1 string def
+/color_packet 3 string def
+/pixels 768 string def
+
+/DirectClassPacket
+{
+ %
+ % Get a DirectClass packet.
+ %
+ % Parameters:
+ % red.
+ % green.
+ % blue.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/DirectClassImage
+{
+ %
+ % Display a DirectClass image.
+ %
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { DirectClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayDirectClassPacket } image
+ } ifelse
+} bind def
+
+/GrayDirectClassPacket
+{
+ %
+ % Get a DirectClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % red
+ % green
+ % blue
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/GrayPseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassImage
+{
+ %
+ % Display a PseudoClass image.
+ %
+ % Parameters:
+ % class: 0-PseudoClass or 1-Grayscale.
+ %
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ class 0 gt
+ {
+ currentfile buffer readline pop
+ token pop /depth exch def pop
+ /grays columns 8 add depth sub depth mul 8 idiv string def
+ columns rows depth
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { currentfile grays readhexstring pop } image
+ }
+ {
+ %
+ % Parameters:
+ % colors: number of colors in the colormap.
+ % colormap: red, green, blue color packets.
+ %
+ currentfile buffer readline pop
+ token pop /colors exch def pop
+ /colors colors 3 mul def
+ /colormap colors string def
+ currentfile colormap readhexstring pop pop
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { PseudoClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayPseudoClassPacket } image
+ } ifelse
+ } ifelse
+} bind def
+
+/DisplayImage
+{
+ %
+ % Display a DirectClass or PseudoClass image.
+ %
+ % Parameters:
+ % x & y translation.
+ % x & y scale.
+ % label pointsize.
+ % image label.
+ % image columns & rows.
+ % class: 0-DirectClass or 1-PseudoClass.
+ % compression: 0-RunlengthEncodedCompression or 1-NoCompression.
+ % hex color packets.
+ %
+ gsave
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ x y translate
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ currentfile buffer readline pop
+ token pop /pointsize exch def pop
+ /Helvetica findfont pointsize scalefont setfont
+ x y scale
+ currentfile buffer readline pop
+ token pop /columns exch def
+ token pop /rows exch def pop
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ currentfile buffer readline pop
+ token pop /compression exch def pop
+ class 0 gt { PseudoClassImage } { DirectClassImage } ifelse
+ grestore
+} bind def
+%%EndProlog
+%%Page: 1 1
+%%PageBoundingBox: 0 0 377 205
+userdict begin
+%%BeginData:
+DisplayImage
+0 0
+377.000000 205.000000
+12
+755 410
+1
+0
+0
+16
+ffffff
+000000
+d8d8d8
+c2c2c2
+6b6b6b
+d9d9d9
+b22222
+828282
+aab6aa
+e7e7e7
+000000
+000000
+000000
+000000
+000000
+000000
+000a01ff01ff01dc000b0208040001ff01ff01dc00000208040000000208040002ff02ff
+02dc000002080400000002080400020000ff00ff00d90400020000000208040000000202
+04060200000004ff04ff04d9020000000405020204000000020204000209000d02ff02ff
+02d000000202040000000202040002080000020d040002f6010302110103023801010206
+0101024001010230010102ff020400000202040000000202040002080000020d040002f6
+010102020107020001010203010102010101020e0105020001070201010302070100020b
+01010206010102400101020c0104021e010102ff02040000020204000000020204000208
+0000020d040002f6010102050101020301010203010102010101020e0101020701010203
+01010201010102050101020b010102060101024e010102020101021d010102ff02040000
+0202040000000202040002080000020204060203040002f6010102050101020301010203
+010102010101020e01010207010102030101020801040201010302030101020001010203
+010102020103020301040206010302030101020001010207010102000101020101010203
+010302030101020201010200010102020101020101030202010102000101020101010203
+010302020101020001010201010102020103020201010202010102f30000020204000000
+04030208000002020400030400000203040002f601010205010102040101020201000202
+0101020e0101020701010203010202080101020201010201010102020102020001010202
+010102010101020101010201010102090101020101010202010202000101020601020200
+010202000101020101010201010102020101020201020200010102010101020001010200
+010102020102020001020200010102010101020101010201010102000101020101010201
+010102010101020101010202010102f3000004030101020b000002030400030200000204
+040002f6010102050101020401010201010102020101020e010402040101020401030206
+010102060101020201010201010102020101020101010201010102010102020801010201
+010102020101020101010206010102010101020101010205010102020101020201010201
+010102010101020001010200010102020101020101010201010102050101020101020203
+01010201010102010101020101010202010002f70103020b000002030400030200000204
+040002f6010102050101020501010200010002030101020e010102070101020601020205
+010102030104020201010201010102020101020101050202010302060101020101010202
+010102010101020601010201010102010101020201040202010102020101020101010201
+010102000101020001010202010102010101020101010202010402010101020401010201
+0105020201010200010102f70103020b000002040400030000000205040002f601010205
+01010205010302030101020e010102070101020701010205010102020101020101010202
+010102010101020201010201010102080102020501010201010102020101020101010206
+010102010101020101010201010102010101020201010202010102010101020101010201
+010102000101020101010201010102010101020101010201010102010101020401010201
+0101020601010200010002f80103020b000002040400030000000205040002f601010205
+01010206010102040101020e010102070101020301010201010102050101020201010201
+010102020101020101010202010102010101020201000205010102050101020101010202
+010102010101020601010201010102010101020101010201010102020101020201010201
+010102020101020701010201010102010101020101010201010102010101020401010201
+0101020201000203010202f80103020b0000020500000206040002f60101020501010206
+010102040101020e01050203010102040103020701020201010202000101020101040203
+010102020103020201040207010302030101020101010206010102010101020101010202
+010202000101020101010202010102010101020301050202010102010101020101010202
+0102020001010200010102040101020201030204010102f90103020b0000020d040002f6
+01030211010302c4010102fa0103020b0000020d040002ff02d5010102fa0103020b0000
+020d040002ff02ff02d20103020c040d02ff02ff02d3010302ff02ff02ee010302ff02ff
+02ee0103020200ff00ff00e70400020201030202000004ff04ff04e70202010302ff02ff
+02ee0103020200ff00ff00e802020103020200ff00ff00e70700020201030202000105ff
+05ff05e40701020201030202000105ff05ff05e40701020201030202000105ff05ff05e4
+0701020201030202000105ff05ff05e40701020201030202000105ff05ff05e407010202
+010302020001050b06040504060005030602051f0600050206000504060005270602050b
+06000506060005ff05ff053506000502060005090602051307010202010302020001050b
+0600050f0600051f060005020600052c060005020600050a060005ff05ff053d06000502
+0600050b0600051307010202010302020001050b06000506060205050600050306020518
+060005020600050206020503060205020600050206000517060005020600050106000500
+060105020604050206020503060205020600050006010503060205ff05ff052006000502
+060005020602050506000502060005000601050c07010202010302020001050b06000508
+060005050600050206000502060005180600050006000505060005020600050206000501
+060005020600051706000502060005010601050106000503060005060600050206000502
+06000501060105010600050106000502060005ff05ff051f060005020600050106000502
+0600050406000502060105010600050b07010202010302020001050b0603050506000505
+060005020600050206000518060005000600050506000502060005020600050106000500
+060005000600051706000502060005010600050206000503060005060600050206000502
+060005010600050206000501060005ff05ff052306040501060005020600050406000502
+060005020600050b07010202010302020001050b06000508060005050600050206040518
+060005000600050506000502060405010600050006000500060005170600050206000501
+0600050206000503060005060600050206000502060005010600050206000502060205ff
+05ff052006000502060005010604050406000502060005020600050b0701020201030202
+0001050b0600050806000505060005020600051d06000506060005020600050506000500
+060005000600051706000502060005010600050206000503060005060600050206000502
+060005010600050206000505060005ff05ff051f06000502060005010600050806000502
+060005020600050b07010202010302020001050b06000508060005050600050206000502
+060005190600050606000502060005020600050106000500060005000600051706000502
+060005010601050106000503060005060600050206000502060005010600050206000501
+06000502060005ff05ff051f060005020600050106000502060005040600050206010501
+0600050b07010202010302020001050b0600050806000505060005030602051a06000506
+060005030602050306000500060005190602050206000500060105050601050406000503
+060205020600050206000502060205ff05ff052006000502060005020602050506000502
+060005000601050c070102020103020200010576060005ff05ff055b0600050f07010202
+010302020001050a0606052a0606052a06060500060005ff05ff05450606050e0600050f
+07010202010302020001050a0606052a0606052a06060500060005ff05ff05450606050e
+0600050f0701020201030202000105ff05ff05e40701020201030202000105ff05ff05e4
+0701020201030202000105ff05ff05e40701020201030202000107ff07ff07e602020103
+0202000007ff07ff07e702020103020205ff05ff05e802020103020205ff05ff05e80202
+0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
+0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
+0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
+0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
+0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
+0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
+0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
+0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
+0103020205ff05ff05e802020103020205ff05ff05e8020201030202051c010205040103
+05c1010205040103051a0102057f01010505010205f001020504010305190101052f0202
+01030202050e01060508010005060101050f010205010102059b01060508010005060101
+0510010505040101054d010205240104050d0101051e0102052401020501010205930106
+0508010005060101051101030535020201030202050e0100050101010500010005070101
+050601000511010105010100059d01000501010105000100050701010506010005130101
+05060100054d0101050001010524010105000101050c0100051e01010500010105240101
+050101000595010005010101050001000507010105060100051101010501010105340202
+010302020510010105030103050201030503010105030103050801020500010105010103
+05000101050001000500010005020103058b010105030103050201030503010105030103
+050a010105030104054c0101050101050500010305000102050201030501010105000102
+05070101050101010500010305030104051d010105010105050001030500010205020103
+050101010500010205070102050001010501010305000101050001000500010005020103
+058301010503010305020103050301010503010305090101050101000500010305020105
+050101030521020201030202051001010506010105000101050101010502010105020101
+0501010105070100050001000500010005050101050001050500010105010101058a0101
+050601010500010105010101050201010502010105010101050901010502010105010101
+054c01000502010105000101050201000500010205000101050001010501010105010102
+050001000507010105010101050201010502010105010101051d01000502010105000101
+050201000500010205000101050001010501010105010102050001000507010005000100
+050001000505010105000105050001010501010105820101050601010500010105010101
+050201010502010105010101050801020504010105020101050001010501010105010101
+052002020103020205100100050401040500010105010101050201010501010605070100
+0500010205020104050001010500010005000107058a0100050401040500010105010101
+0502010105010106050901010501010105020101054b0101050201000501010105000100
+05000100050001010501010805010101050a0103050401010501010105020101051c0101
+05020100050101010500010005000100050001010501010805010101050a010005000102
+050201040500010105000100050001070582010005040104050001010501010105020101
+05010106050901020503010105040101050101060520020201030202050f010105020101
+0501010105000101050201010501010105020101050b0101050001010501010105010101
+05010100050001000500010005000101058e010105020101050101010500010105020101
+0501010105020101050d01010502010105010101054c0101050101010501010205000100
+05010100050201000500010105050101050a0101050601010502010105010101051d0101
+05010101050101020500010005010100050201000500010105050101050a010105000101
+050101010501010105010100050001000500010005000101058601010502010105010101
+05000101050201010501010105020101050b010105010101050201010503010105030101
+0525020201030202050f0101050201010501010105000101050101010502010105020101
+050101010507010005010101050101010501010105000101050001000500010005000101
+05010101058a010105020101050101010500010105010101050201010502010105010101
+050901010502010105010101054c01010500010105020103050101010501010105000101
+0501010105010101050a0101050601010502010105010101051d01010500010105020103
+0501010105010101050001010501010105010101050a0100050101010501010105010101
+050001010500010005000100050001010501010105820101050201010501010105000101
+050101010502010105020101050101010507010105010101050201010502010205000101
+05000101050101010521020201030202050e01030502010a050101050501010305070102
+0500010105020107050001000500010105000103058a01030502010a0501010505010103
+0508010505010105054c0102050301010500010005000103050001020500010305010104
+050701030503010505010105051d01020503010105000100050001030500010205000103
+05010104050701020500010105020107050001000500010105000103058201030502010a
+050101050501010305090103050101050500010505010103052202020103020205ff05ff
+05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff
+05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff
+05e8020201030202050201ff01ff01e205020202010302020503010000cb010100810101
+0059010100c30101005801000711000005020202010302020503010000cb010100810101
+0059010100c30101005801000701030607000306000105020202010302020503010000cb
+010100810101000c0100002301000026010100c301010058010007010305000007000306
+0001050202020103020205030100001f0100000a0100009e010100810101000b01000004
+010100090104000a01010002010000250101001e0102000501000012010000060100002e
+010000120102000301020031010100080104004a01000701030500000701030500010502
+02020103020205030100001f0100000a0100009e010100810101000a0100000401000001
+010000080100000d01000001010000020100002401010020010000190100003601000014
+010000050100003101010008010000020100004a01000701030400010701030500010502
+02020103020205030100000901020003010200090104000201020002010000000101009b
+01010081010100090100000501000001010000080100000d010000010100000301000023
+010100090102000201000000010100020100000001010005010000030102000301020003
+01020002010400020102000301020002010000000101000a010200030102000201000000
+010100020104000101000000010100030102000501000005010000030102000201000000
+010100230101000c0100004a010007010304000105000701030400010502020201030202
+0503010000080100000201000001010000020100000a0100000301000002010000010101
+00010100009a01010081010100080100000601000001010000080103000a010000010100
+000401000022010100080100000201000001010100010100000101010001010000040100
+000501000002010000020100000101000002010000030100000601000002010000020100
+000101010001010000080100000201000001010000020100000101010001010000030100
+000301010001010000010100000201000004010000050100000201000002010000010101
+0001010000220101000b0100004b01000701030300010501070103040001050202020103
+020205030100000c010000010100000e0100000701000001010000020100009a01010081
+0101000701000007010000010100000c010000090100000101000005010000210101000c
+010000010100000201000001010000020100000401000005010000020100000901000003
+010000060100000201000002010000010100000201000008010000050100000201000001
+010000020100000301000003010000050100000201000004010000050100000201000002
+01000001010000260101000b0100004b0100070103030001050207010303000105020202
+01030202050301000009010300010100000e0100000401030001010000020100009a0101
+00810101000801000006010000010100000c010000090100000101000004010000220101
+000901030001010000020100000101000002010000040100000501000002010000060103
+000301000006010000020100000201000001010000020100000801000005010000020100
+000101000002010000030100000301000005010000020100000401000005010000020104
+0001010000260101000b0100004b01000701030200010503070103030001050202020103
+020205030100000801000002010000010100000e01000003010000020100000101000002
+0100009a0101008101010009010000050100000101000008010000020100000901000001
+010000030100002301010008010000020100000101000002010000010100000201000004
+010000050100000201000005010000020100000301000006010000020100000201000001
+010000020100000801000005010000020100000101000002010000030100000301000005
+0100000201000004010000050100000201000005010000260101000a0100004c01000701
+030200010504070103020001050202020103020205030100000801000002010000010100
+00020100000a010000030100000201000001010100010100009a010100810101000a0100
+000401000001010000030101000201000002010000030101000301000001010000020100
+002401010008010000020100000101010001010000010101000101000004010000050100
+000201000002010000010100000201000003010000060100000201000002010000010100
+000201000008010000020100000101000002010000010100000201000003010000030100
+0005010000020100000401000005010000020100000201000001010000260101000a0100
+004c01000701030100010505070103020001050202020103020205030100000901030002
+0102000c0101000201030001010000000101009b010100810101000b0100000401010004
+010100030102000401010004010100020100002501010009010300010100000001010002
+010000000101000501000005010000030102000301030004010100040100000301020002
+010000020100000901020003010200020100000201000004010100010100000601020005
+010000050100000301020002010000260101000a0100004c010007010301000105060701
+030100010502020201030202050301000015010500af010100810101000c010000230100
+00260101000f010000050100003c01050068010100580100070103000001050707010301
+000105020202010302020503010000cb01010081010100590101000f01000005010000ab
+010100580100070103000001050807010300000105020202010302020503010000cb0101
+0081010100590101000f01000005010000ab01010058010007010001070b030000010502
+0202010302020503010000cb0101008101010059010100c301010058010007010000070d
+000105020202010302020503010000cb0101008101010059010100c30101005801000701
+030e000105020202010302020503010000cb0101008101010059010100c3010100580100
+0701001005020202010302020503010000cb0101008101010059010100c3010100580100
+0701000d070000010502020201030202050301ff01ff01ce07010001050a070100010502
+020201030202050308cd01ff01ff010007010001050a0701000105020202010302020503
+080009cb08000100098101010959010109c301010958010007010001050a070100010502
+0202010302020503080009cb08000100090b0101094e0101092201010959010109c30101
+0958010007010001050a0701000105020202010302020503080009cb08000100090a0100
+091c0100092a01000908010009210101090c0100092a0100091f010109c3010109580100
+07010001050a07010001050202020103020205030800091a080009af08000100090a0100
+0905010009050101090c010009040101090a010209020104090a01010902010009070100
+09210101090b010009040101090a010209020104090a010109020100091e0101091a0100
+09a70101090901020903010209020104093c010007010001050a07010001050202020103
+020205030800091a080009af08000100090a0100090401010904010009010100090a0100
+090401000901010009080100090201000901010009020100090901000901010009020100
+0906010009210101090a0100090401000901010009080100090201000901010009020100
+090901000901010009020100091d0101091a010009a70101090801000902010009010100
+090201000901010009020100093c010007010001050a0701000105020202010302020503
+0800090908020903080209030801090008000902080209a908000100090a010009030100
+090001000904010009010100090901000905010009010100090c01000905010009090100
+09010100090301000905010009210101090901000905010009010100090c010009050100
+090901000901010009030100091c01010909010209030102090301010900010009020102
+090a01020903010209020100090001010902010009020100090201020902010009000101
+09700101090c01000905010009050100093c010007010001050a07010001050202020103
+020205030800090808000902080009010800090208000901080009010801090108000902
+080009a808000100090a0100090501000904010009010100090801000906010009010100
+090c010009040100090a0100090101000904010009040100092101010908010009060100
+09010100090c010009040100090a01000901010009040100091b01010908010009020100
+090101000902010009010100090101010901010009020100090801000902010009010100
+090201000901010109010100090101000902010009010100090201000901010109010100
+096f0101090c01000905010009040100093d010007010001050a07010001050202020103
+0202050308000908080009050800090208000901080009020800090108000902080009a8
+0800010009080101090601000904010009010100090701000907010009010100090b0100
+09050100090a0100090101000905010009040101091f0101090701000907010009010100
+090b010009050100090a01000901010009050100091a0101090801000905010009020100
+090101000902010009010100090201000908010009050100090201000901010009050100
+0902010009010100090201000901010009730101090b01000905010009050100093d0100
+07010001050a070100010502020201030202050308000908080009050800090208000901
+0800090208000901080409a808000100090a010009050100090401000901010009080100
+0906010009010100090a010009060100090a010009010100090401000904010009210101
+090801000906010009010100090a010009060100090a01000901010009040100091b0101
+090801000905010009020100090101000902010009010104090901020902010409010100
+0906010009000100090201040901010009730101090a01000905010009060100093d0100
+07010001050a070100010502020201030202050308000908080009050800090208000901
+0800090208000901080009ac08000100090a010009050100090401000901010009090100
+09050100090101000909010009060100090b010009010100090301000905010009210101
+0909010009050100090101000909010009060100090b01000901010009030100091c0101
+090801000905010009020100090101000902010009010100091001000901010009050100
+0906010009000100090201000905010009730101090901000905010009060100093e0100
+07010001050a070100010502020201030202050308000908080009020800090108000902
+08000901080009010801090108000902080009a808000100090a01000905010009040100
+090101000903010109040100090401000901010009030101090201000907010009050101
+0903010009010100090201000906010009210101090a0100090401000901010009030101
+090201000907010009050101090301000901010009020100091d01010908010009020100
+090101000902010009010100090101010901010009020100090801000902010009010100
+090201000901010009070100090301000902010009010100097301010908010009050100
+09070100093e010007010001050a07010001050202020103020205030800090908020903
+080209030801090008000902080209a908000100090a0100090301040903010109040101
+090501000904010109040101090201040903010009050101090401010902010009070100
+09210101090b010009040101090401010902010409030100090501010904010109020100
+091e01010909010209030102090301010900010009020102090a01020903010209020100
+09070100090401020902010009730101090801040901010409030100093e010007010001
+050a0701000105020202010302020503080009cb08000100090a01000914010009060100
+092a01000908010009210101090c0100092a0100091f0101092301050999010109580100
+07010001050a0701000105020202010302020503080009cb08000100090b010109100101
+093b0101092201010959010109c301010958010007010001050a07010001050202020103
+02020503080009cb08000100098101010959010109c301010958010007010001050a0701
+000105020202010302020503080009cb08000100098101010959010109c3010109580100
+07010001050a0701000105020202010302020503080009cb080001000981010109590101
+09c301010958010007010001050a0701000105020202010302020503080009cb08000100
+098101010959010109c301010958010007010001050a0701000105020202010302020503
+080009cb08000100098101010959010109c301010958010007010001050a070100010502
+020201030202050308cd01ff01ff010007010001050a0701000105020202010302020503
+08cd01ff01ff010007010001050a0701000105020202010302020503080009cb08000100
+098101010959010109c301010958010007010001050a0701000105020202010302020503
+080009cb08000100090b0101094e0101092201010959010109c301010958010007010001
+050a0701000105020202010302020503080009cb08000100090a0100091c0100092a0100
+0908010009210101090c0100092a0100091f010109c301010958010007010001050a0701
+0001050202020103020205030800091a080009af08000100090a01000905010009050100
+090d010009040101090a010209020104090a0101090201000907010009210101090b0100
+09040101090a010209020104090a010109020100091e0101091a010009a7010109090102
+090301020944010007010001050a07010001050202020103020205030800091a080009af
+08000100090a01000904010109040101090c010009040100090101000908010009020100
+09010100090201000909010009010100090201000906010009210101090a010009040100
+0901010009080100090201000901010009020100090901000901010009020100091d0101
+091a010009a70101090801000902010009010100090201000943010007010001050a0701
+000105020202010302020503080009090802090308020903080109000800090208020909
+0800090008010903080209020801090008000903080209030802097f08000100090a0100
+09030100090001000903010009000100090b01000905010009010100090c010009050100
+0909010009010100090301000905010009210101090901000905010009010100090c0100
+09050100090901000901010009030100091c010109090102090301020903010109000100
+09020102090a010209030102090201000900010109020100090201000902010209020100
+0900010109700101090c0100090501000943010007010001050a07010001050202020103
+020205030800090808000902080009010800090208000901080009010801090108000902
+080009080801090108000901080009020800090108000900080009000800090108000902
+08000901080009020800097e08000100090a01000905010009050100090a010009060100
+09010100090c010009040100090a01000901010009040100090401000921010109080100
+0906010009010100090c010009040100090a01000901010009040100091b010109080100
+090201000901010009020100090101000901010109010100090201000908010009020100
+090101000902010009010101090101000901010009020100090101000902010009010101
+09010100096f0101090c0100090501000943010007010001050a07010001050202020103
+020205030800090808000905080009020800090108000902080009010800090208000908
+080009020800090508000901080009000800090008000901080009020800090108000982
+08000100090801010906010009050100090901000907010009010100090b010009050100
+090a0100090101000905010009040101091f0101090701000907010009010100090b0100
+09050100090a01000901010009050100091a010109080100090501000902010009010100
+090201000901010009020100090801000905010009020100090101000905010009020100
+09010100090201000901010009730101090a0101090401010944010007010001050a0701
+000105020202010302020503080009080800090508000902080009010800090208000901
+08040908080009020800090208030901080009000800090008000901080409020802097f
+08000100090a01000905010009050100090a01000906010009010100090a010009060100
+090a010009010100090401000904010009210101090801000906010009010100090a0100
+09060100090a01000901010009040100091b010109080100090501000902010009010100
+090201000901010409090102090201040901010009060100090001000902010409010100
+09730101090c0100090501000943010007010001050a0701000105020202010302020503
+0800090808000905080009020800090108000902080009010800090c0800090208000901
+0800090208000901080009000800090008000901080009090800097e08000100090a0100
+0905010009050100090b010009050100090101000909010009060100090b010009010100
+0903010009050100092101010909010009050100090101000909010009060100090b0100
+0901010009030100091c0101090801000905010009020100090101000902010009010100
+0910010009010100090501000906010009000100090201000905010009730101090c0100
+090501000943010007010001050a07010001050202020103020205030800090808000902
+080009010800090208000901080009010801090108000902080009080800090208000901
+08000902080009010800090008000900080009010800090208000901080009020800097e
+08000100090a010009050100090501000905010109040100090401000901010009030101
+0902010009070100090501010903010009010100090201000906010009210101090a0100
+090401000901010009030101090201000907010009050101090301000901010009020100
+091d01010908010009020100090101000902010009010100090101010901010009020100
+090801000902010009010100090201000901010009070100090301000902010009010100
+09730101090801000902010009010100090201000943010007010001050a070100010502
+020201030202050308000909080209030802090308010900080009020802090908000902
+0800090208030901080009000800090008000902080209030802097f08000100090a0100
+090301040901010409030101090501000904010109040101090201040903010009050101
+09040101090201000907010009210101090b010009040101090401010902010409030100
+090501010904010109020100091e01010909010209030102090301010900010009020102
+090a01020903010209020100090701000904010209020100097301010909010209030102
+0944010007010001050a070100010502020201030202050308000923080509a108000100
+090a01000914010009060100092a01000908010009210101090c0100092a0100091f0101
+09230105099901010958010007010001050a0701000105020202010302020503080009cb
+08000100090b010109100101093b0101092201010959010109c301010958010007010001
+050a0701000105020202010302020503080009cb08000100098101010959010109c30101
+0958010007010001050a0701000105020202010302020503080009cb0800010009810101
+0959010109c301010958010007010001050a0701000105020202010302020503080009cb
+08000100098101010959010109c301010958010007010001050a07010001050202020103
+02020503080009cb08000100098101010959010109c301010958010007010001050a0701
+000105020202010302020503080009cb08000100098101010959010109c3010109580100
+07010001050a070100010502020201030202050308cd01ff01ff010007010001050a0701
+00010502020201030202050308cd01ff01ff010007010001050a07010001050202020103
+02020503080009cb08000100098101010959010109c301010958010007010001050a0701
+000105020202010302020503080009cb08000100090b0101094701010929010109590101
+09c301010958010007010001050a0701000105020202010302020503080009cb08000100
+090a010009150100092a01000908010009280101090c0100092a0100091f010109c30101
+0958010007010001050a07010001050202020103020205030800091d08000908080009a2
+08000100090a010009040102090c010009040101090b010009030104090a010109020100
+0907010009280101090b010009040101090b010009030104090a010109020100091e0101
+09180100090a01000922010209770101090a0100094c010007010001050a070100010502
+02020103020205030800091d080009ac08000100090a01000903010009020100090a0100
+090401000901010009090101090301000902010009090100090101000902010009060100
+09280101090a010009040100090101000909010109030100090201000909010009010100
+09020100091d010109180100090a0100092401000977010109090101094c010007010001
+050a07010001050202020103020205030800090908020903080209030802090208000901
+0800090308020903080209030802099408000100090a0100090301000902010009090100
+090501000901010009080100090001000907010009090100090101000903010009050100
+092801010909010009050100090101000908010009000100090701000909010009010100
+09030100091c010109080100090001010903010209020104090801000901010009030102
+090201000900010109020100090001010903010209050100097701010908010009000100
+094c010007010001050a0701000105020202010302020503080009080800090208000901
+080009020800090108000902080009010800090008000906080009020800090208000901
+080009020800099308000100090a01000903010009020100090801000906010009010100
+090a010009060100090a0100090101000904010009040100092801010908010009060100
+09010100090a010009060100090a01000901010009040100091b01010908010109010100
+090101000902010009030100090a01000900010009030100090201000901010109010100
+090101010901010009010100090201000904010009770101090a0100094c010007010001
+050a07010001050202020103020205030800090808000905080009020800090108000902
+080009010801090708000902080009020800090108000997080001000908010109050102
+090801000907010009010100090a010009060100090a0100090101000905010009040101
+09260101090701000907010009010100090a010009060100090a01000901010009050100
+091a01010908010009020100090101000902010009030100090a01010904010009020100
+09010100090501000902010009010100090201000904010009770101090a0100094c0100
+07010001050a070100010502020201030202050308000908080009050800090208000901
+08000902080009010801090708000902080409020802099408000100090a010009030100
+09020100090801000906010009010100090a010009060100090a01000901010009040100
+0904010009280101090801000906010009010100090a010009060100090a010009010100
+09040100091b010109080100090201000901010409030100090a01010904010409010100
+0905010009020100090101040904010009770101090a0100094c010007010001050a0701
+000105020202010302020503080009080800090508000902080009010800090208000901
+080009000800090608000902080009090800099308000100090a01000903010009020100
+090901000905010009010100090a010009050100090b0100090101000903010009050100
+09280101090901000905010009010100090a010009050100090b01000901010009030100
+091c010109080100090201000901010009070100090a0100090001000903010009050100
+0905010009020100090101000908010009770101090a0100094c010007010001050a0701
+000105020202010302020503080009080800090208000901080009020800090108000902
+080009010800090108000905080009020800090208000901080009020800099308000100
+090a01000903010009020100090301010904010009040100090101000903010109040100
+09050100090501010903010009010100090201000906010009280101090a010009040100
+0901010009030101090401000905010009050101090301000901010009020100091d0101
+0908010009020100090101000902010009030100090a0100090101000902010009020100
+09010100090501000902010009010100090201000904010009770101090a0100094c0100
+07010001050a070100010502020201030202050308000909080209030802090308020902
+080009020800090408000903080209030802099408000100090a01000904010209040101
+090501000904010109040101090201040903010009050101090401010902010009070100
+09280101090b010009040101090401010902010409030100090501010904010109020100
+091e01010908010009020100090201020905010109080100090201000902010209020100
+090501000902010009020102090501000977010109080104094a010007010001050a0701
+000105020202010302020503080009cb08000100090a0100090d010009060100092a0100
+0908010009280101090c0100092a0100091f0101091c010509a001010958010007010001
+050a0701000105020202010302020503080009cb08000100090b010109090101093b0101
+092901010959010109c301010958010007010001050a0701000105020202010302020503
+080009cb08000100098101010959010109c301010958010007010001050a070100010502
+0202010302020503080009cb08000100098101010959010109c301010958010007010001
+050a0701000105020202010302020503080009cb08000100098101010959010109c30101
+0958010007010001050a0701000105020202010302020503080009cb0800010009810101
+0959010109c301010958010007010001050a0701000105020202010302020503080009cb
+08000100098101010959010109c301010958010007010001050a07010001050202020103
+0202050308cd01ff01ff010007010001050a070100010502020201030202050301ff01ff
+01ce07010001050a0701000105020202010302020503010000cb01010081010100590101
+00c301010058010007010001050a0701000105020202010302020503010000cb01010081
+01010059010100c301010058010007010001050a07010001050202020103020205030100
+00cb010100810101000c0100002a0100001f010100c301010058010007010001050a0701
+00010502020201030202050301000010010200090100000d0102000a010200100100007b
+010100810101000b010000040101000b010000050100000c010100020100001e01010010
+010200090100000d010200930101000a0101004b010007010001050a0701000105020202
+01030202050301000012010000090100000f0100000c010000100100007b010100810101
+000a010000040100000101000009010100040101000b01000001010000020100001d0101
+0012010000090100000f0100009301010009010000010100004a010007010001050a0701
+000105020202010302020503010000090101000001000004010000030102000201000000
+01010003010200050100000c010000030102000301020002010000010100000301020071
+01010081010100090100000501000001010000080100000001000003010000000100000b
+01000001010000030100001c010100090101000001000004010000030102000201000000
+01010003010200050100000901000000010100030102000201010000010000030102000a
+01020003010200020100000001010002010000020100000201020002010000000101003f
+01010009010000010100004a010007010001050a07010001050202020103020205030100
+000801000001010100040100000201000002010000010101000101000001010000020100
+00040100000c010000020100000201000001010000020100000101000000010000030100
+000201000070010100810101000801000006010000010100000a010000050100000b0100
+0001010000040100001b0101000801000001010100040100000201000002010000010101
+000101000001010000020100000401000009010100010100000101000002010000010100
+000001000000010000010100000201000008010000020100000101000002010000010101
+00010100000101000002010000010100000201000001010100010100003e010100090100
+00010100004a010007010001050a07010001050202020103020205030100000801000002
+010000040100000201000002010000010100000201000005010000040100000c01000002
+010000020100000101000005010100040100007401010081010100070100000701000001
+0100000a010000050100000b01000001010000050100001a010100080100000201000004
+010000020100000201000001010000020100000501000004010000090100000201000005
+010000010100000001000000010000010100000201000008010000050100000201000001
+01000005010000020100000101000002010000010100004201010009010000010100004a
+010007010001050a07010001050202020103020205030100000801000002010000040100
+000201000002010000010100000201000002010300040100000c01000002010000020100
+0001010000050101000501020071010100810101000801000006010000010100000a0100
+00050100000b01000001010000040100001b010100080100000201000004010000020100
+000201000001010000020100000201030004010000090100000201000002010300010100
+000001000000010000010104000901020002010400010100000601000000010000020104
+00010100004201010009010000010100004a010007010001050a07010001050202020103
+020205030100000801000002010000040100000201000002010000010100000201000001
+01000002010000040100000c010000020100000201000001010000050100000001000007
+01000070010100810101000901000005010000010100000a010000050100000b01000001
+010000030100001c01010008010000020100000401000002010000020100000101000002
+010000010100000201000004010000090100000201000001010000020100000101000000
+010000000100000101000010010000010100000501000006010000000100000201000005
+0100004201010009010000010100004a010007010001050a070100010502020201030202
+050301000008010000010101000401000002010000020100000101010001010000010100
+0002010000040100000c0100000201000002010000010100000201000001010000010100
+00020100000201000070010100810101000a010000040100000101000003010100040100
+0005010000050101000301000001010000020100001d0101000801000001010100040100
+000201000002010000010101000101000001010000020100000401000009010000020100
+000101000002010000010100000001000000010000010100000201000008010000020100
+000101000002010000010100000701000003010000020100000101000042010100090100
+00010100004a010007010001050a07010001050202020103020205030100000901010000
+0100000401000003010200020100000001010003010300040100000c0100000301020003
+01020002010000020100000201020071010100810101000b010000040101000401010002
+010400010104000301010004010100020100001e01010009010100000100000401000003
+010200020100000001010003010300040100000901000002010000020103000101000000
+01000000010000020102000a010200030102000201000007010000040102000201000042
+0101000a0101004b010007010001050a07010001050202020103020205030100000c0100
+002301050093010100810101000c0100002a0100001f0101000c010000230105001c0105
+006801010058010007010001050a07010001050202020103020205030100000801000002
+010000bd01010081010100590101000801000002010000b501010058010007010001050a
+070100010502020201030202050301000009010200be0101008101010059010100090102
+00b601010058010007010001050a0701000105020202010302020503010000cb01010081
+01010059010100c301010058010007010001050a07010001050202020103020205030100
+00cb0101008101010059010100c301010058010007010001050a07010001050202020103
+02020503010000cb0101008101010059010100c301010058010007010001050a07010001
+05020202010302020503010000cb0101008101010059010100c301010058010007010001
+050a070100010502020201030202050301ff01ff01ce07010001050a0701000105020202
+01030202050301ff01ff01ce07010001050a0701000105020202010302020503010000cb
+0101008101010059010100c301010058010007010001050a070100010502020201030202
+0503010000cb0101008101010059010100c301010058010007010001050a070100010502
+0202010302020503010000cb010100810101000c0100002a0100001f010100c301010058
+010007010001050a070100010502020201030202050301000010010200090100000d0102
+009b010100810101000b010000040101000b010000050100000c010100020100001e0101
+0010010200090100000d010200930101000a0101004b010007010001050a070100010502
+020201030202050301000012010000090100000f0100009b010100810101000a01000004
+0100000101000009010100040101000b01000001010000020100001d0101001201000009
+0100000f0100009301010009010000010100004a010007010001050a0701000105020202
+010302020503010000090101000001000004010000030102000201000000010100030102
+000501000009010000000101000301020002010100000100000301020003010200710101
+0081010100090100000501000001010000080100000001000003010000000100000b0100
+0001010000030100001c0101000901010000010000040100000301020002010000000101
+0003010200050100000901000000010100030102000201010000010000030102000a0102
+0003010200020100000001010002010000020100000201020002010000000101003f0101
+0009010000010100004a010007010001050a070100010502020201030202050301000008
+010000010101000401000002010000020100000101010001010000010100000201000004
+010000090101000101000001010000020100000101000000010000000100000101000002
+010000010100000201000070010100810101000801000006010000010100000a01000005
+0100000b01000001010000040100001b0101000801000001010100040100000201000002
+010000010101000101000001010000020100000401000009010100010100000101000002
+010000010100000001000000010000010100000201000008010000020100000101000002
+01000001010100010100000101000002010000010100000201000001010100010100003e
+01010009010000010100004a010007010001050a07010001050202020103020205030100
+000801000002010000040100000201000002010000010100000201000005010000040100
+000901000002010000050100000101000000010000000100000101000002010000010100
+0074010100810101000701000007010000010100000a010000050100000b010000010100
+00050100001a010100080100000201000004010000020100000201000001010000020100
+000501000004010000090100000201000005010000010100000001000000010000010100
+000201000008010000050100000201000001010000050100000201000001010000020100
+00010100004201010009010000010100004a010007010001050a07010001050202020103
+020205030100000801000002010000040100000201000002010000010100000201000002
+010300040100000901000002010000020103000101000000010000000100000101040002
+01020071010100810101000801000006010000010100000a010000050100000b01000001
+010000040100001b01010008010000020100000401000002010000020100000101000002
+010000020103000401000009010000020100000201030001010000000100000001000001
+010400090102000201040001010000060100000001000002010400010100004201010009
+010000010100004a010007010001050a0701000105020202010302020503010000080100
+000201000004010000020100000201000001010000020100000101000002010000040100
+000901000002010000010100000201000001010000000100000001000001010000090100
+0070010100810101000901000005010000010100000a010000050100000b010000010100
+00030100001c010100080100000201000004010000020100000201000001010000020100
+000101000002010000040100000901000002010000010100000201000001010000000100
+000001000001010000100100000101000005010000060100000001000002010000050100
+004201010009010000010100004a010007010001050a0701000105020202010302020503
+010000080100000101010004010000020100000201000001010100010100000101000002
+010000040100000901000002010000010100000201000001010000000100000001000001
+01000002010000010100000201000070010100810101000a010000040100000101000003
+0101000401000005010000050101000301000001010000020100001d0101000801000001
+010100040100000201000002010000010101000101000001010000020100000401000009
+010000020100000101000002010000010100000001000000010000010100000201000008
+010000020100000101000002010000010100000701000003010000020100000101000042
+01010009010000010100004a010007010001050a07010001050202020103020205030100
+000901010000010000040100000301020002010000000101000301030004010000090100
+000201000002010300010100000001000000010000020102000301020071010100810101
+000b010000040101000401010002010400010104000301010004010100020100001e0101
+000901010000010000040100000301020002010000000101000301030004010000090100
+000201000002010300010100000001000000010000020102000a01020003010200020100
+00070100000401020002010000420101000a0101004b010007010001050a070100010502
+02020103020205030100000c0100002301050093010100810101000c0100002a0100001f
+0101000c010000230105001c0105006801010058010007010001050a0701000105020202
+0103020205030100000801000002010000bd010100810101005901010008010000020100
+00b501010058010007010001050a070100010502020201030202050301000009010200be
+010100810101005901010009010200b601010058010007010001050a0701000105020202
+010302020503010000cb0101008101010059010100c301010058010007010001050a0701
+000105020202010302020503010000cb0101008101010059010100c30101005801000701
+0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
+0058010007010001050a0701000105020202010302020503010000cb0101008101010059
+010100c301010058010007010001050a070100010502020201030202050301ff01ff01ce
+07010001050a070100010502020201030202050301ff01ff01ce07010001050a07010001
+05020202010302020503010000cb0101008101010059010100c301010058010007010001
+050a0701000105020202010302020503010000cb0101008101010059010100c301010058
+010007010001050a0701000105020202010302020503010000cb010100810101000c0100
+002a0100001f010100c301010058010007010001050a0701000105020202010302020503
+01000010010200090100000d0102004301000056010100810101000b010000040101000b
+010000050100000c010100020100001e01010010010200090100000d010200930101000a
+0101004b010007010001050a070100010502020201030202050301000012010000090100
+000f0100004301000056010100810101000a010000040100000101000009010100040101
+000b01000001010000020100001d01010012010000090100000f01000093010100090100
+00010100004a010007010001050a07010001050202020103020205030100000901010000
+010000040100000301020002010000000101000301020005010000090100000001010003
+010200020101000001000003010200030102000a01020002010000020100000101040054
+01010081010100090100000501000001010000080100000001000003010000000100000b
+01000001010000030100001c010100090101000001000004010000030102000201000000
+01010003010200050100000901000000010100030102000201010000010000030102000a
+01020003010200020100000001010002010000020100000201020002010000000101003f
+01010009010000010100004a010007010001050a07010001050202020103020205030100
+000801000001010100040100000201000002010000010101000101000001010000020100
+000401000009010100010100000101000002010000010100000001000000010000010100
+000201000001010000020100000801000002010000010100000201000003010000560101
+00810101000801000006010000010100000a010000050100000b01000001010000040100
+001b01010008010000010101000401000002010000020100000101010001010000010100
+000201000004010000090101000101000001010000020100000101000000010000000100
+000101000002010000080100000201000001010000020100000101010001010000010100
+0002010000010100000201000001010100010100003e01010009010000010100004a0100
+07010001050a070100010502020201030202050301000008010000020100000401000002
+010000020100000101000002010000050100000401000009010000020100000501000001
+01000000010000000100000101000002010000010100000c010000020100000201000000
+0100000401000056010100810101000701000007010000010100000a010000050100000b
+01000001010000050100001a010100080100000201000004010000020100000201000001
+010000020100000501000004010000090100000201000005010000010100000001000000
+010000010100000201000008010000050100000201000001010000050100000201000001
+01000002010000010100004201010009010000010100004a010007010001050a07010001
+050202020103020205030100000801000002010000040100000201000002010000010100
+000201000002010300040100000901000002010000020103000101000000010000000100
+000101040002010200090104000301000005010000560101008101010008010000060100
+00010100000a010000050100000b01000001010000040100001b01010008010000020100
+000401000002010000020100000101000002010000020103000401000009010000020100
+000201030001010000000100000001000001010400090102000201040001010000060100
+000001000002010400010100004201010009010000010100004a010007010001050a0701
+000105020202010302020503010000080100000201000004010000020100000201000001
+010000020100000101000002010000040100000901000002010000010100000201000001
+010000000100000001000001010000090100000801000006010000000100000401000056
+010100810101000901000005010000010100000a010000050100000b0100000101000003
+0100001c0101000801000002010000040100000201000002010000010100000201000001
+010000020100000401000009010000020100000101000002010000010100000001000000
+010000010100001001000001010000050100000601000000010000020100000501000042
+01010009010000010100004a010007010001050a07010001050202020103020205030100
+000801000001010100040100000201000002010000010101000101000001010000020100
+000401000009010000020100000101000002010000010100000001000000010000010100
+000201000001010000020100000801000002010000010100000201000003010000560101
+00810101000a010000040100000101000003010100040100000501000005010100030100
+0001010000020100001d0101000801000001010100040100000201000002010000010101
+000101000001010000020100000401000009010000020100000101000002010000010100
+000001000000010000010100000201000008010000020100000101000002010000010100
+00070100000301000002010000010100004201010009010000010100004a010007010001
+050a07010001050202020103020205030100000901010000010000040100000301020002
+010000000101000301030004010000090100000201000002010300010100000001000000
+01000002010200030102000a01020002010000020100000401010054010100810101000b
+010000040101000401010002010400010104000301010004010100020100001e01010009
+010100000100000401000003010200020100000001010003010300040100000901000002
+01000002010300010100000001000000010000020102000a010200030102000201000007
+0100000401020002010000420101000a0101004b010007010001050a0701000105020202
+0103020205030100000c010000230105002301050069010100810101000c0100002a0100
+001f0101000c010000230105001c0105006801010058010007010001050a070100010502
+02020103020205030100000801000002010000bd01010081010100590101000801000002
+010000b501010058010007010001050a0701000105020202010302020503010000090102
+00be010100810101005901010009010200b601010058010007010001050a070100010502
+0202010302020503010000cb0101008101010059010100c301010058010007010001050a
+0701000105020202010302020503010000cb0101008101010059010100c3010100580100
+07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
+01010058010007010001050a0701000105020202010302020503010000cb010100810101
+0059010100c301010058010007010001050a070100010502020201030202050301ff01ff
+01ce07010001050a070100010502020201030202050308cd01ff01ff010007010001050a
+0701000105020202010302020503080000cb08000100008101010059010100c301010058
+010007010001050a0701000105020202010302020503080000cb08000100000b0101004e
+0101002201010059010100c301010058010007010001050a070100010502020201030202
+0503080000cb08000100000a0100001c0100002a01000008010000210101000c0100002a
+0100001f010100c301010058010007010001050a07010001050202020103020205030800
+00cb08000100000a01000005010000040102000c010000040101000d010000020102000b
+0101000201000007010000210101000b010000040101000d010000020102000b01010002
+0100001e0101002001010018010000150100006f01010009010200020104004301000701
+0001050a0701000105020202010302020503080000cb08000100000a0100000401010003
+010000020100000a01000004010000010100000b01010001010000020100000901000001
+0100000201000006010000210101000a01000004010000010100000b0101000101000002
+0100000901000001010000020100001d0101001f0100001a010000150100006f01010008
+010000020100000101000047010007010001050a07010001050202020103020205030800
+000908010000080000020802000908000000080100030802000208010000080000030802
+00030802008d08000100000a010000030100000001000007010000090100000501000001
+0100000a0100000001000005010000090100000101000003010000050100002101010009
+01000005010000010100000a01000000010000050100000901000001010000030100001c
+0101000901010000010000020102000b0100000301000000010100030102000201000000
+0101000201040002010200020100000001010003010100000100006f0101000801000002
+0100000101000047010007010001050a0701000105020202010302020503080000080800
+000108010001080000020800000808010001080000010800000208000001080000000800
+0000080000010800000208000001080000020800008c08000100000a0100000501000007
+010000080100000601000001010000090100000101000005010000090100000101000004
+010000040100002101010008010000060100000101000009010000010100000501000009
+01000001010000040100001b010100080100000101010001010000020100000801040001
+010100010100000101000002010000010101000101000003010000030100000201000001
+0101000101000001010000010101006f0101000801000002010000010103004401000701
+0001050a07010001050202020103020205030800000808000002080000010800000c0800
+000208000005080000010800000008000000080000010800000208000001080000900800
+010000080101000601000006010000080100000701000001010000080100000201000003
+0101000a0100000101000005010000040101001f01010007010000070100000101000008
+01000002010000030101000a01000001010000050100001a010100080100000201000001
+0100000e0100000301000005010000020100000101000002010000030100000301000002
+010000010100000201000001010000020100006f01010009010200060100004301000701
+0001050a0701000105020202010302020503080000080800000208000002080200090800
+00020800000208030001080000000800000008000001080400020802008d08000100000a
+01000005010000050100000a010000060100000101000008010000020100000501000009
+010000010100000401000004010000210101000801000006010000010100000801000002
+010000050100000901000001010000040100001b0101000801000002010000020102000b
+010000030100000501000002010000010100000201000003010000030104000101000002
+01000001010000020100006f01010008010000020100000501000043010007010001050a
+070100010502020201030202050308000008080000020800000508000008080000020800
+00010800000208000001080000000800000008000001080000090800008c08000100000a
+01000005010000040100000c010000050100000101000008010500040100000901000001
+010000030100000501000021010100090100000501000001010000080105000401000009
+01000001010000030100001c0101000801000002010000050100000a0100000301000005
+010000020100000101000002010000030100000301000005010000020100000101000002
+0100006f0101000801000002010000010100000201000043010007010001050a07010001
+050202020103020205030800000808000001080100010800000208000008080000020800
+000108000002080000010800000008000000080000010800000208000001080000020800
+008c08000100000a01000005010000030100000701010004010000040100000101000003
+010100060100000101000002010000030101000301000001010000020100000601000021
+0101000a0100000401000001010000030101000601000001010000020100000301010003
+01000001010000020100001d010100080100000101010001010000020100000a01000003
+010000050100000201000001010000020100000301000003010000020100000101000002
+01000001010000010101006f010100080100000201000001010000020100004301000701
+0001050a0701000105020202010302020503080000090801000008000002080200090800
+00020800000208030001080000000800000008000002080200030802008d08000100000a
+010000030104000101040003010100050100000401010004010100060100000201020004
+010100040101000201000007010000210101000b01000004010100040101000601000002
+0102000401010004010100020100001e0101000901010000010000020102000b01000003
+010000060102000201000002010000040101000201020002010000020100000201010000
+0100006f010100090102000301020044010007010001050a070100010502020201030202
+05030800000c08000007080500af08000100000a01000014010000060100002a01000008
+010000210101000c0100002a0100001f0101000c01000007010500a70101005801000701
+0001050a07010001050202020103020205030800000808000002080000bd08000100000b
+010100100101003b01010022010100590101000801000002010000b50101005801000701
+0001050a070100010502020201030202050308000009080200be08000100008101010059
+01010009010200b601010058010007010001050a07010001050202020103020205030800
+00cb08000100008101010059010100c301010058010007010001050a0701000105020202
+010302020503080000cb08000100008101010059010100c301010058010007010001050a
+0701000105020202010302020503080000cb08000100008101010059010100c301010058
+010007010001050a0701000105020202010302020503080000cb08000100008101010059
+010100c301010058010007010001050a070100010502020201030202050308cd01ff01ff
+010007010001050a070100010502020201030202050308cd01ff01ff010007010001050a
+0701000105020202010302020503080000cb08000100008101010059010100c301010058
+010007010001050a0701000105020202010302020503080000cb08000100000b0101004e
+0101002201010059010100c301010058010007010001050a070100010502020201030202
+0503080000cb08000100000a0100001c0100002a01000008010000210101000c0100002a
+0100001f010100c301010058010007010001050a07010001050202020103020205030800
+00110800000308000010080000010800009e08000100000a01000005010000040102000c
+010000040101000d010000050100000a0101000201000007010000210101000b01000004
+0101000d010000050100000a010100020100001e010100c30101000a0100000401020044
+010007010001050a07010001050202020103020205030800001108000003080000100800
+00010800009e08000100000a0100000401010003010000020100000a0100000401000001
+0100000b0101000401010009010000010100000201000006010000210101000a01000004
+010000010100000b010100040101000901000001010000020100001d010100c301010009
+010100030100000201000043010007010001050a07010001050202020103020205030800
+0009080100000800000108040001080000010800000a0801000008000001080000000801
+009b08000100000a0100000301000000010000070100000901000005010000010100000a
+010000000100000301000000010000090100000101000003010000050100002101010009
+01000005010000010100000a010000000100000301000000010000090100000101000003
+0100001c010100c30101000801000000010000030100000201000043010007010001050a
+070100010502020201030202050308000008080000010801000308000003080000000800
+000a0800000108010001080100010800009a08000100000a010000050100000701000008
+010000060100000101000009010000010100000201000001010000090100000101000004
+010000040100002101010008010000060100000101000009010000010100000201000001
+0100000901000001010000040100001b010100c30101000a010000030100000201000043
+010007010001050a07010001050202020103020205030800000808000002080000030800
+00030801000b0800000208000001080000020800009a0800010000080101000601000005
+010100080100000701000001010000080100000201000001010000020100000901000001
+01000005010000040101001f010100070100000701000001010000080100000201000001
+010000020100000901000001010000050100001a010100c30101000a0100000401030043
+010007010001050a07010001050202020103020205030800000808000002080000030800
+00030801000b0800000208000001080000020800009a08000100000a0100000501000007
+010000080100000601000001010000080100000201000001010000020100000901000001
+010000040100000401000021010100080100000601000001010000080100000201000001
+010000020100000901000001010000040100001b010100c30101000a0100000701000043
+010007010001050a07010001050202020103020205030800000808000002080000030800
+0003080000000800000a0800000208000001080000020800009a08000100000a01000005
+010000070100000901000005010000010100000801050000010500080100000101000003
+010000050100002101010009010000050100000101000008010500000105000801000001
+010000030100001c010100c30101000a0100000701000043010007010001050a07010001
+050202020103020205030800000808000001080100030800000308000001080000090800
+000108010001080100010800009a08000100000a01000005010000030100000201000003
+010100040100000401000001010000030101000601000005010000030101000301000001
+0100000201000006010000210101000a0100000401000001010000030101000601000005
+010000030101000301000001010000020100001d010100c30101000a0100000301000002
+01000043010007010001050a070100010502020201030202050308000009080100000800
+00040801000108000002080000090801000008000001080000000801009b08000100000a
+010000030104000201020004010100050100000401010004010100060100000501000003
+010100040101000201000007010000210101000b01000004010100040101000601000005
+0100000301010004010100020100001e010100c301010008010400020102004401000701
+0001050a07010001050202020103020205030800000c0800000e080500a808000100000a
+01000014010000060100002a01000008010000210101000c0100002a0100001f010100c3
+01010058010007010001050a070100010502020201030202050308000008080000020800
+00bd08000100000b010100100101003b0101002201010059010100c30101005801000701
+0001050a070100010502020201030202050308000009080200be08000100008101010059
+010100c301010058010007010001070c000105020202010302020503080000cb08000100
+008101010059010100c301010058010007010000070d0001050202020103020205030800
+00cb08000100008101010059010100c30101005801000701030e00010502020201030202
+0503080000cb08000100008101010059010100c30101005801000701030e000105020202
+010302020503080000cb08000100008101010059010100c30101005801000701030e0001
+0502020201030202050308cd01ff01ff01000701030e00010502020201030202050308cd
+01ff01ff01000701030e000105020202010302020503080000cb08000100008101010059
+010100c30101005801000701030e000105020202010302020503080000cb08000100000b
+0101004e0101002201010059010100c30101005801000701030e00010502020201030202
+0503080000cb08000100000a0100001c0100002a01000008010000210101000c0100002a
+0100001f010100c30101005801000701030e000105020202010302020503080000110800
+000308000010080000010800009e08000100000a01000005010000070100000b01000004
+0101000d010000050100000a0101000201000007010000210101000b010000040101000d
+010000050100000a010100020100001e010100c301010008010400020102004401000701
+030e000105020202010302020503080000110800000308000010080000010800009e0800
+0100000a01000004010100060101000a01000004010000010100000b0101000401010009
+010000010100000201000006010000210101000a01000004010000010100000b01010004
+0101000901000001010000020100001d010100c301010008010000050100000201000043
+01000701030e000105020202010302020503080000090801000008000001080400010800
+00010800000a0801000008000001080000000801009b08000100000a0100000301000000
+01000005010000000100000901000005010000010100000a010000000100000301000000
+01000009010000010100000301000005010000210101000901000005010000010100000a
+0100000001000003010000000100000901000001010000030100001c010100c301010008
+01000005010000020100004301000701030e000105020202010302020503080000080800
+00010801000308000003080000000800000a0800000108010001080100010800009a0800
+0100000a0100000501000004010000010100000801000006010000010100000901000001
+010000020100000101000009010000010100000401000004010000210101000801000006
+01000001010000090100000101000002010000010100000901000001010000040100001b
+010100c30101000801030002010000020100004301000701030e00010502020201030202
+0503080000080800000208000003080000030801000b0800000208000001080000020800
+009a08000100000801010006010000030100000201000007010000070100000101000008
+010000020100000101000002010000090100000101000005010000040101001f01010007
+010000070100000101000008010000020100000101000002010000090100000101000005
+0100001a010100c30101000c010000020102004401000701030e00010502020201030202
+0503080000080800000208000003080000030801000b0800000208000001080000020800
+009a08000100000a01000005010000030100000201000008010000060100000101000008
+010000020100000101000002010000090100000101000004010000040100002101010008
+010000060100000101000008010000020100000101000002010000090100000101000004
+0100001b010100c30101000c01000001010000020100004301000701030e000105020202
+01030202050308000008080000020800000308000003080000000800000a080000020800
+0001080000020800009a08000100000a0100000501000003010500080100000501000001
+010000080105000001050008010000010100000301000005010000210101000901000005
+0100000101000008010500000105000801000001010000030100001c010100c301010008
+0100000201000001010000020100004301000701030e0001050202020103020205030800
+000808000001080100030800000308000001080000090800000108010001080100010800
+009a08000100000a01000005010000070100000301010004010000040100000101000003
+01010006010000050100000301010003010000010100000201000006010000210101000a
+010000040100000101000003010100060100000501000003010100030100000101000002
+0100001d010100c3010100080100000201000001010000020100004301000701030e0001
+050202020103020205030800000908010000080000040801000108000002080000090801
+000008000001080000000801009b08000100000a01000003010400050100000301010005
+010000040101000401010006010000050100000301010004010100020100000701000021
+0101000b010000040101000401010006010000050100000301010004010100020100001e
+010100c301010009010200030102004401000701030e0001050202020103020205030800
+000c0800000e080500a808000100000a01000014010000060100002a0100000801000021
+0101000c0100002a0100001f010100c30101005801000701030e00010502020201030202
+05030800000808000002080000bd08000100000b010100100101003b0101002201010059
+010100c30101005801000701030e00010502020201030202050308000009080200be0800
+0100008101010059010100c30101005801000701030e0001050202020103020205030800
+00cb08000100008101010059010100c30101005801000701030e00010502020201030202
+0503080000cb08000100008101010059010100c30101005801000701030e000105020202
+010302020503080000cb08000100008101010059010100c30101005801000701030e0001
+05020202010302020503080000cb08000100008101010059010100c30101005801000701
+030e00010502020201030202050308cd01ff01ff01000701030e00010502020201030202
+050308cd01ff01ff01000701030e000105020202010302020503080000cb080001000081
+01010059010100c30101005801000701030e000105020202010302020503080000cb0800
+0100000b0101004e0101002201010059010100c30101005801000701030e000105020202
+010302020503080000cb08000100000a0100001c0100002a01000008010000210101000c
+0100002a0100001f010100c30101005801000701030e0001050202020103020205030800
+00110800000308000010080000010800009e08000100000a01000005010000030104000b
+010000040101000d010000050100000a0101000201000007010000210101000b01000004
+0101000d010000050100000a010100020100001e010100c3010100090102000301020044
+01000701030e000105020202010302020503080000110800000308000010080000010800
+009e08000100000a01000004010100030100000e01000004010000010100000b01010004
+01010009010000010100000201000006010000210101000a01000004010000010100000b
+010100040101000901000001010000020100001d010100c3010100080100000201000001
+010000020100004301000701030e00010502020201030202050308000009080100000800
+000108040001080000010800000a0801000008000001080000000801009b08000100000a
+0100000301000000010000030100000d01000005010000010100000a0100000001000003
+010000000100000901000001010000030100000501000021010100090100000501000001
+0100000a0100000001000003010000000100000901000001010000030100001c010100c3
+0101000c010000050100004301000701030e000105020202010302020503080000080800
+00010801000308000003080000000800000a0800000108010001080100010800009a0800
+0100000a0100000501000003010300090100000601000001010000090100000101000002
+010000010100000901000001010000040100000401000021010100080100000601000001
+010000090100000101000002010000010100000901000001010000040100001b010100c3
+0101000c010000050100004301000701030e000105020202010302020503080000080800
+000208000003080000030801000b0800000208000001080000020800009a080001000008
+010100060100000701000007010000070100000101000008010000020100000101000002
+010000090100000101000005010000040101001f01010007010000070100000101000008
+0100000201000001010000020100000901000001010000050100001a010100c30101000a
+010100040101004401000701030e00010502020201030202050308000008080000020800
+0003080000030801000b0800000208000001080000020800009a08000100000a01000005
+010000070100000801000006010000010100000801000002010000010100000201000009
+010000010100000401000004010000210101000801000006010000010100000801000002
+01000001010000020100000901000001010000040100001b010100c30101000c01000005
+0100004301000701030e0001050202020103020205030800000808000002080000030800
+0003080000000800000a0800000208000001080000020800009a08000100000a01000005
+010000030100000201000009010000050100000101000008010500000105000801000001
+010000030100000501000021010100090100000501000001010000080105000001050008
+01000001010000030100001c010100c30101000c010000050100004301000701030e0001
+050202020103020205030800000808000001080100030800000308000001080000090800
+000108010001080100010800009a08000100000a01000005010000030100000201000003
+010100040100000401000001010000030101000601000005010000030101000301000001
+0100000201000006010000210101000a0100000401000001010000030101000601000005
+010000030101000301000001010000020100001d010100c3010100080100000201000001
+010000020100004301000701030e00010502020201030202050308000009080100000800
+00040801000108000002080000090801000008000001080000000801009b08000100000a
+010000030104000201020004010100050100000401010004010100060100000501000003
+010100040101000201000007010000210101000b01000004010100040101000601000005
+0100000301010004010100020100001e010100c301010009010200030102004401000701
+030e0001050202020103020205030800000c0800000e080500a808000100000a01000014
+010000060100002a01000008010000210101000c0100002a0100001f010100c301010058
+01000701030e0001050202020103020205030800000808000002080000bd08000100000b
+010100100101003b0101002201010059010100c30101005801000701030e000105020202
+01030202050308000009080200be08000100008101010059010100c30101005801000701
+030e000105020202010302020503080000cb08000100008101010059010100c301010058
+01000701030e000105020202010302020503080000cb08000100008101010059010100c3
+0101005801000701030e000105020202010302020503080000cb08000100008101010059
+010100c30101005801000701030e000105020202010302020503080000cb080001000081
+01010059010100c30101005801000701030e00010502020201030202050308cd01ff01ff
+01000701030e00010502020201030202050308cd01ff01ff01000701030e000105020202
+010302020503080000cb08000100008101010059010100c30101005801000701030e0001
+05020202010302020503080000cb08000100000b0101004e0101002201010059010100c3
+0101005801000701030e000105020202010302020503080000cb08000100000a0100001c
+0100002a01000008010000210101000c0100002a0100001f010100c30101005801000701
+030e000105020202010302020503080000110800000308000010080000010800009e0800
+0100000a01000005010000040102000c010000040101000d010000050100000a01010002
+01000007010000210101000b010000040101000d010000050100000a010100020100001e
+010100c30101000a0101004b01000701030e000105020202010302020503080000110800
+000308000010080000010800009e08000100000a0100000401010003010000020100000a
+01000004010000010100000b010100040101000901000001010000020100000601000021
+0101000a01000004010000010100000b010100040101000901000001010000020100001d
+010100c301010009010000010100004a01000701030e0001050202020103020205030800
+0009080100000800000108040001080000010800000a0801000008000001080000000801
+009b08000100000a0100000301000000010000030100000d01000005010000010100000a
+010000000100000301000000010000090100000101000003010000050100002101010009
+01000005010000010100000a010000000100000301000000010000090100000101000003
+0100001c010100c301010009010000010100004a01000701030e00010502020201030202
+050308000008080000010801000308000003080000000800000a08000001080100010801
+00010800009a08000100000a01000005010000030100000c010000060100000101000009
+010000010100000201000001010000090100000101000004010000040100002101010008
+010000060100000101000009010000010100000201000001010000090100000101000004
+0100001b010100c301010009010000010100004a01000701030e00010502020201030202
+0503080000080800000208000003080000030801000b0800000208000001080000020800
+009a08000100000801010006010000030103000801000007010000010100000801000002
+0100000101000002010000090100000101000005010000040101001f0101000701000007
+01000001010000080100000201000001010000020100000901000001010000050100001a
+010100c301010009010000010100004a01000701030e0001050202020103020205030800
+00080800000208000003080000030801000b0800000208000001080000020800009a0800
+0100000a0100000501000003010000020100000801000006010000010100000801000002
+010000010100000201000009010000010100000401000004010000210101000801000006
+01000001010000080100000201000001010000020100000901000001010000040100001b
+010100c301010009010000010100004a01000701030e0001050202020103020205030800
+0008080000020800000308000003080000000800000a0800000208000001080000020800
+009a08000100000a01000005010000030100000201000009010000050100000101000008
+010500000105000801000001010000030100000501000021010100090100000501000001
+01000008010500000105000801000001010000030100001c010100c30101000901000001
+0100004a01000701030e0001050202020103020205030800000808000001080100030800
+000308000001080000090800000108010001080100010800009a08000100000a01000005
+010000030100000201000003010100040100000401000001010000030101000601000005
+0100000301010003010000010100000201000006010000210101000a0100000401000001
+010000030101000601000005010000030101000301000001010000020100001d010100c3
+01010009010000010100004a01000701030e000105020202010302020503080000090801
+0000080000040801000108000002080000090801000008000001080000000801009b0800
+0100000a0100000301040002010200040101000501000004010100040101000601000005
+01000003010100040101000201000007010000210101000b010000040101000401010006
+010000050100000301010004010100020100001e010100c30101000a0101004b01000701
+030e0001050202020103020205030800000c0800000e080500a808000100000a01000014
+010000060100002a01000008010000210101000c0100002a0100001f010100c301010058
+01000701030e0001050202020103020205030800000808000002080000bd08000100000b
+010100100101003b0101002201010059010100c30101005801000701030e000105020202
+01030202050308000009080200be08000100008101010059010100c30101005801000701
+030e000105020202010302020503080000cb08000100008101010059010100c301010058
+01000701030e000105020202010302020503080000cb08000100008101010059010100c3
+0101005801000701030e000105020202010302020503080000cb08000100008101010059
+010100c30101005801000701030e000105020202010302020503080000cb080001000081
+01010059010100c30101005801000701030e00010502020201030202050308cd01ff01ff
+01000701030e00010502020201030202050308cd01ff01ff01000701030e000105020202
+010302020503080000cb08000100008101010059010100c30101005801000701030e0001
+05020202010302020503080000cb08000100000b0101004e0101002201010059010100c3
+0101005801000701030e000105020202010302020503080000cb08000100000a0100001c
+0100002a01000008010000210101000c0100002a0100001f010100c30101005801000701
+030e000105020202010302020503080000110800000308000010080000010800009e0800
+0100000a01000005010000030104000b010000040101000d010000050100000a01010002
+01000007010000210101000b010000040101000d010000050100000a010100020100001e
+010100c30101000a01000003010400030101003d01000701030e00010502020201030202
+0503080000110800000308000010080000010800009e08000100000a0100000401010003
+010000020100000a01000004010000010100000b01010004010100090100000101000002
+01000006010000210101000a01000004010000010100000b010100040101000901000001
+010000020100001d010100c3010100090101000301000006010000010100003c01000701
+030e00010502020201030202050308000009080100000800000108040001080000010800
+000a0801000008000001080000000801009b08000100000a010000030100000001000007
+0100000901000005010000010100000a0100000001000003010000000100000901000001
+0100000301000005010000210101000901000005010000010100000a0100000001000003
+010000000100000901000001010000030100001c010100c3010100080100000001000003
+01000006010000010100003c01000701030e000105020202010302020503080000080800
+00010801000308000003080000000800000a0800000108010001080100010800009a0800
+0100000a0100000501000006010000090100000601000001010000090100000101000002
+010000010100000901000001010000040100000401000021010100080100000601000001
+010000090100000101000002010000010100000901000001010000040100001b010100c3
+0101000a0100000301030003010000010100003c01000701030e00010502020201030202
+0503080000080800000208000003080000030801000b0800000208000001080000020800
+009a08000100000801010006010000060100000801000007010000010100000801000002
+0100000101000002010000090100000101000005010000040101001f0101000701000007
+01000001010000080100000201000001010000020100000901000001010000050100001a
+010100c30101000a0100000701000002010000010100003c01000701030e000105020202
+010302020503080000080800000208000003080000030801000b08000002080000010800
+00020800009a08000100000a010000050100000601000009010000060100000101000008
+010000020100000101000002010000090100000101000004010000040100002101010008
+010000060100000101000008010000020100000101000002010000090100000101000004
+0100001b010100c30101000a0100000701000002010000010100003c01000701030e0001
+0502020201030202050308000008080000020800000308000003080000000800000a0800
+000208000001080000020800009a08000100000a01000005010000050100000b01000005
+010000010100000801050000010500080100000101000003010000050100002101010009
+010000050100000101000008010500000105000801000001010000030100001c010100c3
+0101000a010000030100000201000002010000010100003c01000701030e000105020202
+010302020503080000080800000108010003080000030800000108000009080000010801
+0001080100010800009a08000100000a0100000501000005010000050101000401000004
+010000010100000301010006010000050100000301010003010000010100000201000006
+010000210101000a01000004010000010100000301010006010000050100000301010003
+01000001010000020100001d010100c30101000a01000003010000020100000201000001
+0100003c01000701030e0001050202020103020205030800000908010000080000040801
+000108000002080000090801000008000001080000000801009b08000100000a01000003
+010400030100000501010005010000040101000401010006010000050100000301010004
+0101000201000007010000210101000b0100000401010004010100060100000501000003
+01010004010100020100001e010100c30101000801040002010200040101003d01000701
+030e0001050202020103020205030800000c0800000e080500a808000100000a01000014
+010000060100002a01000008010000210101000c0100002a0100001f010100c301010058
+01000701030e0001050202020103020205030800000808000002080000bd08000100000b
+010100100101003b0101002201010059010100c30101005801000701030e000105020202
+01030202050308000009080200be08000100008101010059010100c30101005801000701
+030e000105020202010302020503080000cb08000100008101010059010100c301010058
+01000701030e000105020202010302020503080000cb08000100008101010059010100c3
+0101005801000701030e000105020202010302020503080000cb08000100008101010059
+010100c30101005801000701030e000105020202010302020503080000cb080001000081
+01010059010100c30101005801000701030e00010502020201030202050308cd01ff01ff
+01000701030e00010502020201030202050308cd01ff01ff010007010010050202020103
+02020503080000cb08000100008101010059010100c301010058010007010300000c0700
+000105020202010302020503080000cb08000100000b0101004e01010022010100590101
+00c3010100580100070103000001050807010300000105020202010302020503080000cb
+08000100000a0100001c0100002a01000008010000210101000c0100002a0100001f0101
+00c301010058010007010301000105070701030000010502020201030202050308000011
+0800000308000010080000010800009e08000100000a01000005010000040102000c0100
+00040101000d010000050100000a0101000201000007010000210101000b010000040101
+000d010000050100000a010100020100001e010100c30101000801040001010400430100
+070103010001050607010301000105020202010302020503080000110800000308000010
+080000010800009e08000100000a0100000401010003010000020100000a010000040100
+00010100000b0101000401010009010000010100000201000006010000210101000a0100
+0004010000010100000b010100040101000901000001010000020100001d010100c30101
+000801000002010000010100000201000043010007010302000105050701030100010502
+020201030202050308000009080100000800000108040001080000010800000a08010000
+08000001080000000801009b08000100000a010000030100000001000003010000020100
+000901000005010000010100000a01000000010000030100000001000009010000010100
+000301000005010000210101000901000005010000010100000a01000000010000030100
+00000100000901000001010000030100001c010100c30101000c01000005010000430100
+070103020001050407010302000105020202010302020503080000080800000108010003
+08000003080000000800000a0800000108010001080100010800009a08000100000a0100
+000501000003010000020100000801000006010000010100000901000001010000020100
+000101000009010000010100000401000004010000210101000801000006010000010100
+00090100000101000002010000010100000901000001010000040100001b010100c30101
+000b01000005010000440100070103030001050307010302000105020202010302020503
+080000080800000208000003080000030801000b0800000208000001080000020800009a
+080001000008010100060100000401020008010000070100000101000008010000020100
+000101000002010000090100000101000005010000040101001f01010007010000070100
+0001010000080100000201000001010000020100000901000001010000050100001a0101
+00c30101000b010000050100004401000701030300010502070103030001050202020103
+02020503080000080800000208000003080000030801000b080000020800000108000002
+0800009a08000100000a0100000501000003010000020100000801000006010000010100
+000801000002010000010100000201000009010000010100000401000004010000210101
+000801000006010000010100000801000002010000010100000201000009010000010100
+00040100001b010100c30101000b01000005010000440100070103040001050107010303
+00010502020201030202050308000008080000020800000308000003080000000800000a
+0800000208000001080000020800009a08000100000a0100000501000003010000020100
+000901000005010000010100000801050000010500080100000101000003010000050100
+002101010009010000050100000101000008010500000105000801000001010000030100
+001c010100c30101000a0100000501000045010007010304000105000701030400010502
+020201030202050308000008080000010801000308000003080000010800000908000001
+08010001080100010800009a08000100000a010000050100000301000002010000030101
+000401000004010000010100000301010006010000050100000301010003010000010100
+000201000006010000210101000a01000004010000010100000301010006010000050100
+00030101000301000001010000020100001d010100c30101000a01000005010000450100
+070103050000070203040001050202020103020205030800000908010000080000040801
+000108000002080000090801000008000001080000000801009b08000100000a01000003
+010400020102000401010005010000040101000401010006010000050100000301010004
+0101000201000007010000210101000b0100000401010004010100060100000501000003
+01010004010100020100001e010100c30101000a01000005010000450100070103050000
+070103050001050202020103020205030800000c0800000e080500a808000100000a0100
+0014010000060100002a01000008010000210101000c0100002a0100001f010100c30101
+0058010007010306070103050001050202020103020205030800000808000002080000bd
+08000100000b010100100101003b0101002201010059010100c301010058010007010306
+0700030600010502020201030202050308000009080200be080001000081010100590101
+00c30101005801000701001005020202010302020503080000cb08000100008101010059
+010100c3010100580100070000110502020201030202050207ff07ff07d3051102020103
+0202050207ff07ff07d20000051102020103020205020701030d0000030000ff00ff00af
+03000001030c0001051102020103020205020701030b00010700030000ff00ff00ae0700
+03000003030a00010511020201030202050207010309000207010300000105ff05ff05ab
+0701030000050308000105110202010302020502070103070003050007010300000105ff
+05ff05ab0701030000010501000303060001051102020103020205020701030500030502
+07010300000105ff05ff05ab070103000001050300030304000105110202010302020502
+070103030003050407010300000105ff05ff05ab07010300000105050003030200010511
+0202010302020502070103010003050607010300000105ff05ff05ab0701030000010507
+000303000001051102020103020205020705050807010300000105ff05ff05ab07010300
+000105080703000105110202010302020502070103010703050607010300000105ff05ff
+05ab07010300000105070703030000010511020201030202050207010303070305040701
+0300000105ff05ff05ab0701030000010505070303020001051102020103020205020701
+03050703050207010300000105ff05ff05ab070103000001050307030304000105110202
+010302020502070103070703050007010300000105ff05ff05ab07010300000105010703
+03060001051102020103020205020701030907040300000105ff05ff05ab070103000001
+070303080001051102020103020205020701030b07020300000107ff07ff07ad03000001
+0701030a0001051102020101000405020701030d07000300000007ff07ff07ae03000000
+0700030c000105110005020204000502070100ff00ff00d1051100000202040000000202
+04000502070000ff00ff00d2051100000202040000000202040005ff05ff05e800000202
+040000000202040005ff05ff05e800000202040000000202040005ff05ff05e800000202
+0400000002020400000502ff02ff02dc00060202040000000208040002ff02ff02dc0000
+0208040000000208040002ff02ff02dc00000208040000000208040001ff01ff01dc0000
+020804000000040901ff01ff01dc00000409
+%%EndData
+end
+%%PageTrailer
+%%Trailer
+%%BoundingBox: 0 0 377 205
+%%EOF
diff --git a/lib/tv/doc/src/tv_table_browser.gif b/lib/tv/doc/src/tv_table_browser.gif
new file mode 100644
index 0000000000..9c7cb042ff
--- /dev/null
+++ b/lib/tv/doc/src/tv_table_browser.gif
Binary files differ
diff --git a/lib/tv/doc/src/tv_table_browser.ps b/lib/tv/doc/src/tv_table_browser.ps
new file mode 100644
index 0000000000..e2b195a2e5
--- /dev/null
+++ b/lib/tv/doc/src/tv_table_browser.ps
@@ -0,0 +1,2024 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (ImageMagick)
+%%Title: (/clearcase/otp/erts/lib/tv/doc/src/tv_table_browser.eps)
+%%CreationDate: (Mon Mar 19 17:15:30 2001)
+%%BoundingBox: 0 0 380 315
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 0
+%%EndComments
+
+%%BeginDefaults
+%%PageOrientation: Portrait
+%%EndDefaults
+
+%%BeginProlog
+%
+% Display a color image. The image is displayed in color on
+% Postscript viewers or printers that support color, otherwise
+% it is displayed as grayscale.
+%
+/buffer 512 string def
+/byte 1 string def
+/color_packet 3 string def
+/pixels 768 string def
+
+/DirectClassPacket
+{
+ %
+ % Get a DirectClass packet.
+ %
+ % Parameters:
+ % red.
+ % green.
+ % blue.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/DirectClassImage
+{
+ %
+ % Display a DirectClass image.
+ %
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { DirectClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayDirectClassPacket } image
+ } ifelse
+} bind def
+
+/GrayDirectClassPacket
+{
+ %
+ % Get a DirectClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % red
+ % green
+ % blue
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/GrayPseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassImage
+{
+ %
+ % Display a PseudoClass image.
+ %
+ % Parameters:
+ % class: 0-PseudoClass or 1-Grayscale.
+ %
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ class 0 gt
+ {
+ currentfile buffer readline pop
+ token pop /depth exch def pop
+ /grays columns 8 add depth sub depth mul 8 idiv string def
+ columns rows depth
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { currentfile grays readhexstring pop } image
+ }
+ {
+ %
+ % Parameters:
+ % colors: number of colors in the colormap.
+ % colormap: red, green, blue color packets.
+ %
+ currentfile buffer readline pop
+ token pop /colors exch def pop
+ /colors colors 3 mul def
+ /colormap colors string def
+ currentfile colormap readhexstring pop pop
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { PseudoClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayPseudoClassPacket } image
+ } ifelse
+ } ifelse
+} bind def
+
+/DisplayImage
+{
+ %
+ % Display a DirectClass or PseudoClass image.
+ %
+ % Parameters:
+ % x & y translation.
+ % x & y scale.
+ % label pointsize.
+ % image label.
+ % image columns & rows.
+ % class: 0-DirectClass or 1-PseudoClass.
+ % compression: 0-RunlengthEncodedCompression or 1-NoCompression.
+ % hex color packets.
+ %
+ gsave
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ x y translate
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ currentfile buffer readline pop
+ token pop /pointsize exch def pop
+ /Helvetica findfont pointsize scalefont setfont
+ x y scale
+ currentfile buffer readline pop
+ token pop /columns exch def
+ token pop /rows exch def pop
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ currentfile buffer readline pop
+ token pop /compression exch def pop
+ class 0 gt { PseudoClassImage } { DirectClassImage } ifelse
+ grestore
+} bind def
+%%EndProlog
+%%Page: 1 1
+%%PageBoundingBox: 0 0 380 315
+userdict begin
+%%BeginData:
+DisplayImage
+0 0
+380.000000 315.000000
+12
+760 630
+1
+0
+0
+16
+ffffff
+000000
+d8d8d8
+c2c2c2
+6b6b6b
+d9d9d9
+b22222
+ff0000
+990000
+7f7f7f
+999999
+ff7f7f
+000000
+000000
+000000
+000000
+000a01ff01ff01e1000b0208040001ff01ff01e100000208040000000208040002ff02ff
+02e1000002080400000002080400020000ff00ff00de0400020000000208040000000202
+04060200000004ff04ff04de020000000405020204000000020204000209000d02ff02ff
+02d500000202040000000202040002080000020d04000289010302110103023201020258
+0102020c010102010101021e010102290101020601010208010102310101022a01010230
+0101029600000202040000000202040002080000020d0400028901010202010702000101
+0203010102010101020e01050200010702010103020d0101020401010204010302030103
+020e010302060103020301030203010302060103020b0101020a01010202010102190100
+02030101021c0100020b01010206010102090101021b010202020100020d0101022a0101
+020c0104021e0101029600000202040000000202040002080000020d0400028901010205
+0101020301010203010102010101020e0101020701010203010102010101020c01010202
+010302030101020101010201010102010101020801010201010102010101020401010201
+01010201010102010101020101010201010102040101020101010201010102060101020a
+0101020201010218010102210101020b01010206010102090101021b010202020100020d
+01010238010102020101021d010102960000020204000000020204000208000002020406
+020304000289010102050101020301010203010102010101020e01010207010102030101
+020501010209010102030101020701010201010102010101020601020202010102010101
+020801010201010102010101020101010201010102040101020101010202010202030101
+020a01010203010102020103020301030202010302010104020101010202010302030101
+02000101020a0104020101030203010102000101020301010202010302030101021a0100
+020001010201010002020103020301040202010302020101020901010200010102010101
+020301030203010102020101020001010202010102010103020201010200010102010101
+020301030202010102000101020101010202010302020101020201010285000002020400
+000004030208000002020400030400000203040002890101020501010204010102020100
+02020101020e0101020701010203010202040101020a0100020301010207010102010101
+020101010205010102040101020101010208010102010101020101010201010102010101
+02040101020101010204010102020100020b010102030101020101010201010102010101
+020101010200010102010101020101010203010102010101020101010202010202000101
+020a01010202010102010101020201020200010102020101020101010201010102020101
+021a01000200010102010100020101010201010102010101020101010201010102010101
+020101010209010202000102020001010201010102010101020201010202010202000101
+020101010200010102000101020201020200010202000101020101010201010102010101
+0200010102010101020101010201010102010101020201010285000004030101020b0000
+0203040003020000020404000289010102050101020401010201010102020101020e0104
+0204010102040103020d0101020401010205010202020101020101010204010102050101
+020101010207010102020101020101010202010402040101020101010205010102020101
+020901010203010102010101020101010201010102080101020101010203010102010101
+020101010202010102010101020a01010206010102020101020101010202010102010101
+0201010102020101021a0100020001020200010002010101020101010201010102010101
+0201010102010101020d0101020101010201010102050101020201010202010102010101
+020101010200010102000101020201010201010102010101020501010201010202030101
+0201010102010101020101010202010002890103020b0000020304000302000002040400
+0289010102050101020501010200010002030101020e01010207010102060102020e0100
+020301010207010102010101020101010205010102040101020101010206010102030101
+020101010205010102040101020101010204010102020100020b01010203010102010101
+020101010201010102050104020101010203010102010101020101010202010102010101
+020a0101020301040202010102010101020201010201010502020101021a010002010101
+020001000201010102010101020101010201010102010105020d01010201010102010101
+020201040202010102020101020101010201010102000101020001010202010102010101
+0201010102020104020101010204010102010105020201010200010102890103020b0000
+02040400030000000205040002890101020501010205010302030101020e010102070101
+02070101020d010102030101020701010201010102010101020601020202010102010101
+0205010102040101020101010205010102040101020101010202010202030101020a0101
+020301010201010102010101020101010204010102010101020101010203010102010101
+020101010202010102010101020a01010202010102010101020201010201010102020101
+0201010102060101021a0100020201020201010102010101020101010201010102010101
+021101010201010102010101020101010201010102020101020201010201010102010101
+020101010200010102010101020101010201010102010101020101010201010102040101
+020101010206010102000100028a0103020b000002040400030000000205040002890101
+020501010206010102040101020e01010207010102030101020101010201010102080101
+020401010203010102010101020101010201010102010101020401010201010102010101
+020101010200010502010101020101010201010102010101020101010200010102010101
+0201010102060101020a0101020201010201010102010101020101010202010002000101
+02010101020101010203010102010101020101010202010102010101020a010102020101
+02010101020201010201010102020101020101010202010002010101021b010002020102
+020101010201010102010101020001020201010102020100020101010209010102010101
+020101010201010102010101020201010202010102010101020201010207010102010101
+0201010102010101020101010201010102040101020101010202010002030102028a0103
+020b0000020500000206040002890101020501010206010102040101020e010502030101
+020401030202010102080101020401010204010302030103020201010209010302020101
+0200010502020103020301030202010102010103020b0101020a01010202010102020103
+0203010302020102020001010201010202010101020201030203010102010101020b0102
+020101020200010102010104020301010202010302020101021b01000203010102020103
+020301010200010102020103020201010209010102010101020101010202010202000101
+020101010202010102010101020301050202010102010101020101010202010202000101
+02000101020401010202010302040101028b0103020b0000020d04000289010302110103
+0232010202190100023d0102020c01010237010602230101029e0101028c0103020b0000
+020d040002f2010002ff02540101028c0103020b0000020d040002ff02ff02d70103020c
+040d02ff02ff02d8010302ff02ff02f3010302ff02ff02f30103020200ff00ff00ec0400
+020201030202000004ff04ff04ec0202010302ff02ff02f3010302020500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000202010302020000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000202010302020500000005ff05ff05ea01000202010302020000
+05ff05ff05ea010005000202010302020500000005ff05ff05ea01000202010302020000
+05ff05ff05ea010005000202010302020500000005ff05ff05ea01000202010302020000
+050c06040504060005030602051f06040505060005040600050406000519060005020600
+0504060005270602050b06000506060005ff05ff05080600050206000509060205130100
+050002020103020205000000050b0600050f0600051f060005090600050a060005190600
+05020600052c060005020600050a060005ff05ff0510060005020600050b060005140100
+0202010302020000050c0600050606020505060005030602051806000506060105000600
+050206020502060405170600050206000502060205030602050206000502060005170600
+050206000501060005000601050206040502060205030602050206000500060105030602
+05ff05f306000502060005020602050506000502060005000601050c0100050002020103
+020205000000050b06000508060005050600050206000502060005170600050506000501
+06010504060005040600051a060005000600050506000502060005020600050106000502
+060005170600050206000501060105010600050306000506060005020600050206000501
+060105010600050106000502060005ff05f2060005020600050106000502060005040600
+0502060105010600050c01000202010302020000050c0603050506000505060005020600
+050206000517060305020600050206000504060005040600051a06000500060005050600
+050206000502060005010600050006000500060005170600050206000501060005020600
+0503060005060600050206000502060005010600050206000501060005ff05f606040501
+060005020600050406000502060005020600050b0100050002020103020205000000050b
+06000508060005050600050206040517060005050600050206000504060005040600051a
+060005000600050506000502060405010600050006000500060005170600050206000501
+0600050206000503060005060600050206000502060005010600050206000502060205ff
+05f306000502060005010604050406000502060005020600050c01000202010302020000
+050c0600050806000505060005020600051b060005050600050206000504060005040600
+051b06000506060005020600050506000500060005000600051706000502060005010600
+050206000503060005060600050206000502060005010600050206000505060005ff05f2
+06000502060005010600050806000502060005020600050b010005000202010302020500
+0000050b0600050806000505060005020600050206000517060005050600050106010504
+060005040600051b06000506060005020600050206000501060005000600050006000517
+060005020600050106010501060005030600050606000502060005020600050106000502
+0600050106000502060005ff05f206000502060005010600050206000504060005020601
+05010600050c01000202010302020000050c060005080600050506000503060205180604
+050206010500060005040600050506010519060005060600050306020503060005000600
+051906020502060005000601050506010504060005030602050206000502060005020602
+05ff05f306000502060005020602050506000502060005000601050c0100050002020103
+02020500000005a8060005ff05ff052e0600051001000202010302020000050b0606052a
+0606052a0606052a06060500060005ff05ff05180606050e0600050f0100050002020103
+020205000000050a0606052a0606052a0606052a06060500060005ff05ff05180606050e
+060005100100020201030202000005ff05ff05ea010005000202010302020500000005ff
+05ff05ea0100020201030202000005ff05ff05ea01000500020201030202050000000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100020201030202000005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+01000500010005000100050002020103020205ff05ff05ed02020103020205ff05ff05ed
+02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed
+02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed
+020201030202053600000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000051a00000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050100000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050100000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000051a00000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000051a00000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000051a00000500000005000000050000000500000005000000050000000500
+00000500000005000000050000000500000005ff05a50202010302020535000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500010005180000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000100000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+010000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050001000518000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500010005180000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000100051800000500000005000000050000000500000005000000
+0500000005000000050000000500000005000000050000000500010005ff05a402020103
+02020536000005140100051a00000514010005010000051401000501000005140100051a
+000005140100051a000005140100051a00000514010005ff05a502020103020205350000
+051601000518000005160100000005160100000005160100051800000516010005180000
+05160100051800000516010005ff05a40202010302020536000005140100051a00000514
+010005010000051401000501000005140100051a000005140100051a000005140100051a
+00000514010005ff05a50202010302020535000005050602050306020506010005180000
+051601000000051601000000051601000518000005160100051800000516010005180000
+0516010005ff05a402020103020205360000050406020503060205050100051a00000514
+010005010000051401000501000005140100051a00000506060405080100051a00000508
+060105090100051a0000050806030507010005ff05a50202010302020535000005040604
+050106040505010005180000051006000504010000000510060005040100000005040600
+051001000518000005050608050701000518000005080603050901000518000005070607
+0506010005ff05a402020103020205360000050306000501060105010600050106010504
+0100051a0000050f06000503010005010000050f0600050301000501000005030600050f
+0100051a00000503060a05050100051a00000507060305080100051a0000050506030501
+06030504010005ff05a5020201030202053500000503060d0504010005180000050d0600
+0501060005040100000005040600050a06000504010000000504060005010600050d0100
+051800000504060305020603050601000518000005090601050a01000518000005060602
+050306020505010005ff05a4020201030202053600000501060005000603050006020500
+060405020100051a0000050c060005010600050301000501000005030600050a06000503
+0100050100000503060005010600050c0100051a0000050206030504060305040100051a
+000005140100051a000005050602050306020504010005ff05a502020103020205350000
+050206000500060305000602050006040503010005180000050a06000501060005010600
+050401000000050406000504060005040600050401000000050406000501060005010600
+050a01000518000005030602050306070503010005180000050706040509010005180000
+05070601050206020506010005ff05a40202010302020536000005010600050006030500
+06020500060405020100051a000005090600050106000501060005030100050100000503
+06000504060005040600050301000501000005030600050106000501060005090100051a
+0000050206020504060505030100051a00000507060305080100051a0000050a06020506
+010005ff05a5020201030202053500000502060005000603050006020500060405030100
+051800000507060005010600050106000501060005040100000005040600050406000501
+060005010600050401000000050406000501060005010600050106000507010005180000
+05030602050506030505010005180000050906020509010005180000050a060205080100
+05ff05a40202010302020536000005010600050006070500060405020100051a00000506
+060005010600050106000501060005030100050100000503060005040600050106000501
+060005030100050100000503060005010600050106000501060005060100051a00000502
+06030505060105050100051a00000508060205080100051a0000050806020508010005ff
+05a502020103020205350000050206000500060405010600050006040503010005180000
+050406000501060005010600050106000501060005040100000005040600050106000501
+060005010600050106000504010000000504060005010600050106000501060005010600
+050401000518000005040603050d01000518000005090602050901000518000005090602
+0509010005ff05a402020103020205360000050106060501060605020100051a00000503
+060005010600050106000501060005010600050301000501000005030600050106000501
+060005010600050106000503010005010000050306000501060005010600050106000501
+060005030100051a00000503060905060100051a00000508060205080100051a00000514
+010005ff05a5020201030202053500000502060005000602050506000500060205030100
+051800000504060005010600050106000501060005010600050401000000050406000501
+060005010600050106000501060005040100000005040600050106000501060005010600
+050106000504010005180000050506070508010005180000050806040508010005180000
+050906020509010005ff05a4020201030202053600000501060005000602050506000500
+060205020100051a00000503060005010600050106000501060005010600050301000501
+000005030600050106000501060005010600050106000503010005010000050306000501
+060005010600050106000501060005030100051a00000506060405080100051a00000506
+060605060100051a0000050806020508010005ff05a50202010302020535000005020604
+050506040503010005180000051601000000051601000000051601000518000005160100
+0518000005160100051800000516010005ff05a40202010302020536000005140100051a
+00000514010005010000051401000501000005140100051a000005140100051a00000514
+0100051a00000514010005ff05a502020103020205350000051601000518000005160100
+000005160100000005160100051800000516010005180000051601000518000005160100
+05ff05a40202010302020536000005140100051a00000514010005010000051401000501
+000005140100051a000005140100051a000005140100051a00000514010005ff05a50202
+010302020535000005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005180000050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+000005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010000000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000518000005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005180000050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100051800000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+0500010005ff05a402020103020205360100050001000500010005000100050001000500
+0100050001000500010005000100050001000500010005000100051a0100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005010100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005010100050001000500010005000100050001000500
+0100050001000500010005000100050001000500010005000100051a0100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+0100051a0100050001000500010005000100050001000500010005000100050001000500
+0100050001000500010005000100051a0100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005ff05a5020201030202
+05ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed020201030202
+05ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed020201030202
+05ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed020201030202
+05ff05ff05ed02020103020205ff05ff05ed020201030202050301ff01ff01e505030202
+01030202050301ff01ff01d1050000000500000005000000050000000500000005000000
+050000000500000005000000050001000503020201030202050301ff01ff01d100000500
+000005000000050000000500000005000000050000000500000005000000050001010503
+020201030202050301020aff0aff0acb010205000000050e010005000100050302020103
+0202050301020aff0aff0aca000001020000051001010503020201030202050301020a01
+00ff00ff00c9010205000000050e0100050001000503020201030202050301020a0100ff
+00ff00c901020000051001010503020201030202050301020a0100ff00ff00c901020500
+0000050e0100050001000503020201030202050301020a0100ff00ff00c9010200000510
+01010503020201030202050301020a0100ff00ff00c9010205000000050e010005000100
+0503020201030202050301020a0100ff00ff00c9010200000502010a0502010105030202
+01030202050301020a0100ff00ff00c90102050000000502010805020100050001000503
+020201030202050301020a0100ff00ff00c9010200000504010605040101050302020103
+0202050301020a0100ff00ff00c901020500000005040104050401000500010005030202
+01030202050301020a0100ff00ff00c90102000005060102050601010503020201030202
+050301020a0100ff00ff00c9010205000000050601000506010005000100050302020103
+0202050301020a0100ff00ff00c901020000051001010503020201030202050301020a01
+00ff00ff00c9010205000000050e0100050001000503020201030202050301020a0100ff
+00ff00c901020000051001010503020201030202050301020a0100ff00ff00c901020500
+0000050e0100050001000503020201030202050301020a0100ff00ff00c9010200000510
+01010503020201030202050301020a0100ff00ff00c9010205000000050e010005000100
+0503020201030202050301020a0000ff00ff00ca01020000051001010503020201030202
+050301ff01ff01d105000000050001000500010005000100050001000500010005000100
+0500010005000100050001000503020201030202050301ff01ff01d10000050001000500
+010005000100050001000500010005000100050001000500010005000101050302020103
+0202050301ff01ff01e5050302020103020205ff05ff05ed02020103020205ff05ff05ed
+02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed
+02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed
+02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed
+02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed
+02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed
+02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed
+020201030202050301ff01ff01e505030202010302020503010005ff05ff05970100054a
+01000503020201030202050301000563010505ff05ff052d0100054a0100050302020103
+0202050301000562010705ff05ff052c0100054a01000503020201030202050301000561
+01020503010205ff05ff052b0100054a0100050302020103020205030100056101010505
+010105ff05ff052b0100054a0100050302020103020205030100056101020503010205ff
+05ff052b0100054a01000503020201030202050301000562010705ff05ff052c0100054a
+01000503020201030202050301000563010505ff05ff052d0100054a0100050302020103
+0202050301000565010105ff05ff052f0100054a01000503020201030202050301000565
+010105ff05ff052f0100054a01000503020201030202050301000565010105ff05ff052f
+0100054a01000503020201030202050301000565010105ff05ff052f0100054a01000503
+020201030202050301000565010105ff05ff052f0100054a010005030202010302020503
+01000565010105ff05ff052f0100054a0100050302020103020205030100056101010500
+010205ff05ff052f0100054a0100050302020103020205030100056101010500010205ff
+05ff052f0100054a01000503020201030202050301000561010505ff05ff052f0100054a
+01000503020201030202050301000561010505ff05ff052f0100054a0100050302020103
+020205030100056101020500010105ff05ff052f0100054a010005030202010302020503
+010005ff05ff05970100054a01000503020201030202050301ff01ff0199054a01000503
+020201030202050301000536000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000009040500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000904050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000090405000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000009040500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000904050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+0500000005000000050000000500000005000000050000000904050000000100050c0100
+050001000500010005000100050001000500010005000100050001000500010005000100
+052a01000503020201030202050301000535000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000903
+010000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050009030100000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500090301000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000903010000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050009030100000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+05000000050009030100000005000100050d010005000100050001000500010005000100
+05000100050001000500010005000100052b010005030202010302020503010005360000
+055e01000901010205000000055c01000901010205000000055c01000901010205000000
+055c01000901010205000000055c01000901010205000000055c01000901010205000000
+0100050c0100050000000500000005000000050000000500000005000000050000000500
+000005000000052a010005030202010302020503010005350000052d0100052f01000500
+090101020000052b0102052d01000500090101020000052b0102052d0100050009010102
+0000052d0100052d01000500090101020000052a0104052c01000500090101020000052c
+0102052c0100050009010102000005000100050d01000500000005000000050000000500
+000005000000050000000500000005000000052b01000503020201030202050301000536
+0000052a01020530010009010102050000000529010005020100052d0100090101020500
+00000529010005020100052d01000901010205000000052b0101052e0100090101020500
+000005290100053101000901010205000000052a01000530010009010102050000000100
+050c010005000000050c010005000000052a010005030202010302020503010005350000
+052d0100052f01000500090101020000052a010005020100052c01000500090101020000
+052e0100052c01000500090101020000052b010005000100052d01000500090101020000
+052a0100053001000500090101020000052a010005300100050009010102000005000100
+050d010005000000050a010005000000052b010005030202010302020503010005360000
+052c01000530010009010102050000000529010005020100052d01000901010205000000
+052d0100052d01000901010205000000052a010005000100052e01000901010205000000
+05290100053101000901010205000000052901000531010009010102050000000100050c
+010005000000050c010005000000052a010005030202010302020503010005350000052d
+0100052f01000500090101020000052d0100052d01000500090101020000052c0101052d
+01000500090101020000052a010005010100052d01000500090101020000052a0103052d
+01000500090101020000052a0103052d0100050009010102000005000100050d01000500
+0000050a010005000000052b010005030202010302020503010005360000052c01000530
+01000901010205000000052b0100052f01000901010205000000052d0100052d01000901
+0102050000000528010005020100052e01000901010205000000052d0100052d01000901
+0102050000000529010005020100052d010009010102050000000100050c010005000000
+050c010005000000052a010005030202010302020503010005350000052d0100052f0100
+0500090101020000052b0100052f01000500090101020000052e0100052c010005000901
+0102000005290105052c01000500090101020000052e0100052c01000500090101020000
+052a010005020100052c0100050009010102000005000100050d010005000000050a0100
+05000000052b010005030202010302020503010005360000052c01000530010009010102
+050000000529010005020100052d010009010102050000000529010005020100052d0100
+0901010205000000052c0100052e010009010102050000000528010005030100052d0100
+09010102050000000529010005020100052d010009010102050000000100050c01000500
+0000050c010005000000052a010005030202010302020503010005350000052b0104052d
+01000500090101020000052a0104052c01000500090101020000052b0102052d01000500
+090101020000052c0102052c01000500090101020000052a0103052d0100050009010102
+0000052b0102052d0100050009010102000005000100050d010005000000050a01000500
+0000052b010005030202010302020503010005360000055e01000901010205000000055c
+01000901010205000000055c01000901010205000000055c01000901010205000000055c
+01000901010205000000055c010009010102050000000100050c010005000000050c0100
+05000000052a010005030202010302020503010005350000055e01000500090101020000
+055c01000500090101020000055c01000500090101020000055c01000500090101020000
+055c01000500090101020000055c0100050009010102000005000100050d010005000000
+050a010005000000052b010005030202010302020503010005360000055e010009010102
+05000000055c01000901010205000000055c01000901010205000000055c010009010102
+05000000055c01000901010205000000055c010009010102050000000100050701000503
+010005000000050c010005000000052a010005030202010302020503010005350000055e
+01000500090101020000055c01000500090101020000055c01000500090101020000055c
+01000500090101020000055c01000500090101020000055c010005000901010200000500
+0100050601010504010005000000050a010005000000052b010005030202010302020503
+010005360000055e01000901010205000000055c01000901010205000000055c01000901
+010205000000055c01000901010205000000055c01000901010205000000055c01000901
+010205000000010005050100050001000503010005000000050001000500010005000100
+0500010005000100050001000500010005000000052a0100050302020103020205030100
+05350000055e01000500090101020000055c01000500090101020000055c010005000901
+01020000055c01000500090101020000055c01000500090101020000055c010005000901
+010200000500010005070100050401000500000005000000050000000500000005000000
+050000000500000005000000052b01000503020201030202050301000536000005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010009010102050000000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100090101020500000005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000901010205000000050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010009010102050000000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+090101020500000005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000901010205000000010005070100050301000500
+0000050c010005000000052a010005030202010302020503010005350000050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050009000103000005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500090001030000050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000900010300000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050009000103000005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+090001030000050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000900010300000500010005070100050401000500
+0000050a010005000000052b01000503020201030202050301000b360063010000630100
+0063010000630100006301000063010000020100050701000503010005000000050c0100
+05000000052a01000503020201030202050301000b350800006301000063010000630100
+00630100006301000063010000020100050701000504010005000000050a010005000000
+052b01000503020201030202050301000b01073208010063010000630100006301000063
+0100006301000063010000020100050501040501010005000000050c010005000000052a
+01000503020201030202050301000b010732080100630100006301000063010000630100
+006301000063010000020100050d010005000000050a010005000000052b010005030202
+01030202050301000b010717010007190801006301000063010000630100006301000063
+01000063010000020100050c010005000000050c010005000000052a0100050302020103
+0202050301000b010715010207190801000f010200030102004901000007010000230100
+000b010200030102001f01000063010000630100006301000063010000020100050d0100
+05000000050a010005000000052b01000503020201030202050301000b01071701000719
+08010011010000050100004901000007010000230100000d010000050100001f01000063
+010000630100006301000063010000020100050c010005000000050c010005000000052a
+01000503020201030202050301000b010717010007190801000801020005010000050100
+000301020042010000070100000001010003010200020100000001010002010000000101
+000301020002010400010100000201000004010000050100001f01000063010000630100
+006301000063010000020100050d010005000000050a010005000000052b010005030202
+01030202050301000b010717010007190801000701000002010000040100000501000002
+010000020100004101000007010100010100000101000002010000010101000101000001
+01010001010000010100000201000003010000030100000201000004010000050100001f
+01000063010000630100006301000063010000020100050c010005000000050c01000500
+0000052a01000503020201030202050301000b0107170100071908010007010000020100
+000401000005010000020100000201000041010000070100000201000001010000020100
+000101000005010000020100000101000007010000030100000201000004010000050100
+001f01000063010000630100006301000063010000020100050d010005000000050a0100
+05000000052b01000503020201030202050301000b010717010007190801000701000002
+010000040100000501000002010400410100000701000002010000010100000201000001
+01000005010000020100000201020004010000030100000201000004010000050100001f
+01000063010000630100006301000063010000020100050c010005000000050001000500
+0100050001000500010005000100050001000500010005000000052a0100050302020103
+0202050301000b0107170100071908010007010000020100000401000005010000020100
+004501000007010000020100000101000002010000010100000501000002010000050100
+0003010000030100000201000004010000050100001f0100006301000063010000630100
+0063010000020100050d0100050001000500010005000100050001000500010005000100
+0500010005000000052b01000503020201030202050301000b0107150104071708010007
+010000020100000401000005010000020100000201000041010000070100000201000001
+010000020100000101000005010000020100000101000002010000030100000301000001
+01010004010000050100001f01000063010000630100006301000063010000020100050c
+01000500030e05000000052a01000503020201030202050301000b010732080100080102
+000501000005010000030102004201000007010000020100000201020002010000050100
+00020100000201020005010100020101000001000004010000050100001f010000630100
+00630100006301000063010000020100050d0100030e0000052b01000503020201030202
+050301000b01073208010063010000630100006301000063010000630100006301000002
+0100050c01000500030e05000000052a01000503020201030202050301000b0107320801
+00630100006301000063010000630100006301000063010000020100050d0100030e0000
+052b01000503020201030202050301000b01073208010063010000630100006301000063
+0100006301000063010000020100050c01000500030e05000000052a0100050302020103
+0202050301000b0107320801006301000063010000630100006301000063010000630100
+00020100050d0100030e0000052b01000503020201030202050301000b01073208010063
+0100006301000063010000630100006301000063010000020100050c01000500030e0500
+0000052a01000503020201030202050301000b0108340063010000630100006301000063
+0100006301000063010000020100050d0100030e0000052b010005030202010302020503
+01000b00083501ff01ff0161050c01000500030e05000000052a01000503020201030202
+050301000b3600630100006301000063010000630100006301000063010000020100050d
+0100030e0000052b01000503020201030202050301000b35080000630100006301000063
+010000630100006301000063010000020100050c01000500030e05000000052a01000503
+020201030202050301000b01073208010063010000630100006301000063010000630100
+0063010000020100050d0100030e0000052b01000503020201030202050301000b010732
+080100630100006301000063010000630100006301000063010000020100050c01000500
+030e05000000052a01000503020201030202050301000b01071601020718080100630100
+006301000063010000630100006301000063010000020100050d0100030e0000052b0100
+0503020201030202050301000b01071501000702010007170801001f0100000301020003
+010200340100000f0102005001000063010000630100006301000063010000020100050c
+01000500030e05000000052a01000503020201030202050301000b010715010007020100
+071708010026010000050100003401000011010000500100006301000063010000630100
+0063010000020100050d0100030e0000052b01000503020201030202050301000b010715
+010007020100071708010008010100000100000101000002010000010100000001010003
+0102000501000005010000030102002d0100000801020005010000020100000201000002
+010200030102000301020002010000000101002d01000063010000630100006301000063
+010000020100050c01000500030e05000000052a01000503020201030202050301000b01
+071801000718080100070100000101010001010000020100000101010001010000040100
+00050100000501000002010000020100002c010000070100000201000004010000020100
+000201000001010000020100000101000002010000010100000201000001010100010100
+002c01000063010000630100006301000063010000020100050d0100030e0000052b0100
+0503020201030202050301000b0107170100071908010007010000020100000101000002
+0100000101000002010000040100000501000005010000060100002c0100000701000008
+01000002010000020100000101000005010000050100000201000001010000020100002c
+01000063010000630100006301000063010000020100050c01000500030e05000000052a
+01000503020201030202050301000b0107160100071a0801000701000002010000010100
+00020100000101000002010000040100000501000005010000030103002c010000080102
+0005010000020100000201000002010200030102000201040001010000020100002c0100
+0063010000630100006301000063010000020100050d0100030e0000052b010005030202
+01030202050301000b010715010007020100071708010007010000020100000101000002
+010000010100000201000004010000050100000501000002010000020100002c0100000b
+01000004010000020100000201000005010000050100000101000005010000020100002c
+01000063010000630100006301000063010000020100050c01000500030e05000000052a
+01000503020201030202050301000b010715010407170801000701000001010100010100
+0001010100010100000201000004010000050100000501000002010000020100002c0100
+000701000002010000040100000201000001010100010100000201000001010000020100
+00010100000201000001010000020100002c010000630100006301000063010000630100
+00020100050d0100030e0000052b01000503020201030202050301000b01073208010008
+010100000100000201010000010000010100000201000004010000050100000501000003
+0103002c0100000801020005010000030101000001000002010200030102000301020002
+010000020100002c01000063010000630100006301000063010000020100050c01000500
+030e05000000052a01000503020201030202050301000b0107320801000b010000560100
+006301000063010000630100006301000063010000020100050d0100030e0000052b0100
+0503020201030202050301000b0107320801000701000002010000560100006301000063
+010000630100006301000063010000020100050c01000500030e05000000052a01000503
+020201030202050301000b01073208010008010200570100006301000063010000630100
+006301000063010000020100050d0100030e0000052b0100050302020103020205030100
+0b010732080100630100006301000063010000630100006301000063010000020100050c
+01000500030e05000000052a01000503020201030202050301000b010732080100630100
+006301000063010000630100006301000063010000020100050d0100030e0000052b0100
+0503020201030202050301000b0108340063010000630100006301000063010000630100
+0063010000020100050c01000500030e05000000052a0100050302020103020205030100
+0b00083501ff01ff0161050d0100030e0000052b01000503020201030202050301000b36
+00630100006301000063010000630100006301000063010000020100050c01000500030e
+05000000052a01000503020201030202050301000b350800006301000063010000630100
+00630100006301000063010000020100050d0100030e0000052b01000503020201030202
+050301000b01073208010063010000630100006301000063010000630100006301000002
+0100050c01000500030e05000000052a01000503020201030202050301000b0107320801
+00630100006301000063010000630100006301000063010000020100050d0100030e0000
+052b01000503020201030202050301000b01071601020718080100630100006301000063
+010000630100006301000063010000020100050c01000500030e05000000052a01000503
+020201030202050301000b010715010007020100071708010063010000070100005a0100
+0063010000630100006301000063010000020100050d0100030e0000052b010005030202
+01030202050301000b0107190100071708010063010000070100005a0100006301000063
+0100006301000063010000020100050c01000500030e05000000052a0100050302020103
+0202050301000b0107190100071708010008010200020100000001010002010000000101
+000301020042010000070100000001010002010000000101000301020002010100000100
+000201010000010000030102003401000063010000630100006301000063010000020100
+050d0100030e0000052b01000503020201030202050301000b0107170101071808010007
+010000020100000101010001010000010101000101000001010000020100004101000007
+010100010100000101010001010000010100000201000001010000000100000001000001
+010000000100000001000001010000020100003301000063010000630100006301000063
+010000020100050c01000500030e05000000052a01000503020201030202050301000b01
+0719010007170801000b0100000101000002010000010100000201000005010000410100
+000701000002010000010100000501000002010000010100000001000000010000010100
+000001000000010000050100003301000063010000630100006301000063010000020100
+050d0100030e0000052b01000503020201030202050301000b0107190100071708010008
+010300010100000201000001010000020100000201030041010000070100000201000001
+010000050100000201000001010000000100000001000001010000000100000001000002
+0103003301000063010000630100006301000063010000020100050c01000500030e0500
+0000052a01000503020201030202050301000b0107150100070201000717080100070100
+000201000001010000020100000101000002010000010100000201000041010000070100
+000201000001010000050100000201000001010000000100000001000001010000000100
+000001000001010000020100003301000063010000630100006301000063010000020100
+050d0100030e0000052b01000503020201030202050301000b0107160102071808010007
+010000020100000101000002010000010100000201000001010000020100004101000007
+010100010100000101000005010000020100000101000000010000000100000101000000
+010000000100000101000002010000330100006301000063010000630100006301000002
+0100050c01000500030e05000000052a01000503020201030202050301000b0107320801
+000801030001010000020100000101000002010000020103004101000007010000000101
+000201000006010200020100000001000000010000010100000001000000010000020103
+003301000063010000630100006301000063010000020100050d0100030e0000052b0100
+0503020201030202050301000b0107320801006301000063010000630100006301000063
+01000063010000020100050c01000500030e05000000052a010005030202010302020503
+01000b010732080100630100006301000063010000630100006301000063010000020100
+050d0100030e0000052b01000503020201030202050301000b0107320801006301000063
+01000063010000630100006301000063010000020100050c01000500030e05000000052a
+01000503020201030202050301000b010732080100630100006301000063010000630100
+006301000063010000020100050d0100030e0000052b0100050302020103020205030100
+0b010732080100630100006301000063010000630100006301000063010000020100050c
+01000500030e05000000052a01000503020201030202050301000b010834006301000063
+01000063010000630100006301000063010000020100050d0100030e0000052b01000503
+020201030202050301000b00083501ff01ff0161050c01000500030e05000000052a0100
+0503020201030202050301000b3600630100006301000063010000630100006301000063
+010000020100050d0100030e0000052b01000503020201030202050301000b3508000063
+0100006301000063010000630100006301000063010000020100050c01000500030e0500
+0000052a01000503020201030202050301000b0107320801006301000063010000630100
+00630100006301000063010000020100050d0100030e0000052b01000503020201030202
+050301000b01073208010063010000630100006301000063010000630100006301000002
+0100050c01000500030e05000000052a01000503020201030202050301000b0107180100
+0718080100630100006301000063010000630100006301000063010000020100050d0100
+030e0000052b01000503020201030202050301000b010717010107180801001001000006
+010000490100000e0100001c0100000b010200030102001f010000630100006301000063
+01000063010000020100050c01000500030e05000000052a010005030202010302020503
+01000b010716010007000100071808010010010000510100000e0100001c0100000d0100
+00050100001f01000063010000630100006301000063010000020100050d0100030e0000
+052b01000503020201030202050301000b01071601000700010007180801000801020002
+010400020102000201000000010100030102003b01000008010200020100000101000003
+01020002010000000101000301020002010400010100000201000004010000050100001f
+01000063010000630100006301000063010000020100050c01000500030e05000000052a
+01000503020201030202050301000b010715010007010100071808010007010000020100
+000301000006010000020101000101000001010000020100003a01000007010000020100
+000101000000010000030100000201000001010100010100000101000002010000030100
+00030100000201000004010000050100001f010000630100006301000063010000630100
+00020100050d0100030e0000052b01000503020201030202050301000b01071401000702
+010007180801000701000007010000060100000201000002010000050100003a01000007
+010000050101000801000001010000020100000101000007010000030100000201000004
+010000050100001f01000063010000630100006301000063010000020100050c01000500
+030e05000000052a01000503020201030202050301000b01071401050717080100080102
+0004010000060100000201000002010000020103003a0100000801020002010100050103
+0001010000020100000201020004010000030100000201000004010000050100001f0100
+0063010000630100006301000063010000020100050d0100030e0000052b010005030202
+01030202050301000b010718010007180801000b01000003010000060100000201000002
+01000001010000020100003a0100000b0100000101000000010000030100000201000001
+010000020100000501000003010000030100000201000004010000050100001f01000063
+010000630100006301000063010000020100050c01000500030e05000000052a01000503
+020201030202050301000b01071701020717080100070100000201000003010000060100
+00020100000201000001010000020100003a010000070100000201000001010000010100
+000201000002010000010100000201000001010000020100000301000003010000010101
+0004010000050100001f01000063010000630100006301000063010000020100050d0100
+030e0000052b01000503020201030202050301000b010732080100080102000501010004
+0100000201000002010000020103003a0100000801020002010000020100000201030001
+010000020100000201020005010100020101000001000004010000050100001f01000063
+010000630100006301000063010000020100050c01000500030e05000000052a01000503
+020201030202050301000b01073208010063010000630100006301000063010000630100
+0063010000020100050d0100030e0000052b01000503020201030202050301000b010732
+080100630100006301000063010000630100006301000063010000020100050c01000500
+030e05000000052a01000503020201030202050301000b01073208010063010000630100
+0063010000630100006301000063010000020100050d0100030e0000052b010005030202
+01030202050301000b010732080100630100006301000063010000630100006301000063
+010000020100050c01000500030e05000000052a01000503020201030202050301000b01
+0732080100630100006301000063010000630100006301000063010000020100050d0100
+030e0000052b01000503020201030202050301000b010834006301000063010000630100
+00630100006301000063010000020100050c01000500030e05000000052a010005030202
+01030202050301000b00083501ff01ff0161050d0100030e0000052b0100050302020103
+0202050301000b3600630100006301000063010000630100006301000063010000020100
+050c01000500030e05000000052a01000503020201030202050301000b35080000630100
+006301000063010000630100006301000063010000020100050d0100030e0000052b0100
+0503020201030202050301000b0107320801006301000063010000630100006301000063
+01000063010000020100050c01000500030e05000000052a010005030202010302020503
+01000b010732080100630100006301000063010000630100006301000063010000020100
+050d0100030e0000052b01000503020201030202050301000b0107150104071708010063
+0100006301000063010000630100006301000063010000020100050c01000500030e0500
+0000052a01000503020201030202050301000b0107150100071b080100070100000e0100
+0014010000340100002b0102003401000063010000630100006301000063010000020100
+050d0100030e0000052b01000503020201030202050301000b0107150100071b08010007
+0100000e0100004a0100002d010000340100006301000063010000630100006301000002
+0100050c01000500030e05000000052a01000503020201030202050301000b0107150100
+071b08010007010000010100000301020002010400020102000201000000010100030102
+000201000000010100030102002601000007010000020100000101000000010100020100
+0000010100030102000301020005010000030102002d0100006301000063010000630100
+0063010000020100050d0100030e0000052b01000503020201030202050301000b010715
+010307180801000701000000010000030100000201000003010000030100000201000001
+010100010100000401000002010100010100000101000002010000250100000701000002
+010000010101000101000001010100010100000101000002010000010100000201000004
+01000002010000020100002c01000063010000630100006301000063010000020100050c
+01000500030e05000000052a01000503020201030202050301000b010719010007170801
+000701010008010000030100000701000001010000080100000201000002010000050100
+002501000007010000020100000101000002010000010100000201000001010000090100
+0004010000060100002c01000063010000630100006301000063010000020100050d0100
+030e0000052b01000503020201030202050301000b010719010007170801000701010005
+010300030100000401030001010000080100000201000002010000020103002501000007
+010000020100000101000002010000010100000201000002010200030103000401000003
+0103002c01000063010000630100006301000063010000020100050c01000500030e0500
+0000052a01000503020201030202050301000b0107140100070301000717080100070100
+000001000003010000020100000301000003010000020100000101000008010000020100
+000201000001010000020100002501000007010000020100000101000002010000010100
+00020100000501000001010000020100000401000002010000020100002c010000630100
+00630100006301000063010000020100050d0100030e0000052b01000503020201030202
+050301000b01071501030718080100070100000101000002010000020100000301000003
+010000020100000101000008010000020100000201000001010000020100002501000007
+010000010101000101010001010000010101000101000001010000020100000101000002
+0100000401000002010000020100002c0100006301000063010000630100006301000002
+0100050c01000500030e05000000052a01000503020201030202050301000b0107320801
+000701000002010000020103000401010002010300010100000801000002010000020100
+000201030025010000080101000001000001010000000101000201000000010100030102
+000301030004010000030103002c01000063010000630100006301000063010000020100
+050d0100030e0000052b01000503020201030202050301000b010732080100630100000e
+010000050100004c01000063010000630100006301000063010000020100050c01000500
+030e05000000052a01000503020201030202050301000b010732080100630100000e0100
+00050100004c01000063010000630100006301000063010000020100050d0100030e0000
+052b01000503020201030202050301000b010732080100630100000e010000050100004c
+01000063010000630100006301000063010000020100050c01000500030e05000000052a
+01000503020201030202050301000b010732080100630100006301000063010000630100
+006301000063010000020100050d0100030e0000052b0100050302020103020205030100
+0b010732080100630100006301000063010000630100006301000063010000020100050c
+01000500030e05000000052a01000503020201030202050301000b010834006301000063
+01000063010000630100006301000063010000020100050d0100030e0000052b01000503
+020201030202050301000b00083501ff01ff0161050c01000500030e05000000052a0100
+0503020201030202050301000b3600630100006301000063010000630100006301000063
+010000020100050d0100030e0000052b01000503020201030202050301000b3508000063
+0100006301000063010000630100006301000063010000020100050c01000500030e0500
+0000052a01000503020201030202050301000b0107320801006301000063010000630100
+00630100006301000063010000020100050d0100030e0000052b01000503020201030202
+050301000b01073208010063010000630100006301000063010000630100006301000002
+0100050c01000500030e05000000052a01000503020201030202050301000b0107170102
+0717080100630100006301000063010000630100006301000063010000020100050d0100
+030e0000052b01000503020201030202050301000b0107160100071a0801000a0100001a
+01010004010000340100000f0102000c010000020100003e010000630100006301000063
+01000063010000020100050c01000500030e05000000052a010005030202010302020503
+01000b0107150100071b080100250100003c01000011010000100100003e010000630100
+00630100006301000063010000020100050d0100030e0000052b01000503020201030202
+050301000b0107150100071b080100080102000301020003010200030102000401000004
+010200020100000001010003010200260100000801020005010000020100000201000002
+01020002010000010100003b01000063010000630100006301000063010000020100050c
+01000500030e05000000052a01000503020201030202050301000b010715010307180801
+000a01000002010000020100000101000002010000010100000201000001010400040100
+000201010001010000010100000201000025010000070100000201000004010000020100
+00020100000401000002010000000100003c010000630100006301000063010000630100
+00020100050d0100030e0000052b01000503020201030202050301000b01071501000702
+010007170801000a01000002010000020100000101000005010000020100000301000006
+01000002010000020100000101000002010000250100000b010000040100000201000002
+01000004010000020101003d01000063010000630100006301000063010000020100050c
+01000500030e05000000052a01000503020201030202050301000b010715010007020100
+07170801000a010000020100000201000002010200020104000301000006010000020100
+000201000001010400250100000801030004010000030100000001000005010000020101
+003d01000063010000630100006301000063010000020100050d0100030e0000052b0100
+0503020201030202050301000b01071501000702010007170801000a0100000201000002
+010000050100000101000007010000060100000201000002010000010100002901000007
+010000020100000401000003010000000100000501000002010000000100003c01000063
+010000630100006301000063010000020100050c01000500030e05000000052a01000503
+020201030202050301000b010716010207180801000a0100000201000002010000010100
+000201000001010000020100000301000006010000020100000201000001010000020100
+0025010000070100000201000004010000040100000601000002010000010100003b0100
+0063010000630100006301000063010000020100050d0100030e0000052b010005030202
+01030202050301000b0107320801000a0100000301020003010200030102000401000006
+010000020100000201000002010200260100000801030004010000040100000601000002
+010000020100003a01000063010000630100006301000063010000020100050c01000500
+030e05000000052a01000503020201030202050301000b0107320801000a010000570100
+006301000063010000630100006301000063010000020100050d0100030e0000052b0100
+0503020201030202050301000b0107320801000701000001010000570100006301000063
+010000630100006301000063010000020100050c01000500030e05000000052a01000503
+020201030202050301000b01073208010008010100580100006301000063010000630100
+006301000063010000020100050d0100030e0000052b0100050302020103020205030100
+0b010732080100630100006301000063010000630100006301000063010000020100050c
+01000500030e05000000052a01000503020201030202050301000b010732080100630100
+006301000063010000630100006301000063010000020100050d0100030e0000052b0100
+0503020201030202050301000b0108340063010000630100006301000063010000630100
+0063010000020100050c01000500030e05000000052a0100050302020103020205030100
+0b00083501ff01ff0161050d0100030e0000052b01000503020201030202050301000b36
+00630100006301000063010000630100006301000063010000020100050c01000500030e
+05000000052a01000503020201030202050301000b350800006301000063010000630100
+00630100006301000063010000020100050d0100030e0000052b01000503020201030202
+050301000b01073208010063010000630100006301000063010000630100006301000002
+0100050c01000500030e05000000052a01000503020201030202050301000b0107320801
+00630100006301000063010000630100006301000063010000020100050d0100030e0000
+052b01000503020201030202050301000b01071501040717080100630100006301000063
+010000630100006301000063010000020100050c01000500030e05000000052a01000503
+020201030202050301000b01071501000702010007170801000a010100130100000b0100
+000201000030010000250100000b01020003010200260100006301000063010000630100
+0063010000020100050d0100030e0000052b01000503020201030202050301000b010718
+0100071808010009010000150100000f01000030010000250100000d0100000501000026
+01000063010000630100006301000063010000020100050c01000500030e05000000052a
+01000503020201030202050301000b010718010007180801000901000003010000000101
+0003010200030101000001000001010000000101000301020002010000010100002d0100
+000701000000010100030102000201000000010100020100000001010002010400010100
+000201000004010000050100002601000063010000630100006301000063010000020100
+050d0100030e0000052b01000503020201030202050301000b0107180100071808010007
+010400010101000101000001010000020100000101000001010100010101000101000004
+01000002010000000100002e010000070101000101000001010000020100000101010001
+010000010101000101000003010000030100000201000004010000050100002601000063
+010000630100006301000063010000020100050c01000500030e05000000052a01000503
+020201030202050301000b01071801000718080100090100000301000005010000020100
+0001010000020100000101000008010000020101002f0100000701000002010000010100
+000201000001010000050100000701000003010000020100000401000005010000260100
+0063010000630100006301000063010000020100050d0100030e0000052b010005030202
+01030202050301000b010717010007190801000901000003010000050104000101000002
+0100000101000008010000020101002f0100000701000002010000010100000201000001
+010000050100000701000003010000020100000401000005010000260100006301000063
+0100006301000063010000020100050c01000500030e05000000052a0100050302020103
+0202050301000b0107170100071908010009010000030100000501000005010000020100
+00010100000801000002010000000100002e010000070100000201000001010000020100
+000101000005010000070100000301000002010000040100000501000026010000630100
+00630100006301000063010000020100050d0100030e0000052b01000503020201030202
+050301000b01071701000719080100090100000301000005010000020100000101000001
+010100010100000801000002010000010100002d01000007010000020100000101000002
+010000010100000501000007010000030100000101010004010000050100002601000063
+010000630100006301000063010000020100050c01000500030e05000000052a01000503
+020201030202050301000b01073208010009010000030100000601020003010100000100
+00010100000801000002010000020100002c010000070100000201000002010200020100
+000501000008010100020101000001000004010000050100002601000063010000630100
+006301000063010000020100050d0100030e0000052b0100050302020103020205030100
+0b010732080100630100006301000063010000630100006301000063010000020100050c
+01000500030e05000000052a01000503020201030202050301000b010732080100630100
+006301000063010000630100006301000063010000020100050d0100030e0000052b0100
+0503020201030202050301000b0107320801006301000063010000630100006301000063
+01000063010000020100050c01000500030e05000000052a010005030202010302020503
+01000b010732080100630100006301000063010000630100006301000063010000020100
+050d0100030e0000052b01000503020201030202050301000b0107320801006301000063
+01000063010000630100006301000063010000020100050c01000500030e05000000052a
+01000503020201030202050301000b010834006301000063010000630100006301000063
+01000063010000020100050d0100030e0000052b01000503020201030202050301000b00
+083501ff01ff0161050c01000500030e05000000052a0100050302020103020205030100
+0b3600630100006301000063010000630100006301000063010000020100050d0100030e
+0000052b01000503020201030202050301000b3508000063010000630100006301000063
+0100006301000063010000020100050c01000500030e05000000052a0100050302020103
+0202050301000b0107320801006301000063010000630100006301000063010000630100
+00020100050d0100030e0000052b01000503020201030202050301000b01073208010063
+0100006301000063010000630100006301000063010000020100050c01000500030e0500
+0000052a01000503020201030202050301000b0107160102071808010063010000630100
+0063010000630100006301000063010000020100050d0100030e0000052b010005030202
+01030202050301000b010715010007020100071708010063010000070100000f0100000b
+01000006010000100100002201000063010000630100006301000063010000020100050c
+01000500030e05000000052a01000503020201030202050301000b010715010007020100
+071708010063010000070100001c01000018010000220100006301000063010000630100
+0063010000020100050d0100030e0000052b01000503020201030202050301000b010715
+010007020100071708010007010000000101000301020002010000000101004901000007
+010000010100000201000000010100030102000301020002010400020102000201000000
+010100030102000201000000010100030102000201000000010100030101000001000009
+01000063010000630100006301000063010000020100050c01000500030e05000000052a
+01000503020201030202050301000b010716010207180801000701010001010000010100
+000201000001010100010100004801000007010000000100000301010001010000040100
+000201000002010000030100000601000002010100010100000101000002010000010101
+000101000001010000020100000101010001010000010100000101010009010000630100
+00630100006301000063010000020100050d0100030e0000052b01000503020201030202
+050301000b01071501000702010007170801000701000002010000010100000201000001
+0100004c0100000701010004010000080100000201000007010000060100000201000002
+010000010100000201000001010000020100000101000002010000010100000501000002
+0100000901000063010000630100006301000063010000020100050c01000500030e0500
+0000052a01000503020201030202050301000b0107150100070201000717080100070100
+000201000001010400010100004c01000007010100040100000801000003010200040100
+000601000002010000020100000101040001010000020100000101040001010000050100
+00020100000901000063010000630100006301000063010000020100050d0100030e0000
+052b01000503020201030202050301000b01071501000702010007170801000701000002
+01000001010000050100004c010000070100000001000003010000080100000601000003
+010000060100000201000002010000010100000501000002010000010100000501000005
+010000020100000901000063010000630100006301000063010000020100050c01000500
+030e05000000052a01000503020201030202050301000b01071601020718080100070101
+00010100000101000002010000010100004c010000070100000101000002010000080100
+000201000002010000030100000601000002010000020100000101000002010000010101
+000101000001010000020100000101000005010000010101000901000063010000630100
+006301000063010000020100050d0100030e0000052b0100050302020103020205030100
+0b010732080100070100000001010003010200020100004c010000070100000201000001
+010000080100000301020005010100040100000201000002010000020102000201000000
+010100030102000201000006010100000100000901000063010000630100006301000063
+010000020100050c01000500030e05000000052a01000503020201030202050301000b01
+0732080100070100005a0100005801000009010000630100006301000063010000630100
+00020100050d0100030e0000052b01000503020201030202050301000b01073208010007
+0100005a0100005401000002010000090100006301000063010000630100006301000002
+0100050c01000500030e05000000052a01000503020201030202050301000b0107320801
+00070100005a010000550102000a01000063010000630100006301000063010000020100
+050d0100030e0000052b01000503020201030202050301000b0107320801006301000063
+01000063010000630100006301000063010000020100050c01000500030e05000000052a
+01000503020201030202050301000b010732080100630100006301000063010000630100
+006301000063010000020100050d0100030e0000052b0100050302020103020205030100
+0b01083400630100006301000063010000630100006301000063010000020100050c0100
+0500030e05000000052a01000503020201030202050301000b00083501ff01ff0161050d
+0100030e0000052b01000503020201030202050301000b36006301000063010000630100
+00630100006301000063010000020100050c01000500030e05000000052a010005030202
+01030202050301000b350800006301000063010000630100006301000063010000630100
+00020100050d0100030e0000052b01000503020201030202050301000b01073208010063
+0100006301000063010000630100006301000063010000020100050c01000500030e0500
+0000052a01000503020201030202050301000b0107320801006301000063010000630100
+00630100006301000063010000020100050d0100030e0000052b01000503020201030202
+050301000b01071601020718080100630100006301000063010000630100006301000063
+010000020100050c01000500030e05000000052a01000503020201030202050301000b01
+071501000702010007170801001f01000042010000120100001701020034010000630100
+00630100006301000063010000020100050d0100030e0000052b01000503020201030202
+050301000b01071501000702010007170801006301000012010000190100003401000063
+010000630100006301000063010000020100050c01000500030e05000000052a01000503
+020201030202050301000b01071501000702010007170801000701010000010000030102
+00020100000001010003010200030102003b010000080102000301010000010000020102
+000201000000010100020100000001010005010000030102000201000000010100260100
+0063010000630100006301000063010000020100050d0100030e0000052b010005030202
+01030202050301000b010715010007020100071708010007010000000100000001000001
+0100000201000001010100010100000401000002010000020100003a0100000701000002
+010000010100000101010001010000020100000101010001010000010101000101000004
+010000020100000201000001010100010100002501000063010000630100006301000063
+010000020100050c01000500030e05000000052a01000503020201030202050301000b01
+071601030717080100070100000001000000010000050100000101000008010000060100
+003a01000007010000020100000101000002010000010100000201000001010000020100
+000101000002010000040100000601000001010000020100002501000063010000630100
+006301000063010000020100050d0100030e0000052b0100050302020103020205030100
+0b0107190100071708010007010000000100000001000002010300010100000801000003
+0103003a0100000701000002010000010100000201000001010400010100000201000001
+010000020100000401000003010300010100000201000025010000630100006301000063
+01000063010000020100050c01000500030e05000000052a010005030202010302020503
+01000b010718010007180801000701000000010000000100000101000002010000010100
+000801000002010000020100003a01000007010000020100000101000002010000010100
+000501000002010000010100000201000004010000020100000201000001010000020100
+002501000063010000630100006301000063010000020100050d0100030e0000052b0100
+0503020201030202050301000b0107150102071908010007010000000100000001000001
+01000002010000010100000801000002010000020100003a010000070100000201000001
+010000010101000101000002010000010100000201000001010100010100000401000002
+010000020100000101000002010000250100006301000063010000630100006301000002
+0100050c01000500030e05000000052a01000503020201030202050301000b0107320801
+00070100000001000000010000020103000101000008010000030103003a010000080102
+000301010000010000020102000201000002010000010100000001010005010000030103
+0001010000020100002501000063010000630100006301000063010000020100050d0100
+030e0000052b01000503020201030202050301000b01073208010063010000230100003e
+01000063010000630100006301000063010000020100050c01000500030e05000000052a
+01000503020201030202050301000b01073208010063010000230100003e010000630100
+00630100006301000063010000020100050d0100030e0000052b01000503020201030202
+050301000b01073208010063010000230100003e01000063010000630100006301000063
+010000020100050c01000500030e05000000052a01000503020201030202050301000b01
+0732080100630100006301000063010000630100006301000063010000020100050d0100
+030e0000052b01000503020201030202050301000b010732080100630100006301000063
+010000630100006301000063010000020100050c01000500030e05000000052a01000503
+020201030202050301000b01083400630100006301000063010000630100006301000063
+010000020100050d0100030e0000052b01000503020201030202050301000b00083501ff
+01ff0161050c01000500030e05000000052a010005030202010302020503010005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000063
+0100006301000063010000630100006301000063010000020100050d0100030e0000052b
+010005030202010302020503010000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050001000063010000630100006301000063010000630100
+0063010000020100050c01000500030e05000000052a0100050302020103020205030100
+050000000532010005000063010000630100006301000063010000630100006301000002
+0100050d0100030e0000052b010005030202010302020503010000000534010000630100
+006301000063010000630100006301000063010000020100050c01000500030e05000000
+052a01000503020201030202050301000500000005130100050401020515010005000063
+0100006301000063010000630100006301000063010000020100050d0100030e0000052b
+010005030202010302020503010000000512010205030100050201000515010000630100
+006301000063010000630100006301000063010000020100050c01000500030e05000000
+052a01000503020201030202050301000500000005130100050301000502010005140100
+050000630100006301000063010000630100006301000063010000020100050d0100030e
+0000052b0100050302020103020205030100000005140100050301000502010005150100
+00630100006301000063010000630100006301000063010000020100050c01000500030e
+05000000052a010005030202010302020503010005000000051301000503010005020100
+05140100050000630100006301000063010000630100006301000063010000020100050d
+0100030e0000052b01000503020201030202050301000000051401000503010005020100
+0515010000630100006301000063010000630100006301000063010000020100050c0100
+0500030e05000000052a0100050302020103020205030100050000000513010005030100
+050201000514010005000063010000630100006301000063010000630100006301000002
+0100050d0100030e0000052b010005030202010302020503010000000514010005030100
+050201000515010000630100006301000063010000630100006301000063010000020100
+050c01000500030e05000000052a01000503020201030202050301000500000005110104
+050201020515010005000063010000630100006301000063010000630100006301000002
+0100050d0100030e0000052b010005030202010302020503010000000534010000630100
+006301000063010000630100006301000063010000020100050c01000500030e05000000
+052a01000503020201030202050301000500000005320100050000630100006301000063
+010000630100006301000063010000020100050d0100030e0000052b0100050302020103
+020205030100000005340100006301000063010000630100006301000063010000630100
+00020100050c01000500030e05000000052a010005030202010302020503010005000000
+05320100050000630100006301000063010000630100006301000063010000020100050d
+0100030e0000052b01000503020201030202050301000000053401000063010000630100
+0063010000630100006301000063010000020100050c01000500030e05000000052a0100
+050302020103020205030100050000000532010005000063010000630100006301000063
+0100006301000063010000020100050d0100030e0000052b010005030202010302020503
+010000000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+0500010000630100006301000063010000630100006301000063010000020100050c0100
+0500030e05000000052a0100050302020103020205030100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001ff01ff0161050d0100
+030e0000052b010005030202010302020503010005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000063010000630100006301000063
+0100006301000063010000020100050c01000500030e05000000052a0100050302020103
+020205030100000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500010000630100006301000063010000630100006301000063010000020100
+050d0100030e0000052b0100050302020103020205030100050000000532010005000063
+0100006301000063010000630100006301000063010000020100050c01000500030e0500
+0000052a0100050302020103020205030100000005340100006301000063010000630100
+00630100006301000063010000020100050d0100030e0000052b01000503020201030202
+050301000500000005130100050501000516010005000063010000630100006301000063
+0100006301000063010000020100050c01000500030e05000000052a0100050302020103
+020205030100000005120102050301020517010000630100006301000063010000630100
+006301000063010000020100050d0100030e0000052b0100050302020103020205030100
+050000000513010005050100051601000500006301000063010000630100006301000063
+01000063010000020100050c01000500030e05000000052a010005030202010302020503
+010000000514010005050100051701000063010000630100006301000063010000630100
+0063010000020100050d0100030e0000052b010005030202010302020503010005000000
+051301000505010005160100050000630100006301000063010000630100006301000063
+010000020100050c01000500030e05000000052a01000503020201030202050301000000
+051401000505010005170100006301000063010000630100006301000063010000630100
+00020100050d0100030e0000052b01000503020201030202050301000500000005130100
+050501000516010005000063010000630100006301000063010000630100006301000002
+0100050c01000500030e05000000052a0100050302020103020205030100000005140100
+050501000517010000630100006301000063010000630100006301000063010000020100
+050d0100030e0000052b0100050302020103020205030100050000000511010405010104
+05140100050000630100006301000063010000630100006301000063010000020100050c
+01000500030e05000000052a010005030202010302020503010000000534010000630100
+006301000063010000630100006301000063010000020100050d0100030e0000052b0100
+050302020103020205030100050000000532010005000063010000630100006301000063
+0100006301000063010000020100050c01000500030e05000000052a0100050302020103
+020205030100000005340100006301000063010000630100006301000063010000630100
+00020100050d0100030e0000052b01000503020201030202050301000500000005320100
+050000630100006301000063010000630100006301000063010000020100050c01000500
+030e05000000052a01000503020201030202050301000000053401000063010000630100
+0063010000630100006301000063010000020100050d0100030e0000052b010005030202
+010302020503010005000000053201000500006301000063010000630100006301000063
+01000063010000020100050c01000500030e05000000052a010005030202010302020503
+010000000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+0500010000630100006301000063010000630100006301000063010000020100050d0100
+030e0000052b010005030202010302020503010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+0500010005000100050001000500010005000100050001ff01ff0161050c01000500030e
+05000000052a010005030202010302020503010005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000063010000630100006301000063
+0100006301000063010000020100050d0100030e0000052b010005030202010302020503
+010000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+0500010000630100006301000063010000630100006301000063010000020100050c0100
+0500030e05000000052a0100050302020103020205030100050000000532010005000063
+0100006301000063010000630100006301000063010000020100050d0100030e0000052b
+010005030202010302020503010000000534010000630100006301000063010000630100
+006301000063010000020100050c01000500030e05000000052a01000503020201030202
+050301000500000005130100050401020515010005000063010000630100006301000063
+0100006301000063010000020100050d0100030e0000052b010005030202010302020503
+010000000512010205030100050201000515010000630100006301000063010000630100
+006301000063010000020100050c01000500030e05000000052a01000503020201030202
+050301000500000005130100050301000502010005140100050000630100006301000063
+010000630100006301000063010000020100050d0100030e0000052b0100050302020103
+020205030100000005140100050301000502010005150100006301000063010000630100
+00630100006301000063010000020100050c01000500030e05000000052a010005030202
+010302020503010005000000051301000506010005150100050000630100006301000063
+010000630100006301000063010000020100050d0100030e0000052b0100050302020103
+020205030100000005140100050501000517010000630100006301000063010000630100
+006301000063010000020100050c01000500030e05000000052a01000503020201030202
+050301000500000005130100050401000517010005000063010000630100006301000063
+0100006301000063010000020100050d0100030e0000052b010005030202010302020503
+010000000514010005030100050201000515010000630100006301000063010000630100
+006301000063010000020100050c01000500030e05000000052a01000503020201030202
+050301000500000005110104050101040514010005000063010000630100006301000063
+0100006301000063010000020100050d0100030e0000052b010005030202010302020503
+010000000534010000630100006301000063010000630100006301000063010000020100
+050c01000500030e05000000052a01000503020201030202050301000500000005320100
+050000630100006301000063010000630100006301000063010000020100050d0100030e
+0000052b0100050302020103020205030100000005340100006301000063010000630100
+00630100006301000063010000020100050c01000500030e05000000052a010005030202
+010302020503010005000000053201000500006301000063010000630100006301000063
+01000063010000020100050d0100030e0000052b01000503020201030202050301000000
+0534010000630100006301000063010000630100006301000063010000020100050c0100
+0500030e05000000052a0100050302020103020205030100050000000532010005000063
+0100006301000063010000630100006301000063010000020100050d0100030e0000052b
+010005030202010302020503010000000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000063010000630100006301000063010000630100
+0063010000020100050c01000500030e05000000052a0100050302020103020205030100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001ff01ff0161050d0100030e0000052b010005030202010302020503010005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000063
+0100006301000063010000630100006301000063010000020100050c01000500030e0500
+0000052a0100050302020103020205030100000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500010000630100006301000063010000630100
+006301000063010000020100050d0100030e0000052b0100050302020103020205030100
+050000000532010005000063010000630100006301000063010000630100006301000002
+0100050c01000500030e05000000052a0100050302020103020205030100000005340100
+00630100006301000063010000630100006301000063010000020100050d0100030e0000
+052b01000503020201030202050301000500000005130100050401020515010005000063
+0100006301000063010000630100006301000063010000020100050c01000500030e0500
+0000052a0100050302020103020205030100000005120102050301000502010005150100
+00630100006301000063010000630100006301000063010000020100050d0100030e0000
+052b01000503020201030202050301000500000005130100050701000514010005000063
+0100006301000063010000630100006301000063010000020100050c01000500030e0500
+0000052a0100050302020103020205030100000005140100050701000515010000630100
+006301000063010000630100006301000063010000020100050d0100030e0000052b0100
+050302020103020205030100050000000513010005050101051501000500006301000063
+01000063010000630100006301000063010000020100050c01000500030e05000000052a
+010005030202010302020503010000000514010005070100051501000063010000630100
+0063010000630100006301000063010000020100050d0100030e0000052b010005030202
+010302020503010005000000051301000507010005140100050000630100006301000063
+010000630100006301000063010000020100050c01000500030e05000000052a01000503
+020201030202050301000000051401000503010005020100051501000063010000630100
+0063010000630100006301000063010000020100050d0100030e0000052b010005030202
+010302020503010005000000051101040502010205150100050000630100006301000063
+010000630100006301000063010000020100050c01000500030e05000000052a01000503
+020201030202050301000000053401000063010000630100006301000063010000630100
+0063010000020100050d0100030e0000052b010005030202010302020503010005000000
+05320100050000630100006301000063010000630100006301000063010000020100050c
+01000500030e05000000052a010005030202010302020503010000000534010000630100
+006301000063010000630100006301000063010000020100050d0100030e0000052b0100
+050302020103020205030100050000000532010005000063010000630100006301000063
+0100006301000063010000020100050c01000500030e05000000052a0100050302020103
+020205030100000005340100006301000063010000630100006301000063010000630100
+00020100050d0100030e0000052b01000503020201030202050301000500000005320100
+050000630100006301000063010000630100006301000063010000020100050c01000500
+030e05000000052a01000503020201030202050301000000050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100006301000063010000630100
+00630100006301000063010000020100050d0100030e0000052b01000503020201030202
+050301000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+05000100050001ff01ff0161050c01000500030e05000000052a01000503020201030202
+050301000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+05000000050000630100006301000063010000630100006301000063010000020100050d
+0100030e0000052b01000503020201030202050301000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000100006301000063010000630100
+00630100006301000063010000020100050c01000500030e05000000052a010005030202
+010302020503010005000000053201000500006301000063010000630100006301000063
+01000063010000020100050d0100030e0000052b01000503020201030202050301000000
+0534010000630100006301000063010000630100006301000063010000020100050c0100
+0500030e05000000052a0100050302020103020205030100050000000513010005060100
+05150100050000630100006301000063010000630100006301000063010000020100050d
+0100030e0000052b01000503020201030202050301000000051201020505010105160100
+00630100006301000063010000630100006301000063010000020100050c01000500030e
+05000000052a010005030202010302020503010005000000051301000504010005000100
+05150100050000630100006301000063010000630100006301000063010000020100050d
+0100030e0000052b01000503020201030202050301000000051401000504010005000100
+0516010000630100006301000063010000630100006301000063010000020100050c0100
+0500030e05000000052a0100050302020103020205030100050000000513010005030100
+050101000515010005000063010000630100006301000063010000630100006301000002
+0100050d0100030e0000052b010005030202010302020503010000000514010005020100
+050201000516010000630100006301000063010000630100006301000063010000020100
+050c01000500030e05000000052a01000503020201030202050301000500000005130100
+050201050514010005000063010000630100006301000063010000630100006301000002
+0100050d0100030e0000052b010005030202010302020503010000000514010005060100
+0516010000630100006301000063010000630100006301000063010000020100050c0100
+0500030e05000000052a0100050302020103020205030100050000000511010405030102
+05140100050000630100006301000063010000630100006301000063010000020100050d
+0100030e0000052b01000503020201030202050301000000053401000063010000630100
+0063010000630100006301000063010000020100050c01000500030e05000000052a0100
+050302020103020205030100050000000532010005000063010000630100006301000063
+0100006301000063010000020100050d0100030e0000052b010005030202010302020503
+010000000534010000630100006301000063010000630100006301000063010000020100
+050c01000500030e05000000052a01000503020201030202050301000500000005320100
+050000630100006301000063010000630100006301000063010000020100050d0100030e
+0000052b0100050302020103020205030100000005340100006301000063010000630100
+00630100006301000063010000020100050c01000500030e05000000052a010005030202
+010302020503010005000000053201000500006301000063010000630100006301000063
+01000063010000020100050d0100030e0000052b01000503020201030202050301000000
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+00630100006301000063010000630100006301000063010000020100050c01000500030e
+05000000052a010005030202010302020503010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+0500010005000100050001000500010005000100050001ff01ff0161050d0100030e0000
+052b01000503020201030202050301000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500006301000063010000630100006301000063
+01000063010000020100050c01000500030e05000000052a010005030202010302020503
+010000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+0500010000630100006301000063010000630100006301000063010000020100050d0100
+030e0000052b010005030202010302020503010005000000053201000500006301000063
+01000063010000630100006301000063010000020100050c01000500030e05000000052a
+010005030202010302020503010000000534010000630100006301000063010000630100
+006301000063010000020100050d0100030e0000052b0100050302020103020205030100
+050000000513010005030104051401000500006301000063010000630100006301000063
+01000063010000020100050c01000500030e05000000052a010005030202010302020503
+010000000512010205030100051901000063010000630100006301000063010000630100
+0063010000020100050d0100030e0000052b010005030202010302020503010005000000
+051301000503010005180100050000630100006301000063010000630100006301000063
+010000020100050c01000500030e05000000052a01000503020201030202050301000000
+051401000503010005190100006301000063010000630100006301000063010000630100
+00020100050d0100030e0000052b01000503020201030202050301000500000005130100
+050301030515010005000063010000630100006301000063010000630100006301000002
+0100050c01000500030e05000000052a0100050302020103020205030100000005140100
+050701000515010000630100006301000063010000630100006301000063010000020100
+050d0100030e0000052b0100050302020103020205030100050000000513010005070100
+05140100050000630100006301000063010000630100006301000063010000020100050c
+01000500030e05000000052a010005030202010302020503010000000514010005020100
+050301000515010000630100006301000063010000630100006301000063010000020100
+050d0100030e0000052b0100050302020103020205030100050000000511010405010103
+05150100050000630100006301000063010000630100006301000063010000020100050c
+01000500030e05000000052a010005030202010302020503010000000534010000630100
+006301000063010000630100006301000063010000020100050d0100030e0000052b0100
+050302020103020205030100050000000532010005000063010000630100006301000063
+0100006301000063010000020100050c01000500030e05000000052a0100050302020103
+020205030100000005340100006301000063010000630100006301000063010000630100
+00020100050d0100030e0000052b01000503020201030202050301000500000005320100
+050000630100006301000063010000630100006301000063010000020100050c01000500
+030e05000000052a01000503020201030202050301000000053401000063010000630100
+0063010000630100006301000063010000020100050d0100030e0000052b010005030202
+010302020503010005000000053201000500006301000063010000630100006301000063
+01000063010000020100050c01000500030e05000000052a010005030202010302020503
+010000000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+0500010000630100006301000063010000630100006301000063010000020100050d0100
+030e0000052b010005030202010302020503010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+0500010005000100050001000500010005000100050001ff01ff0161050c01000500030e
+05000000052a010005030202010302020503010005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000063010000630100006301000063
+0100006301000063010000020100050d0100030e0000052b010005030202010302020503
+010000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+0500010000630100006301000063010000630100006301000063010000020100050c0100
+0500030e05000000052a0100050302020103020205030100050000000532010005000063
+0100006301000063010000630100006301000063010000020100050d0100030e0000052b
+010005030202010302020503010000000534010000630100006301000063010000630100
+006301000063010000020100050c01000500030e05000000052a01000503020201030202
+050301000500000005130100050501020514010005000063010000630100006301000063
+0100006301000063010000020100050d0100030e0000052b010005030202010302020503
+010000000512010205040100051801000063010000630100006301000063010000630100
+0063010000020100050c01000500030e05000000052a0100050302020103020205030100
+050000000513010005030100051801000500006301000063010000630100006301000063
+01000063010000020100050d0100030e0000052b01000503020201030202050301000000
+051401000503010005190100006301000063010000630100006301000063010000630100
+00020100050c01000500030e05000000052a010005030202010302020503010005000000
+051301000503010305150100050000630100006301000063010000630100006301000063
+010000020100050d0100030e0000052b0100050302020103020205030100000005140100
+050301000502010005150100006301000063010000630100006301000063010000630100
+00020100050c01000500030e05000000052a010005030202010302020503010005000000
+051301000503010005020100051401000500006301000063010000630100006301000063
+01000063010000020100050d0100030e0000052b01000503020201030202050301000000
+051401000503010005020100051501000063010000630100006301000063010000630100
+0063010000020100050c01000500030e05000000052a0100050302020103020205030100
+050000000511010405020102051501000500006301000063010000630100006301000063
+01000063010000020100050d0100030e0000052b01000503020201030202050301000000
+0534010000630100006301000063010000630100006301000063010000020100050c0100
+0500030e05000000052a0100050302020103020205030100050000000532010005000063
+0100006301000063010000630100006301000063010000020100050d0100030e0000052b
+010005030202010302020503010000000534010000630100006301000063010000630100
+006301000063010000020100050c01000500030e05000000052a01000503020201030202
+050301000500000005320100050000630100006301000063010000630100006301000063
+010000020100050d0100030e0000052b0100050302020103020205030100000005340100
+00630100006301000063010000630100006301000063010000020100050c01000500030e
+05000000052a010005030202010302020503010005000000053201000500006301000063
+01000063010000630100006301000063010000020100050d0100030e0000052b01000503
+020201030202050301000000050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100006301000063010000630100006301000063010000630100
+00020100050c01000500030e05000000052a010005030202010302020503010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+0500010005000100050001000500010005000100050001000500010005000100050001ff
+01ff0161050d0100030e0000052b01000503020201030202050301000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500006301000063
+01000063010000630100006301000063010000020100050c01000500030e05000000052a
+010005030202010302020503010000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050001000063010000630100006301000063010000630100
+0063010000020100050d0100030e0000052b010005030202010302020503010005000000
+05320100050000630100006301000063010000630100006301000063010000020100050c
+01000500030e05000000052a010005030202010302020503010000000534010000630100
+006301000063010000630100006301000063010000020100050d0100030e0000052b0100
+050302020103020205030100050000000513010005030104051401000500006301000063
+01000063010000630100006301000063010000020100050c01000500030e05000000052a
+010005030202010302020503010000000512010205030100050201000515010000630100
+006301000063010000630100006301000063010000020100050d0100030e0000052b0100
+050302020103020205030100050000000513010005060100051501000500006301000063
+01000063010000630100006301000063010000020100050c01000500030e05000000052a
+010005030202010302020503010000000514010005060100051601000063010000630100
+0063010000630100006301000063010000020100050d0100030e0000052b010005030202
+010302020503010005000000051301000506010005150100050000630100006301000063
+010000630100006301000063010000020100050c01000500030e05000000052a01000503
+020201030202050301000000051401000506010005160100006301000063010000630100
+00630100006301000063010000020100050d0100030e0000052b01000503020201030202
+050301000500000005130100050501000516010005000063010000630100006301000063
+0100006301000063010000020100050c01000500030e05000000052a0100050302020103
+020205030100000005140100050501000517010000630100006301000063010000630100
+006301000063010000020100050d0100030e0000052b0100050302020103020205030100
+050000000511010405030100051601000500006301000063010000630100006301000063
+01000063010000020100050c01000500030e05000000052a010005030202010302020503
+010000000534010000630100006301000063010000630100006301000063010000020100
+050d0100030e0000052b0100050302020103020205030100050000000532010005000063
+0100006301000063010000630100006301000063010000020100050c01000500030e0500
+0000052a0100050302020103020205030100000005340100006301000063010000630100
+00630100006301000063010000020100050d0100030e0000052b01000503020201030202
+050301000500000005320100050000630100006301000063010000630100006301000063
+010000020100050c01000500030e05000000052a01000503020201030202050301000000
+0534010000630100006301000063010000630100006301000063010000020100050d0100
+030e0000052b010005030202010302020503010005000000053201000500006301000063
+01000063010000630100006301000063010000020100050c01000500030e05000000052a
+010005030202010302020503010000000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000063010000630100006301000063010000630100
+0063010000020100050d0100030e0000052b010005030202010302020503010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+0500010005000100050001000500010005000100050001000500010005000100050001ff
+01ff0161050c01000500030e05000000052a010005030202010302020503010005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000063
+0100006301000063010000630100006301000063010000020100050d0100030e0000052b
+010005030202010302020503010000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050001000063010000630100006301000063010000630100
+0063010000020100050c01000500030e05000000052a0100050302020103020205030100
+050000000532010005000063010000630100006301000063010000630100006301000002
+0100050d0100030e0000052b010005030202010302020503010000000534010000630100
+006301000063010000630100006301000063010000020100050c01000500030e05000000
+052a01000503020201030202050301000500000005130100050401020515010005000063
+0100006301000063010000630100006301000063010000020100050d0100030e0000052b
+010005030202010302020503010000000512010205030100050201000515010000630100
+006301000063010000630100006301000063010000020100050c01000500000005000000
+05000000050000000500000005000000050000000500000005000000052a010005030202
+01030202050301ff01ff0199050d00000500000005000000050000000500000005000000
+050000000500000005000000052b010005030202010302020503010005ff05ff05e30100
+05030202010302020503010005ff05ff05e3010005030202010302020503010005ff05ff
+05e3010005030202010302020503010005ff05ff05e30100050302020103020205030100
+05ff05ff05e3010005030202010302020503010005ff05ff05e301000503020201030202
+0503010005ff05ff05e3010005030202010302020503010005ff05ff05e3010005030202
+01030202050301000549010005ff05ff0598010005030202010302020503010005480101
+05ff05ff05980100050302020103020205030100054701000500010005ff05ff05980100
+0503020201030202050301000549010005ff05ff05980100050302020103020205030100
+0549010005ff05ff059801000503020201030202050301000549010005ff05ff05980100
+0503020201030202050301000549010005ff05ff05980100050302020103020205030100
+0549010005ff05ff059801000503020201030202050301000547010405ff05ff05960100
+05030202010302020503010005ff05ff05e3010005030202010302020503010005ff05ff
+05e3010005030202010302020503010005ff05ff05e30100050302020103020205030100
+05ff05ff05e3010005030202010302020503010005ff05ff05e301000503020201030202
+050301000538010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+0500010005000100050001000500010005000100050001000500010005000100054b0100
+050302020103020205030100053701000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+0500010005000000054a0100050302020103020205030100053801000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+0500000005000000050000000500000003ff03ff033e0000054b01000503020201030202
+050301000537010005000000050000000500000005000000050000000500000005000000
+0500000005000000050000000500000005000000050000000500000005000000050003ff
+03ff033e05000000054a01000503020201030202050301000538010005000000050c0000
+050c010003ff03ff033e0000054b01000503020201030202050301000537010005000000
+050c0100050c0100050003ff03ff033e05000000054a0100050302020103020205030100
+0538010005000000050c0000050c010003ff03ff033e0000054b01000503020201030202
+050301000537010005000000050c0100050c0100050003ff03ff033e05000000054a0100
+0503020201030202050301000538010005000000050c0000050c010003ff03ff033e0000
+054b01000503020201030202050301000537010005000000050c0100050c0100050003ff
+03ff033e05000000054a01000503020201030202050301000538010005000000050c0000
+050c010003ff03ff033e0000054b01000503020201030202050301000537010005000000
+050c0100050c0100050003ff03ff033e05000000054a0100050302020103020205030100
+0538010005000000050c0000050c010003ff03ff033e0000054b01000503020201030202
+050301000537010005000000050c0100050c0100050003ff03ff033e05000000054a0100
+0503020201030202050301000538010005000000050c0000050c010003ff03ff033e0000
+054b01000503020201030202050301000537010005000000050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+0500010005000100050003ff03ff033e05000000054a0100050302020103020205030100
+053801000500010005000100050001000500010005000100050001000500010005000100
+0500010005000100050001000500010005000100050001000500010003ff03ff033e0000
+054b01000503020201030202050301000537010005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000054a01000503020201030202050301000538000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+0500000005000000050000000500000005000000054b0100050302020103020205030100
+05ff05ff05e3010005030202010302020503010005ff05ff05e301000503020201030202
+0503010005ff05ff05e3010005030202010302020503010005ff05ff05e3010005030202
+010302020503010005ff05ff05e3010005030202010302020503010005ff05ff05e30100
+05030202010302020503010005ff05ff05e3010005030202010302020503010005ff05ff
+05e3010005030202010302020503010005ff05ff05e30100050302020103020205030100
+05ff05ff05e3010005030202010302020503010005ff05ff05e301000503020201030202
+0503010005ff05ff05e3010005030202010302020503010005ff05ff05e3010005030202
+010302020503010005ff05ff05e3010005030202010302020503010005ff05ff05e30100
+05030202010302020503010005ff05ff05e3010005030202010302020503010005ff05ff
+05e3010005030202010302020503010005ff05ff05e30100050302020103020205030100
+05ff05ff05e3010005030202010302020503010005ff05ff05e301000503020201030202
+0503010005ff05ff05e3010005030202010302020503010005ff05ff05e3010005030202
+010302020503010005ff05ff05e3010005030202010302020503010005ff05ff05e30100
+05030202010302020503010005ff05ff05e3010005030202010302020503010005ff05ff
+05e3010005030202010302020503010005ff05ff05e30100050302020103020205030100
+05ff05ff05e3010005030202010302020503010005ff05ff05e301000503020201030202
+0503010005ff05ff05e3010005030202010302020503010005ff05ff05e3010005030202
+010302020503010005ff05ff05e3010005030202010302020503010005ff05ff05e30100
+05030202010100040503010005ff05ff05e301000503000502020400050301ff01ff01e5
+050300000202040000000202040005ff05ff05ed00000202040000000202040005ff05ff
+05ed00000202040000000202040005ff05ff05ed00000202040000000202040005ff05ff
+05ed000002020400000002020400000502ff02ff02e100060202040000000208040002ff
+02ff02e100000208040000000208040002ff02ff02e100000208040000000208040001ff
+01ff01e10000020804000000040901ff01ff01e100000409
+%%EndData
+end
+%%PageTrailer
+%%Trailer
+%%BoundingBox: 0 0 380 315
+%%EOF
diff --git a/lib/tv/doc/src/tv_table_browser_updated.gif b/lib/tv/doc/src/tv_table_browser_updated.gif
new file mode 100644
index 0000000000..547497487d
--- /dev/null
+++ b/lib/tv/doc/src/tv_table_browser_updated.gif
Binary files differ
diff --git a/lib/tv/doc/src/tv_table_browser_updated.ps b/lib/tv/doc/src/tv_table_browser_updated.ps
new file mode 100644
index 0000000000..0a944565e8
--- /dev/null
+++ b/lib/tv/doc/src/tv_table_browser_updated.ps
@@ -0,0 +1,2124 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (ImageMagick)
+%%Title: (/clearcase/otp/erts/lib/tv/doc/src/tv_table_browser_updated.eps)
+%%CreationDate: (Mon Mar 19 17:15:32 2001)
+%%BoundingBox: 0 0 380 315
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 0
+%%EndComments
+
+%%BeginDefaults
+%%PageOrientation: Portrait
+%%EndDefaults
+
+%%BeginProlog
+%
+% Display a color image. The image is displayed in color on
+% Postscript viewers or printers that support color, otherwise
+% it is displayed as grayscale.
+%
+/buffer 512 string def
+/byte 1 string def
+/color_packet 3 string def
+/pixels 768 string def
+
+/DirectClassPacket
+{
+ %
+ % Get a DirectClass packet.
+ %
+ % Parameters:
+ % red.
+ % green.
+ % blue.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/DirectClassImage
+{
+ %
+ % Display a DirectClass image.
+ %
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { DirectClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayDirectClassPacket } image
+ } ifelse
+} bind def
+
+/GrayDirectClassPacket
+{
+ %
+ % Get a DirectClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % red
+ % green
+ % blue
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/GrayPseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassImage
+{
+ %
+ % Display a PseudoClass image.
+ %
+ % Parameters:
+ % class: 0-PseudoClass or 1-Grayscale.
+ %
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ class 0 gt
+ {
+ currentfile buffer readline pop
+ token pop /depth exch def pop
+ /grays columns 8 add depth sub depth mul 8 idiv string def
+ columns rows depth
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { currentfile grays readhexstring pop } image
+ }
+ {
+ %
+ % Parameters:
+ % colors: number of colors in the colormap.
+ % colormap: red, green, blue color packets.
+ %
+ currentfile buffer readline pop
+ token pop /colors exch def pop
+ /colors colors 3 mul def
+ /colormap colors string def
+ currentfile colormap readhexstring pop pop
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { PseudoClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayPseudoClassPacket } image
+ } ifelse
+ } ifelse
+} bind def
+
+/DisplayImage
+{
+ %
+ % Display a DirectClass or PseudoClass image.
+ %
+ % Parameters:
+ % x & y translation.
+ % x & y scale.
+ % label pointsize.
+ % image label.
+ % image columns & rows.
+ % class: 0-DirectClass or 1-PseudoClass.
+ % compression: 0-RunlengthEncodedCompression or 1-NoCompression.
+ % hex color packets.
+ %
+ gsave
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ x y translate
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ currentfile buffer readline pop
+ token pop /pointsize exch def pop
+ /Helvetica findfont pointsize scalefont setfont
+ x y scale
+ currentfile buffer readline pop
+ token pop /columns exch def
+ token pop /rows exch def pop
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ currentfile buffer readline pop
+ token pop /compression exch def pop
+ class 0 gt { PseudoClassImage } { DirectClassImage } ifelse
+ grestore
+} bind def
+%%EndProlog
+%%Page: 1 1
+%%PageBoundingBox: 0 0 380 315
+userdict begin
+%%BeginData:
+DisplayImage
+0 0
+380.000000 315.000000
+12
+760 630
+1
+0
+0
+16
+ffffff
+000000
+d8d8d8
+c2c2c2
+6b6b6b
+d9d9d9
+b22222
+00ff00
+ff0000
+990000
+7f7f7f
+999999
+ff7f7f
+009900
+7fff7f
+000000
+000a01ff01ff01e1000b0208040001ff01ff01e100000208040000000208040002ff02ff
+02e1000002080400000002080400020000ff00ff00de0400020000000208040000000202
+04060200000004ff04ff04de020000000405020204000000020204000209000d02ff02ff
+02d500000202040000000202040002080000020d04000289010302110103023201020258
+0102020c010102010101021e010102290101020601010208010102310101022a01010230
+0101029600000202040000000202040002080000020d0400028901010202010702000101
+0203010102010101020e01050200010702010103020d0101020401010204010302030103
+020e010302060103020301030203010302060103020b0101020a01010202010102190100
+02030101021c0100020b01010206010102090101021b010202020100020d0101022a0101
+020c0104021e0101029600000202040000000202040002080000020d0400028901010205
+0101020301010203010102010101020e0101020701010203010102010101020c01010202
+010302030101020101010201010102010101020801010201010102010101020401010201
+01010201010102010101020101010201010102040101020101010201010102060101020a
+0101020201010218010102210101020b01010206010102090101021b010202020100020d
+01010238010102020101021d010102960000020204000000020204000208000002020406
+020304000289010102050101020301010203010102010101020e01010207010102030101
+020501010209010102030101020701010201010102010101020601020202010102010101
+020801010201010102010101020101010201010102040101020101010202010202030101
+020a01010203010102020103020301030202010302010104020101010202010302030101
+02000101020a0104020101030203010102000101020301010202010302030101021a0100
+020001010201010002020103020301040202010302020101020901010200010102010101
+020301030203010102020101020001010202010102010103020201010200010102010101
+020301030202010102000101020101010202010302020101020201010285000002020400
+000004030208000002020400030400000203040002890101020501010204010102020100
+02020101020e0101020701010203010202040101020a0100020301010207010102010101
+020101010205010102040101020101010208010102010101020101010201010102010101
+02040101020101010204010102020100020b010102030101020101010201010102010101
+020101010200010102010101020101010203010102010101020101010202010202000101
+020a01010202010102010101020201020200010102020101020101010201010102020101
+021a01000200010102010100020101010201010102010101020101010201010102010101
+020101010209010202000102020001010201010102010101020201010202010202000101
+020101010200010102000101020201020200010202000101020101010201010102010101
+0200010102010101020101010201010102010101020201010285000004030101020b0000
+0203040003020000020404000289010102050101020401010201010102020101020e0104
+0204010102040103020d0101020401010205010202020101020101010204010102050101
+020101010207010102020101020101010202010402040101020101010205010102020101
+020901010203010102010101020101010201010102080101020101010203010102010101
+020101010202010102010101020a01010206010102020101020101010202010102010101
+0201010102020101021a0100020001020200010002010101020101010201010102010101
+0201010102010101020d0101020101010201010102050101020201010202010102010101
+020101010200010102000101020201010201010102010101020501010201010202030101
+0201010102010101020101010202010002890103020b0000020304000302000002040400
+0289010102050101020501010200010002030101020e01010207010102060102020e0100
+020301010207010102010101020101010205010102040101020101010206010102030101
+020101010205010102040101020101010204010102020100020b01010203010102010101
+020101010201010102050104020101010203010102010101020101010202010102010101
+020a0101020301040202010102010101020201010201010502020101021a010002010101
+020001000201010102010101020101010201010102010105020d01010201010102010101
+020201040202010102020101020101010201010102000101020001010202010102010101
+0201010102020104020101010204010102010105020201010200010102890103020b0000
+02040400030000000205040002890101020501010205010302030101020e010102070101
+02070101020d010102030101020701010201010102010101020601020202010102010101
+0205010102040101020101010205010102040101020101010202010202030101020a0101
+020301010201010102010101020101010204010102010101020101010203010102010101
+020101010202010102010101020a01010202010102010101020201010201010102020101
+0201010102060101021a0100020201020201010102010101020101010201010102010101
+021101010201010102010101020101010201010102020101020201010201010102010101
+020101010200010102010101020101010201010102010101020101010201010102040101
+020101010206010102000100028a0103020b000002040400030000000205040002890101
+020501010206010102040101020e01010207010102030101020101010201010102080101
+020401010203010102010101020101010201010102010101020401010201010102010101
+020101010200010502010101020101010201010102010101020101010200010102010101
+0201010102060101020a0101020201010201010102010101020101010202010002000101
+02010101020101010203010102010101020101010202010102010101020a010102020101
+02010101020201010201010102020101020101010202010002010101021b010002020102
+020101010201010102010101020001020201010102020100020101010209010102010101
+020101010201010102010101020201010202010102010101020201010207010102010101
+0201010102010101020101010201010102040101020101010202010002030102028a0103
+020b0000020500000206040002890101020501010206010102040101020e010502030101
+020401030202010102080101020401010204010302030103020201010209010302020101
+0200010502020103020301030202010102010103020b0101020a01010202010102020103
+0203010302020102020001010201010202010101020201030203010102010101020b0102
+020101020200010102010104020301010202010302020101021b01000203010102020103
+020301010200010102020103020201010209010102010101020101010202010202000101
+020101010202010102010101020301050202010102010101020101010202010202000101
+02000101020401010202010302040101028b0103020b0000020d04000289010302110103
+0232010202190100023d0102020c01010237010602230101029e0101028c0103020b0000
+020d040002f2010002ff02540101028c0103020b0000020d040002ff02ff02d70103020c
+040d02ff02ff02d8010302ff02ff02f3010302ff02ff02f30103020200ff00ff00ec0400
+020201030202000004ff04ff04ec0202010302ff02ff02f3010302020500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000202010302020000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000202010302020500000005ff05ff05ea01000202010302020000
+05ff05ff05ea010005000202010302020500000005ff05ff05ea01000202010302020000
+05ff05ff05ea010005000202010302020500000005ff05ff05ea01000202010302020000
+050c06040504060005030602051f06040505060005040600050406000519060005020600
+0504060005270602050b06000506060005ff05ff05080600050206000509060205130100
+050002020103020205000000050b0600050f0600051f060005090600050a060005190600
+05020600052c060005020600050a060005ff05ff0510060005020600050b060005140100
+0202010302020000050c0600050606020505060005030602051806000506060105000600
+050206020502060405170600050206000502060205030602050206000502060005170600
+050206000501060005000601050206040502060205030602050206000500060105030602
+05ff05f306000502060005020602050506000502060005000601050c0100050002020103
+020205000000050b06000508060005050600050206000502060005170600050506000501
+06010504060005040600051a060005000600050506000502060005020600050106000502
+060005170600050206000501060105010600050306000506060005020600050206000501
+060105010600050106000502060005ff05f2060005020600050106000502060005040600
+0502060105010600050c01000202010302020000050c0603050506000505060005020600
+050206000517060305020600050206000504060005040600051a06000500060005050600
+050206000502060005010600050006000500060005170600050206000501060005020600
+0503060005060600050206000502060005010600050206000501060005ff05f606040501
+060005020600050406000502060005020600050b0100050002020103020205000000050b
+06000508060005050600050206040517060005050600050206000504060005040600051a
+060005000600050506000502060405010600050006000500060005170600050206000501
+0600050206000503060005060600050206000502060005010600050206000502060205ff
+05f306000502060005010604050406000502060005020600050c01000202010302020000
+050c0600050806000505060005020600051b060005050600050206000504060005040600
+051b06000506060005020600050506000500060005000600051706000502060005010600
+050206000503060005060600050206000502060005010600050206000505060005ff05f2
+06000502060005010600050806000502060005020600050b010005000202010302020500
+0000050b0600050806000505060005020600050206000517060005050600050106010504
+060005040600051b06000506060005020600050206000501060005000600050006000517
+060005020600050106010501060005030600050606000502060005020600050106000502
+0600050106000502060005ff05f206000502060005010600050206000504060005020601
+05010600050c01000202010302020000050c060005080600050506000503060205180604
+050206010500060005040600050506010519060005060600050306020503060005000600
+051906020502060005000601050506010504060005030602050206000502060005020602
+05ff05f306000502060005020602050506000502060005000601050c0100050002020103
+02020500000005a8060005ff05ff052e0600051001000202010302020000050b0606052a
+0606052a0606052a06060500060005ff05ff05180606050e0600050f0100050002020103
+020205000000050a0606052a0606052a0606052a06060500060005ff05ff05180606050e
+060005100100020201030202000005ff05ff05ea010005000202010302020500000005ff
+05ff05ea0100020201030202000005ff05ff05ea01000500020201030202050000000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100020201030202000005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+01000500010005000100050002020103020205ff05ff05ed02020103020205ff05ff05ed
+02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed
+02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed
+020201030202053600000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000051a00000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050100000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050100000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000051a00000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000051a00000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000051a00000500000005000000050000000500000005000000050000000500
+00000500000005000000050000000500000005ff05a50202010302020535000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500010005180000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000100000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+010000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050001000518000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500010005180000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000100051800000500000005000000050000000500000005000000
+0500000005000000050000000500000005000000050000000500010005ff05a402020103
+02020536000005140100051a00000514010005010000051401000501000005140100051a
+000005140100051a000005140100051a00000514010005ff05a502020103020205350000
+051601000518000005160100000005160100000005160100051800000516010005180000
+05160100051800000516010005ff05a40202010302020536000005140100051a00000514
+010005010000051401000501000005140100051a000005140100051a000005140100051a
+00000514010005ff05a50202010302020535000005050602050306020506010005180000
+051601000000051601000000051601000518000005160100051800000516010005180000
+0516010005ff05a402020103020205360000050406020503060205050100051a00000514
+010005010000051401000501000005140100051a00000506060405080100051a00000508
+060105090100051a0000050806030507010005ff05a50202010302020535000005040604
+050106040505010005180000051006000504010000000510060005040100000005040600
+051001000518000005050608050701000518000005080603050901000518000005070607
+0506010005ff05a402020103020205360000050306000501060105010600050106010504
+0100051a0000050f06000503010005010000050f0600050301000501000005030600050f
+0100051a00000503060a05050100051a00000507060305080100051a0000050506030501
+06030504010005ff05a5020201030202053500000503060d0504010005180000050d0600
+0501060005040100000005040600050a06000504010000000504060005010600050d0100
+051800000504060305020603050601000518000005090601050a01000518000005060602
+050306020505010005ff05a4020201030202053600000501060005000603050006020500
+060405020100051a0000050c060005010600050301000501000005030600050a06000503
+0100050100000503060005010600050c0100051a0000050206030504060305040100051a
+000005140100051a000005050602050306020504010005ff05a502020103020205350000
+050206000500060305000602050006040503010005180000050a06000501060005010600
+050401000000050406000504060005040600050401000000050406000501060005010600
+050a01000518000005030602050306070503010005180000050706040509010005180000
+05070601050206020506010005ff05a40202010302020536000005010600050006030500
+06020500060405020100051a000005090600050106000501060005030100050100000503
+06000504060005040600050301000501000005030600050106000501060005090100051a
+0000050206020504060505030100051a00000507060305080100051a0000050a06020506
+010005ff05a5020201030202053500000502060005000603050006020500060405030100
+051800000507060005010600050106000501060005040100000005040600050406000501
+060005010600050401000000050406000501060005010600050106000507010005180000
+05030602050506030505010005180000050906020509010005180000050a060205080100
+05ff05a40202010302020536000005010600050006070500060405020100051a00000506
+060005010600050106000501060005030100050100000503060005040600050106000501
+060005030100050100000503060005010600050106000501060005060100051a00000502
+06030505060105050100051a00000508060205080100051a0000050806020508010005ff
+05a502020103020205350000050206000500060405010600050006040503010005180000
+050406000501060005010600050106000501060005040100000005040600050106000501
+060005010600050106000504010000000504060005010600050106000501060005010600
+050401000518000005040603050d01000518000005090602050901000518000005090602
+0509010005ff05a402020103020205360000050106060501060605020100051a00000503
+060005010600050106000501060005010600050301000501000005030600050106000501
+060005010600050106000503010005010000050306000501060005010600050106000501
+060005030100051a00000503060905060100051a00000508060205080100051a00000514
+010005ff05a5020201030202053500000502060005000602050506000500060205030100
+051800000504060005010600050106000501060005010600050401000000050406000501
+060005010600050106000501060005040100000005040600050106000501060005010600
+050106000504010005180000050506070508010005180000050806040508010005180000
+050906020509010005ff05a4020201030202053600000501060005000602050506000500
+060205020100051a00000503060005010600050106000501060005010600050301000501
+000005030600050106000501060005010600050106000503010005010000050306000501
+060005010600050106000501060005030100051a00000506060405080100051a00000506
+060605060100051a0000050806020508010005ff05a50202010302020535000005020604
+050506040503010005180000051601000000051601000000051601000518000005160100
+0518000005160100051800000516010005ff05a40202010302020536000005140100051a
+00000514010005010000051401000501000005140100051a000005140100051a00000514
+0100051a00000514010005ff05a502020103020205350000051601000518000005160100
+000005160100000005160100051800000516010005180000051601000518000005160100
+05ff05a40202010302020536000005140100051a00000514010005010000051401000501
+000005140100051a000005140100051a000005140100051a00000514010005ff05a50202
+010302020535000005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005180000050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+000005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010000000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000518000005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005180000050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100051800000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+0500010005ff05a402020103020205360100050001000500010005000100050001000500
+0100050001000500010005000100050001000500010005000100051a0100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005010100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005010100050001000500010005000100050001000500
+0100050001000500010005000100050001000500010005000100051a0100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+0100051a0100050001000500010005000100050001000500010005000100050001000500
+0100050001000500010005000100051a0100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005ff05a5020201030202
+05ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed020201030202
+05ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed020201030202
+05ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed020201030202
+05ff05ff05ed02020103020205ff05ff05ed020201030202050301ff01ff01e505030202
+01030202050301ff01ff01d1050000000500000005000000050000000500000005000000
+050000000500000005000000050001000503020201030202050301ff01ff01d100000500
+000005000000050000000500000005000000050000000500000005000000050001010503
+020201030202050301020bff0bff0bcb010205000000050e010005000100050302020103
+0202050301020bff0bff0bca000001020000051001010503020201030202050301020b01
+00ff00ff00c9010205000000050e0100050001000503020201030202050301020b0100ff
+00ff00c901020000051001010503020201030202050301020b0100ff00ff00c901020500
+0000050e0100050001000503020201030202050301020b0100ff00ff00c9010200000510
+01010503020201030202050301020b0100ff00ff00c9010205000000050e010005000100
+0503020201030202050301020b0100ff00ff00c9010200000502010a0502010105030202
+01030202050301020b0100ff00ff00c90102050000000502010805020100050001000503
+020201030202050301020b0100ff00ff00c9010200000504010605040101050302020103
+0202050301020b0100ff00ff00c901020500000005040104050401000500010005030202
+01030202050301020b0100ff00ff00c90102000005060102050601010503020201030202
+050301020b0100ff00ff00c9010205000000050601000506010005000100050302020103
+0202050301020b0100ff00ff00c901020000051001010503020201030202050301020b01
+00ff00ff00c9010205000000050e0100050001000503020201030202050301020b0100ff
+00ff00c901020000051001010503020201030202050301020b0100ff00ff00c901020500
+0000050e0100050001000503020201030202050301020b0100ff00ff00c9010200000510
+01010503020201030202050301020b0100ff00ff00c9010205000000050e010005000100
+0503020201030202050301020b0000ff00ff00ca01020000051001010503020201030202
+050301ff01ff01d105000000050001000500010005000100050001000500010005000100
+0500010005000100050001000503020201030202050301ff01ff01d10000050001000500
+010005000100050001000500010005000100050001000500010005000101050302020103
+0202050301ff01ff01e5050302020103020205ff05ff05ed02020103020205ff05ff05ed
+02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed
+02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed
+02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed
+02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed
+02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed
+02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed
+020201030202050301ff01ff01e505030202010302020503010005ff05ff05970100054a
+01000503020201030202050301000563010505ff05ff052d0100054a0100050302020103
+0202050301000562010705ff05ff052c0100054a01000503020201030202050301000561
+01020503010205ff05ff052b0100054a0100050302020103020205030100056101010505
+010105ff05ff052b0100054a0100050302020103020205030100056101020503010205ff
+05ff052b0100054a01000503020201030202050301000562010705ff05ff052c0100054a
+01000503020201030202050301000563010505ff05ff052d0100054a0100050302020103
+0202050301000565010105ff05ff052f0100054a01000503020201030202050301000565
+010105ff05ff052f0100054a01000503020201030202050301000565010105ff05ff052f
+0100054a01000503020201030202050301000565010105ff05ff052f0100054a01000503
+020201030202050301000565010105ff05ff052f0100054a010005030202010302020503
+01000565010105ff05ff052f0100054a0100050302020103020205030100056101010500
+010205ff05ff052f0100054a0100050302020103020205030100056101010500010205ff
+05ff052f0100054a01000503020201030202050301000561010505ff05ff052f0100054a
+01000503020201030202050301000561010505ff05ff052f0100054a0100050302020103
+020205030100056101020500010105ff05ff052f0100054a010005030202010302020503
+010005ff05ff05970100054a01000503020201030202050301ff01ff0199054a01000503
+020201030202050301000536000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+00000500000005000000050000000500000005000000050000000a040500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000a04050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+0000050000000500000005000000050000000a0405000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+05000000050000000500000005000000050000000500000005000000050000000a040500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000a04050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+0500000005000000050000000500000005000000050000000a0405000000010005140100
+050001000500010005000100050001000500010005000100050001000500010005240100
+050302020103020205030100053500000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+0500000005000000050000000500000005000000050000000500000005000a0301000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000a03010000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+05000000050000000500000005000000050000000500000005000a030100000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+0500000005000a0301000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000a03010000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+05000a030100000005000100051301000500010005000100050001000500010005000100
+050001000500010005000100050000000523010005030202010302020503010005360000
+055e01000a01010205000000055c01000a01010205000000055c01000a01010205000000
+055c01000a01010205000000055c01000a01010205000000055c01000a01010205000000
+010005140100050000000500000005000000050000000500000005000000050000000500
+00000524010005030202010302020503010005350000052d0100052f010005000a010102
+0000052b0102052d010005000a0101020000052b0102052d010005000a0101020000052d
+0100052d010005000a0101020000052a0104052c010005000a0101020000052c0102052c
+010005000a01010200000500010005130100050000000500000005000000050000000500
+000005000000050000000500010005000000052301000503020201030202050301000536
+0000052a0102053001000a010102050000000529010005020100052d01000a0101020500
+00000529010005020100052d01000a01010205000000052b0101052e01000a0101020500
+000005290100053101000a01010205000000052a0100053001000a010102050000000100
+0514010005000000050a0100050000000524010005030202010302020503010005350000
+052d0100052f010005000a0101020000052a010005020100052c010005000a0101020000
+052e0100052c010005000a0101020000052b010005000100052d010005000a0101020000
+052a01000530010005000a0101020000052a01000530010005000a010102000005000100
+0513010005000000050c0100050000000523010005030202010302020503010005360000
+052c0100053001000a010102050000000529010005020100052d01000a01010205000000
+052d0100052d01000a01010205000000052a010005000100052e01000a01010205000000
+05290100053101000a0101020500000005290100053101000a0101020500000001000514
+010005000000050a0100050000000524010005030202010302020503010005350000052d
+0100052f010005000a0101020000052d0100052d010005000a0101020000052c0101052d
+010005000a0101020000052a010005010100052d010005000a0101020000052a0103052d
+010005000a0101020000052a0103052d010005000a010102000005000100051301000500
+0000050c0100050000000523010005030202010302020503010005360000052c01000530
+01000a01010205000000052b0100052f01000a01010205000000052d0100052d01000a01
+0102050000000528010005020100052e01000a01010205000000052d0100052d01000a01
+0102050000000529010005020100052d01000a0101020500000001000514010005000000
+050a0100050000000524010005030202010302020503010005350000052d0100052f0100
+05000a0101020000052b0100052f010005000a0101020000052e0100052c010005000a01
+0102000005290105052c010005000a0101020000052e0100052c010005000a0101020000
+052a010005020100052c010005000a0101020000050001000513010005000000050c0100
+050000000523010005030202010302020503010005360000052c0100053001000a010102
+050000000529010005020100052d01000a010102050000000529010005020100052d0100
+0a01010205000000052c0100052e01000a010102050000000528010005030100052d0100
+0a010102050000000529010005020100052d01000a010102050000000100051401000500
+0000050a0100050000000524010005030202010302020503010005350000052b0104052d
+010005000a0101020000052a0104052c010005000a0101020000052b0102052d01000500
+0a0101020000052c0102052c010005000a0101020000052a0103052d010005000a010102
+0000052b0102052d010005000a0101020000050001000513010005000000050c01000500
+00000523010005030202010302020503010005360000055e01000a01010205000000055c
+01000a01010205000000055c01000a01010205000000055c01000a01010205000000055c
+01000a01010205000000055c01000a0101020500000001000514010005000000050a0100
+050000000524010005030202010302020503010005350000055e010005000a0101020000
+055c010005000a0101020000055c010005000a0101020000055c010005000a0101020000
+055c010005000a0101020000055c010005000a0101020000050001000513010005000000
+050c0100050000000523010005030202010302020503010005360000055e01000a010102
+05000000055c01000a01010205000000055c01000a01010205000000055c01000a010102
+05000000055c01000a01010205000000055c01000a010102050000000100050e01000504
+010005000000050a0100050000000524010005030202010302020503010005350000055e
+010005000a0101020000055c010005000a0101020000055c010005000a0101020000055c
+010005000a0101020000055c010005000a0101020000055c010005000a01010200000500
+0100050d01010503010005000000050c0100050000000523010005030202010302020503
+010005360000055e01000a01010205000000055c01000a01010205000000055c01000a01
+010205000000055c01000a01010205000000055c01000a01010205000000055c01000a01
+0102050000000100050c0100050001000504010005000000050001000500010005000100
+050001000500010005000100050000000524010005030202010302020503010005350000
+055e010005000a0101020000055c010005000a0101020000055c010005000a0101020000
+055c010005000a0101020000055c010005000a0101020000055c010005000a0101020000
+05000100050e010005030100050000000500000005000000050000000500000005000000
+050000000500010005000000052301000503020201030202050301000536000005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+05000100050001000a010102050000000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+0500010005000100050001000500010005000100050001000a0101020500000005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000a01010205000000050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+05000100050001000500010005000100050001000a010102050000000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+0a0101020500000005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000a010102050000000100050e0100050401000500
+0000050a0100050000000524010005030202010302020503010005350000050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+01000500010005000a000103000005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+0100050001000500010005000100050001000500010005000a0001030000050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000a00010300000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+01000500010005000100050001000500010005000a000103000005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+0a0001030000050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000a000103000005000100050e0100050301000500
+0000050c0100050000000523010005030202010302020503010005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000063010000630100
+0063010000630100006301000063010000020100050e01000504010005000000050a0100
+050000000524010005030202010302020503010000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050001000063010000630100006301000063
+0100006301000063010000020100050e01000503010005000000050c0100050000000523
+010005030202010302020503010005000000053201000500006301000063010000630100
+00630100006301000063010000020100050c01040502010005000000050a010005000000
+052401000503020201030202050301000000053401000063010000630100006301000063
+01000063010000630100000201000513010005000000050c010005000000052301000503
+020201030202050301000500000005170100051901000500006301000063010000630100
+006301000063010000630100000201000514010005000000050a01000500000005240100
+050302020103020205030100000005160102051a0100000f010200030102004901000007
+010000230100000b010200030102001f0100006301000063010000630100006301000002
+01000513010005000000050c010005000000052301000503020201030202050301000500
+0000051701000519010005000011010000050100004901000007010000230100000d0100
+00050100001f010000630100006301000063010000630100000201000514010005000000
+050a01000500000005240100050302020103020205030100000005180100051a01000008
+010200050100000501000003010200420100000701000000010100030102000201000000
+01010002010000000101000301020002010400010100000201000004010000050100001f
+010000630100006301000063010000630100000201000513010005000000050c01000500
+000005230100050302020103020205030100050000000517010005190100050000070100
+000201000004010000050100000201000002010000410100000701010001010000010100
+000201000001010100010100000101010001010000010100000201000003010000030100
+000201000004010000050100001f01000063010000630100006301000063010000020100
+0514010005000000050a0100050000000524010005030202010302020503010000000518
+0100051a0100000701000002010000040100000501000002010000020100004101000007
+010000020100000101000002010000010100000501000002010000010100000701000003
+0100000201000004010000050100001f0100006301000063010000630100006301000002
+01000513010005000000050c010005000000052301000503020201030202050301000500
+000005170100051901000500000701000002010000040100000501000002010400410100
+000701000002010000010100000201000001010000050100000201000002010200040100
+00030100000201000004010000050100001f010000630100006301000063010000630100
+000201000514010005000000050001000500010005000100050001000500010005000100
+0500000005240100050302020103020205030100000005180100051a0100000701000002
+010000040100000501000002010000450100000701000002010000010100000201000001
+01000005010000020100000501000003010000030100000201000004010000050100001f
+010000630100006301000063010000630100000201000513010005000000050001000500
+010005000100050001000500010005000100050001000500000005230100050302020103
+020205030100050000000515010405170100050000070100000201000004010000050100
+000201000002010000410100000701000002010000010100000201000001010000050100
+0002010000010100000201000003010000030100000101010004010000050100001f0100
+006301000063010000630100006301000002010005140100030e00000524010005030202
+010302020503010000000534010000080102000501000005010000030102004201000007
+010000020100000201020002010000050100000201000002010200050101000201010000
+01000004010000050100001f010000630100006301000063010000630100000201000513
+01000500030e050000000523010005030202010302020503010005000000053201000500
+0063010000630100006301000063010000630100006301000002010005140100030e0000
+052401000503020201030202050301000000053401000063010000630100006301000063
+0100006301000063010000020100051301000500030e0500000005230100050302020103
+020205030100050000000532010005000063010000630100006301000063010000630100
+006301000002010005140100030e00000524010005030202010302020503010000000534
+010000630100006301000063010000630100006301000063010000020100051301000500
+030e05000000052301000503020201030202050301000500000005320100050000630100
+00630100006301000063010000630100006301000002010005140100030e000005240100
+050302020103020205030100000005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010000630100006301000063010000630100006301000063
+010000020100051301000500030e05000000052301000503020201030202050301000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+01ff01ff016105140100030e000005240100050302020103020205030100050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000630100
+006301000063010000630100006301000063010000020100051301000500030e05000000
+052301000503020201030202050301000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000100006301000063010000630100006301000063
+0100006301000002010005140100030e0000052401000503020201030202050301000500
+000005320100050000630100006301000063010000630100006301000063010000020100
+051301000500030e05000000052301000503020201030202050301000000053401000063
+010000630100006301000063010000630100006301000002010005140100030e00000524
+010005030202010302020503010005000000051601020518010005000063010000630100
+0063010000630100006301000063010000020100051301000500030e0500000005230100
+0503020201030202050301000000051601000502010005180100001f0100000301020003
+010200340100000f01020050010000630100006301000063010000630100000201000514
+0100030e0000052401000503020201030202050301000500000005150100050201000517
+010005000026010000050100003401000011010000500100006301000063010000630100
+0063010000020100051301000500030e0500000005230100050302020103020205030100
+000005160100050201000518010000080101000001000001010000020100000101000000
+010100030102000501000005010000030102002d01000008010200050100000201000002
+01000002010200030102000301020002010000000101002d010000630100006301000063
+0100006301000002010005140100030e0000052401000503020201030202050301000500
+000005180100051801000500000701000001010100010100000201000001010100010100
+0004010000050100000501000002010000020100002c0100000701000002010000040100
+000201000002010000010100000201000001010000020100000101000002010000010101
+00010100002c01000063010000630100006301000063010000020100051301000500030e
+0500000005230100050302020103020205030100000005180100051a0100000701000002
+01000001010000020100000101000002010000040100000501000005010000060100002c
+010000070100000801000002010000020100000101000005010000050100000201000001
+010000020100002c0100006301000063010000630100006301000002010005140100030e
+0000052401000503020201030202050301000500000005160100051a0100050000070100
+000201000001010000020100000101000002010000040100000501000005010000030103
+002c01000008010200050100000201000002010000020102000301020002010400010100
+00020100002c01000063010000630100006301000063010000020100051301000500030e
+050000000523010005030202010302020503010000000516010005020100051801000007
+010000020100000101000002010000010100000201000004010000050100000501000002
+010000020100002c0100000b010000040100000201000002010000050100000501000001
+01000005010000020100002c010000630100006301000063010000630100000201000514
+0100030e0000052401000503020201030202050301000500000005150104051701000500
+000701000001010100010100000101010001010000020100000401000005010000050100
+0002010000020100002c0100000701000002010000040100000201000001010100010100
+00020100000101000002010000010100000201000001010000020100002c010000630100
+00630100006301000063010000020100051301000500030e050000000523010005030202
+010302020503010000000534010000080101000001000002010100000100000101000002
+010000040100000501000005010000030103002c01000008010200050100000301010000
+01000002010200030102000301020002010000020100002c010000630100006301000063
+0100006301000002010005140100030e0000052401000503020201030202050301000500
+0000053201000500000b0100005601000063010000630100006301000063010000630100
+00020100051301000500030e050000000523010005030202010302020503010000000534
+010000070100000201000056010000630100006301000063010000630100006301000002
+010005140100030e00000524010005030202010302020503010005000000053201000500
+000801020057010000630100006301000063010000630100006301000002010005130100
+0500030e0500000005230100050302020103020205030100000005340100006301000063
+0100006301000063010000630100006301000002010005140100030e0000052401000503
+020201030202050301000500000005320100050000630100006301000063010000630100
+006301000063010000020100051301000500030e05000000052301000503020201030202
+050301000000050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100006301000063010000630100006301000063010000630100000201000514
+0100030e0000052401000503020201030202050301000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+01000500010005000100050001000500010005000100050001ff01ff0161051301000500
+030e05000000052301000503020201030202050301000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500006301000063010000630100
+0063010000630100006301000002010005140100030e0000052401000503020201030202
+050301000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000100006301000063010000630100006301000063010000630100000201000513
+01000500030e050000000523010005030202010302020503010005000000053201000500
+0063010000630100006301000063010000630100006301000002010005140100030e0000
+052401000503020201030202050301000000053401000063010000630100006301000063
+0100006301000063010000020100051301000500030e0500000005230100050302020103
+020205030100050000000516010205180100050000630100006301000063010000630100
+00630100006301000002010005140100030e000005240100050302020103020205030100
+00000516010005020100051801000063010000070100005a010000630100006301000063
+01000063010000020100051301000500030e050000000523010005030202010302020503
+010005000000051901000517010005000063010000070100005a01000063010000630100
+00630100006301000002010005140100030e000005240100050302020103020205030100
+0000051a0100051801000008010200020100000001010002010000000101000301020042
+010000070100000001010002010000000101000301020002010100000100000201010000
+010000030102003401000063010000630100006301000063010000020100051301000500
+030e05000000052301000503020201030202050301000500000005170101051801000500
+000701000002010000010101000101000001010100010100000101000002010000410100
+000701010001010000010101000101000001010000020100000101000000010000000100
+000101000000010000000100000101000002010000330100006301000063010000630100
+006301000002010005140100030e0000052401000503020201030202050301000000051a
+010005180100000b01000001010000020100000101000002010000050100004101000007
+010000020100000101000005010000020100000101000000010000000100000101000000
+010000000100000501000033010000630100006301000063010000630100000201000513
+01000500030e050000000523010005030202010302020503010005000000051901000517
+010005000008010300010100000201000001010000020100000201030041010000070100
+000201000001010000050100000201000001010000000100000001000001010000000100
+000001000002010300330100006301000063010000630100006301000002010005140100
+030e00000524010005030202010302020503010000000516010005020100051801000007
+010000020100000101000002010000010100000201000001010000020100004101000007
+010000020100000101000005010000020100000101000000010000000100000101000000
+010000000100000101000002010000330100006301000063010000630100006301000002
+0100051301000500030e0500000005230100050302020103020205030100050000000516
+010205180100050000070100000201000001010000020100000101000002010000010100
+000201000041010000070101000101000001010000050100000201000001010000000100
+000001000001010000000100000001000001010000020100003301000063010000630100
+00630100006301000002010005140100030e000005240100050302020103020205030100
+000005340100000801030001010000020100000101000002010000020103004101000007
+010000000101000201000006010200020100000001000000010000010100000001000000
+010000020103003301000063010000630100006301000063010000020100051301000500
+030e05000000052301000503020201030202050301000500000005320100050000630100
+00630100006301000063010000630100006301000002010005140100030e000005240100
+050302020103020205030100000005340100006301000063010000630100006301000063
+01000063010000020100051301000500030e050000000523010005030202010302020503
+010005000000053201000500006301000063010000630100006301000063010000630100
+0002010005140100030e0000052401000503020201030202050301000000053401000063
+0100006301000063010000630100006301000063010000020100051301000500030e0500
+000005230100050302020103020205030100050000000532010005000063010000630100
+006301000063010000630100006301000002010005140100030e00000524010005030202
+010302020503010000000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000063010000630100006301000063010000630100006301000002
+0100051301000500030e0500000005230100050302020103020205030100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001ff01ff
+016105140100030e00000524010005030202010302020503010005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000063010000630100
+0063010000630100006301000063010000020100051301000500030e0500000005230100
+050302020103020205030100000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500010000630100006301000063010000630100006301000063
+01000002010005140100030e000005240100050302020103020205030100050000000532
+010005000063010000630100006301000063010000630100006301000002010005130100
+0500030e0500000005230100050302020103020205030100000005340100006301000063
+0100006301000063010000630100006301000002010005140100030e0000052401000503
+020201030202050301000500000005180100051801000500006301000063010000630100
+00630100006301000063010000020100051301000500030e050000000523010005030202
+010302020503010000000518010105190100001001000006010000490100000e0100001c
+0100000b010200030102001f010000630100006301000063010000630100000201000514
+0100030e0000052401000503020201030202050301000500000005160100050001000518
+010005000010010000510100000e0100001c0100000d010000050100001f010000630100
+00630100006301000063010000020100051301000500030e050000000523010005030202
+010302020503010000000517010005000100051901000008010200020104000201020002
+01000000010100030102003b010000080102000201000001010000030102000201000000
+0101000301020002010400010100000201000004010000050100001f0100006301000063
+010000630100006301000002010005140100030e00000524010005030202010302020503
+010005000000051501000501010005180100050000070100000201000003010000060100
+00020101000101000001010000020100003a010000070100000201000001010000000100
+000301000002010000010101000101000001010000020100000301000003010000020100
+0004010000050100001f0100006301000063010000630100006301000002010005130100
+0500030e0500000005230100050302020103020205030100000005150100050201000519
+0100000701000007010000060100000201000002010000050100003a0100000701000005
+010100080100000101000002010000010100000701000003010000020100000401000005
+0100001f0100006301000063010000630100006301000002010005140100030e00000524
+010005030202010302020503010005000000051401050517010005000008010200040100
+00060100000201000002010000020103003a010000080102000201010005010300010100
+00020100000201020004010000030100000201000004010000050100001f010000630100
+00630100006301000063010000020100051301000500030e050000000523010005030202
+010302020503010000000519010005190100000b01000003010000060100000201000002
+01000001010000020100003a0100000b0100000101000000010000030100000201000001
+010000020100000501000003010000030100000201000004010000050100001f01000063
+01000063010000630100006301000002010005140100030e000005240100050302020103
+020205030100050000000517010205170100050000070100000201000003010000060100
+00020100000201000001010000020100003a010000070100000201000001010000010100
+000201000002010000010100000201000001010000020100000301000003010000010101
+0004010000050100001f0100006301000063010000630100006301000002010005130100
+0500030e0500000005230100050302020103020205030100000005340100000801020005
+010100040100000201000002010000020103003a01000008010200020100000201000002
+01030001010000020100000201020005010100020101000001000004010000050100001f
+0100006301000063010000630100006301000002010005140100030e0000052401000503
+020201030202050301000500000005320100050000630100006301000063010000630100
+006301000063010000020100051301000500030e05000000052301000503020201030202
+050301000000053401000063010000630100006301000063010000630100006301000002
+010005140100030e00000524010005030202010302020503010005000000053201000500
+00630100006301000063010000630100006301000063010000020100051301000500030e
+050000000523010005030202010302020503010000000534010000630100006301000063
+01000063010000630100006301000002010005140100030e000005240100050302020103
+020205030100050000000532010005000063010000630100006301000063010000630100
+0063010000020100051301000500030e0500000005230100050302020103020205030100
+000005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+01000063010000630100006301000063010000630100006301000002010005140100030e
+000005240100050302020103020205030100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001ff01ff0161051301000500030e0500
+0000052301000503020201030202050301000a3600630100006301000063010000630100
+00630100006301000002010005140100030e000005240100050302020103020205030100
+0a3501000063010000630100006301000063010000630100006301000002010005130100
+0500030e05000000052301000503020201030202050301000a0101340063010000630100
+006301000063010000630100006301000002010005140100030e00000524010005030202
+01030202050301000a010134006301000063010000630100006301000063010000630100
+00020100051301000500030e05000000052301000503020201030202050301000a010115
+000401190063010000630100006301000063010000630100006301000002010005140100
+030e0000052401000503020201030202050301000a0101150000011d00070100000e0100
+0014010000340100002b0102003401000063010000630100006301000063010000020100
+051301000500030e05000000052301000503020201030202050301000a0101150000011d
+00070100000e0100004a0100002d01000034010000630100006301000063010000630100
+0002010005140100030e0000052401000503020201030202050301000a0101150000011d
+000701000001010000030102000201040002010200020100000001010003010200020100
+000001010003010200260100000701000002010000010100000001010002010000000101
+00030102000301020005010000030102002d010000630100006301000063010000630100
+00020100051301000500030e05000000052301000503020201030202050301000a010115
+0003011a0007010000000100000301000002010000030100000301000002010000010101
+000101000004010000020101000101000001010000020100002501000007010000020100
+000101010001010000010101000101000001010000020100000101000002010000040100
+0002010000020100002c0100006301000063010000630100006301000002010005140100
+030e0000052401000503020201030202050301000a010119000001190007010100080100
+000301000007010000010100000801000002010000020100000501000025010000070100
+000201000001010000020100000101000002010000010100000901000004010000060100
+002c01000063010000630100006301000063010000020100051301000500030e05000000
+052301000503020201030202050301000a01011900000119000701010005010300030100
+000401030001010000080100000201000002010000020103002501000007010000020100
+0001010000020100000101000002010000020102000301030004010000030103002c0100
+006301000063010000630100006301000002010005140100030e00000524010005030202
+01030202050301000a010114000001030000011900070100000001000003010000020100
+000301000003010000020100000101000008010000020100000201000001010000020100
+002501000007010000020100000101000002010000010100000201000005010000010100
+00020100000401000002010000020100002c010000630100006301000063010000630100
+00020100051301000500030e05000000052301000503020201030202050301000a010115
+0003011a0007010000010100000201000002010000030100000301000002010000010100
+000801000002010000020100000101000002010000250100000701000001010100010101
+000101000001010100010100000101000002010000010100000201000004010000020100
+00020100002c0100006301000063010000630100006301000002010005140100030e0000
+052401000503020201030202050301000a01013400070100000201000002010300040101
+000201030001010000080100000201000002010000020103002501000008010100000100
+0001010000000101000201000000010100030102000301030004010000030103002c0100
+0063010000630100006301000063010000020100051301000500030e0500000005230100
+0503020201030202050301000a01013400630100000e010000050100004c010000630100
+0063010000630100006301000002010005140100030e0000052401000503020201030202
+050301000a01013400630100000e010000050100004c0100006301000063010000630100
+0063010000020100051301000500030e0500000005230100050302020103020205030100
+0a01013400630100000e010000050100004c010000630100006301000063010000630100
+0002010005140100030e0000052401000503020201030202050301000a01013400630100
+006301000063010000630100006301000063010000020100051301000500030e05000000
+052301000503020201030202050301000a01013400630100006301000063010000630100
+00630100006301000002010005140100030e000005240100050302020103020205030100
+0a0101340063010000630100006301000063010000630100006301000002010005130100
+0500030e05000000052301000503020201030202050301000a0001ff01ff019705140100
+030e00000524010005030202010302020503010005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000063010000630100006301000063
+0100006301000063010000020100051301000500030e0500000005230100050302020103
+020205030100000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500010000630100006301000063010000630100006301000063010000020100
+05140100030e000005240100050302020103020205030100050000000532010005000063
+0100006301000063010000630100006301000063010000020100051301000500030e0500
+000005230100050302020103020205030100000005340100006301000063010000630100
+0063010000630100006301000002010005140100030e0000052401000503020201030202
+050301000500000005170102051701000500006301000063010000630100006301000063
+01000063010000020100051301000500030e050000000523010005030202010302020503
+0100000005170100051b0100000a0100001a01010004010000340100000f0102000c0100
+00020100003e0100006301000063010000630100006301000002010005140100030e0000
+052401000503020201030202050301000500000005150100051b0100050000250100003c
+01000011010000100100003e010000630100006301000063010000630100000201000513
+01000500030e0500000005230100050302020103020205030100000005160100051c0100
+000801020003010200030102000301020004010000040102000201000000010100030102
+0026010000080102000501000002010000020100000201020002010000010100003b0100
+006301000063010000630100006301000002010005140100030e00000524010005030202
+01030202050301000500000005150103051801000500000a010000020100000201000001
+010000020100000101000002010000010104000401000002010100010100000101000002
+010000250100000701000002010000040100000201000002010000040100000201000000
+0100003c01000063010000630100006301000063010000020100051301000500030e0500
+0000052301000503020201030202050301000000051601000502010005180100000a0100
+000201000002010000010100000501000002010000030100000601000002010000020100
+000101000002010000250100000b01000004010000020100000201000004010000020101
+003d0100006301000063010000630100006301000002010005140100030e000005240100
+050302020103020205030100050000000515010005020100051701000500000a01000002
+010000020100000201020002010400030100000601000002010000020100000101040025
+0100000801030004010000030100000001000005010000020101003d0100006301000063
+0100006301000063010000020100051301000500030e0500000005230100050302020103
+0202050301000000051601000502010005180100000a0100000201000002010000050100
+000101000007010000060100000201000002010000010100002901000007010000020100
+000401000003010000000100000501000002010000000100003c01000063010000630100
+00630100006301000002010005140100030e000005240100050302020103020205030100
+0500000005160102051801000500000a0100000201000002010000010100000201000001
+010000020100000301000006010000020100000201000001010000020100002501000007
+0100000201000004010000040100000601000002010000010100003b0100006301000063
+0100006301000063010000020100051301000500030e0500000005230100050302020103
+020205030100000005340100000a01000003010200030102000301020004010000060100
+000201000002010000020102002601000008010300040100000401000006010000020100
+00020100003a0100006301000063010000630100006301000002010005140100030e0000
+0524010005030202010302020503010005000000053201000500000a0100005701000063
+01000063010000630100006301000063010000020100051301000500030e050000000523
+010005030202010302020503010000000534010000070100000101000057010000630100
+006301000063010000630100006301000002010005140100030e00000524010005030202
+010302020503010005000000053201000500000801010058010000630100006301000063
+0100006301000063010000020100051301000500030e0500000005230100050302020103
+020205030100000005340100006301000063010000630100006301000063010000630100
+0002010005140100030e0000052401000503020201030202050301000500000005320100
+050000630100006301000063010000630100006301000063010000020100051301000500
+030e05000000052301000503020201030202050301000000050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100006301000063010000630100
+0063010000630100006301000002010005140100030e0000052401000503020201030202
+050301000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+05000100050001ff01ff0161051301000500030e05000000052301000503020201030202
+050301000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500006301000063010000630100006301000063010000630100000201000514
+0100030e0000052401000503020201030202050301000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000100006301000063010000630100
+00630100006301000063010000020100051301000500030e050000000523010005030202
+010302020503010005000000053201000500006301000063010000630100006301000063
+0100006301000002010005140100030e0000052401000503020201030202050301000000
+053401000063010000630100006301000063010000630100006301000002010005130100
+0500030e0500000005230100050302020103020205030100050000000515010405170100
+05000063010000630100006301000063010000630100006301000002010005140100030e
+0000052401000503020201030202050301000000051601000502010005180100000a0101
+00130100000b0100000201000030010000250100000b0102000301020026010000630100
+00630100006301000063010000020100051301000500030e050000000523010005030202
+010302020503010005000000051801000518010005000009010000150100000f01000030
+010000250100000d01000005010000260100006301000063010000630100006301000002
+010005140100030e00000524010005030202010302020503010000000519010005190100
+000901000003010000000101000301020003010100000100000101000000010100030102
+0002010000010100002d0100000701000000010100030102000201000000010100020100
+000001010002010400010100000201000004010000050100002601000063010000630100
+006301000063010000020100051301000500030e05000000052301000503020201030202
+050301000500000005180100051801000500000701040001010100010100000101000002
+010000010100000101010001010100010100000401000002010000000100002e01000007
+010100010100000101000002010000010101000101000001010100010100000301000003
+010000020100000401000005010000260100006301000063010000630100006301000002
+010005140100030e00000524010005030202010302020503010000000519010005190100
+000901000003010000050100000201000001010000020100000101000008010000020101
+002f01000007010000020100000101000002010000010100000501000007010000030100
+000201000004010000050100002601000063010000630100006301000063010000020100
+051301000500030e05000000052301000503020201030202050301000500000005170100
+051901000500000901000003010000050104000101000002010000010100000801000002
+0101002f0100000701000002010000010100000201000001010000050100000701000003
+010000020100000401000005010000260100006301000063010000630100006301000002
+010005140100030e000005240100050302020103020205030100000005180100051a0100
+000901000003010000050100000501000002010000010100000801000002010000000100
+002e01000007010000020100000101000002010000010100000501000007010000030100
+000201000004010000050100002601000063010000630100006301000063010000020100
+051301000500030e05000000052301000503020201030202050301000500000005170100
+051901000500000901000003010000050100000201000001010000010101000101000008
+01000002010000010100002d010000070100000201000001010000020100000101000005
+010000070100000301000001010100040100000501000026010000630100006301000063
+0100006301000002010005140100030e0000052401000503020201030202050301000000
+053401000009010000030100000601020003010100000100000101000008010000020100
+00020100002c010000070100000201000002010200020100000501000008010100020101
+000001000004010000050100002601000063010000630100006301000063010000020100
+051301000500030e05000000052301000503020201030202050301000500000005320100
+05000063010000630100006301000063010000630100006301000002010005140100030e
+000005240100050302020103020205030100000005340100006301000063010000630100
+00630100006301000063010000020100051301000500030e050000000523010005030202
+010302020503010005000000053201000500006301000063010000630100006301000063
+0100006301000002010005140100030e0000052401000503020201030202050301000000
+053401000063010000630100006301000063010000630100006301000002010005130100
+0500030e0500000005230100050302020103020205030100050000000532010005000063
+010000630100006301000063010000630100006301000002010005140100030e00000524
+010005030202010302020503010000000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000063010000630100006301000063010000630100
+0063010000020100051301000500030e0500000005230100050302020103020205030100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001ff01ff016105140100030e0000052401000503020201030202050301000e360063
+0100006301000063010000630100006301000063010000020100051301000500030e0500
+0000052301000503020201030202050301000e350d000063010000630100006301000063
+010000630100006301000002010005140100030e00000524010005030202010302020503
+01000e0107320d0100630100006301000063010000630100006301000063010000020100
+051301000500030e05000000052301000503020201030202050301000e0107320d010063
+010000630100006301000063010000630100006301000002010005140100030e00000524
+01000503020201030202050301000e010716010207180d01006301000063010000630100
+00630100006301000063010000020100051301000500030e050000000523010005030202
+01030202050301000e01071501000702010007170d01006301000010010000200102002d
+0100006301000063010000630100006301000002010005140100030e0000052401000503
+020201030202050301000e01071501000702010007170d01006301000010010000220100
+002d01000063010000630100006301000063010000020100051301000500030e05000000
+052301000503020201030202050301000e01071501000702010007170d01000701000000
+010100030102000201000000010100490100000801020002010400010100000201000001
+01000000010100030102000201000000010100050100000301020002010000000101001f
+0100006301000063010000630100006301000002010005140100030e0000052401000503
+020201030202050301000e010716010207180d0100070101000101000001010000020100
+000101010001010000480100000701000002010000030100000301000002010000010101
+000101000001010000020100000101010001010000040100000201000002010000010101
+00010100001e01000063010000630100006301000063010000020100051301000500030e
+05000000052301000503020201030202050301000e01071501000702010007170d010007
+010000020100000101000002010000010100004c01000007010000070100000301000002
+010000010100000501000002010000010100000201000004010000060100000101000002
+0100001e0100006301000063010000630100006301000002010005140100030e00000524
+01000503020201030202050301000e01071501000702010007170d010007010000020100
+0001010400010100004c0100000801020004010000030100000201000001010000050104
+000101000002010000040100000301030001010000020100001e01000063010000630100
+006301000063010000020100051301000500030e05000000052301000503020201030202
+050301000e01071501000702010007170d0100070100000201000001010000050100004c
+0100000b0100000301000003010000020100000101000005010000050100000201000004
+010000020100000201000001010000020100001e01000063010000630100006301000063
+01000002010005140100030e0000052401000503020201030202050301000e0107160102
+07180d010007010100010100000101000002010000010100004c01000007010000020100
+000301000003010000010101000101000005010000020100000101010001010000040100
+00020100000201000001010000020100001e010000630100006301000063010000630100
+00020100051301000500030e05000000052301000503020201030202050301000e010732
+0d0100070100000001010003010200020100004c01000008010200050101000201010000
+01000001010000060102000201000000010100050100000301030001010000020100001e
+0100006301000063010000630100006301000002010005140100030e0000052401000503
+020201030202050301000e0107320d0100070100005a0100002a01000037010000630100
+00630100006301000063010000020100051301000500030e050000000523010005030202
+01030202050301000e0107320d0100070100005a0100002a010000370100006301000063
+010000630100006301000002010005140100030e00000524010005030202010302020503
+01000e0107320d0100070100005a0100002a010000370100006301000063010000630100
+0063010000020100051301000500030e0500000005230100050302020103020205030100
+0e0107320d01006301000063010000630100006301000063010000630100000201000514
+0100030e0000052401000503020201030202050301000e0107320d010063010000630100
+0063010000630100006301000063010000020100051301000500030e0500000005230100
+0503020201030202050301000e010d340063010000630100006301000063010000630100
+006301000002010005140100030e0000052401000503020201030202050301000e000d35
+01ff01ff0161051301000500030e05000000052301000503020201030202050301000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+0063010000630100006301000063010000630100006301000002010005140100030e0000
+052401000503020201030202050301000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000100006301000063010000630100006301000063
+01000063010000020100051301000500030e050000000523010005030202010302020503
+010005000000053201000500006301000063010000630100006301000063010000630100
+0002010005140100030e0000052401000503020201030202050301000000053401000063
+0100006301000063010000630100006301000063010000020100051301000500030e0500
+000005230100050302020103020205030100050000000516010205180100050000630100
+00630100006301000063010000630100006301000002010005140100030e000005240100
+0503020201030202050301000000051601000502010005180100001f0100004201000012
+010000170102003401000063010000630100006301000063010000020100051301000500
+030e05000000052301000503020201030202050301000500000005150100050201000517
+010005000063010000120100001901000034010000630100006301000063010000630100
+0002010005140100030e0000052401000503020201030202050301000000051601000502
+01000518010000070101000001000003010200020100000001010003010200030102003b
+010000080102000301010000010000020102000201000000010100020100000001010005
+010000030102000201000000010100260100006301000063010000630100006301000002
+0100051301000500030e0500000005230100050302020103020205030100050000000515
+010005020100051701000500000701000000010000000100000101000002010000010101
+00010100000401000002010000020100003a010000070100000201000001010000010101
+000101000002010000010101000101000001010100010100000401000002010000020100
+000101010001010000250100006301000063010000630100006301000002010005140100
+030e00000524010005030202010302020503010000000517010305180100000701000000
+01000000010000050100000101000008010000060100003a010000070100000201000001
+010000020100000101000002010000010100000201000001010000020100000401000006
+010000010100000201000025010000630100006301000063010000630100000201000513
+01000500030e050000000523010005030202010302020503010005000000051901000517
+0100050000070100000001000000010000020103000101000008010000030103003a0100
+000701000002010000010100000201000001010400010100000201000001010000020100
+000401000003010300010100000201000025010000630100006301000063010000630100
+0002010005140100030e0000052401000503020201030202050301000000051901000519
+010000070100000001000000010000010100000201000001010000080100000201000002
+0100003a0100000701000002010000010100000201000001010000050100000201000001
+010000020100000401000002010000020100000101000002010000250100006301000063
+0100006301000063010000020100051301000500030e0500000005230100050302020103
+020205030100050000000515010205190100050000070100000001000000010000010100
+0002010000010100000801000002010000020100003a0100000701000002010000010100
+000101010001010000020100000101000002010000010101000101000004010000020100
+000201000001010000020100002501000063010000630100006301000063010000020100
+05140100030e000005240100050302020103020205030100000005340100000701000000
+01000000010000020103000101000008010000030103003a010000080102000301010000
+010000020102000201000002010000010100000001010005010000030103000101000002
+0100002501000063010000630100006301000063010000020100051301000500030e0500
+000005230100050302020103020205030100050000000532010005000063010000230100
+003e0100006301000063010000630100006301000002010005140100030e000005240100
+0503020201030202050301000000053401000063010000230100003e0100006301000063
+0100006301000063010000020100051301000500030e0500000005230100050302020103
+020205030100050000000532010005000063010000230100003e01000063010000630100
+00630100006301000002010005140100030e000005240100050302020103020205030100
+000005340100006301000063010000630100006301000063010000630100000201000513
+01000500030e050000000523010005030202010302020503010005000000053201000500
+0063010000630100006301000063010000630100006301000002010005140100030e0000
+052401000503020201030202050301000000050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100006301000063010000630100006301000063
+01000063010000020100051301000500030e050000000523010005030202010302020503
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+0100050001ff01ff016105140100030e0000052401000503020201030202050301000c36
+00630100006301000063010000630100006301000063010000020100051301000500030e
+05000000052301000503020201030202050301000c350900006301000063010000630100
+0063010000630100006301000002010005140100030e0000052401000503020201030202
+050301000c01083209010063010000630100006301000063010000630100006301000002
+0100051301000500030e05000000052301000503020201030202050301000c0108320901
+0063010000630100006301000063010000630100006301000002010005140100030e0000
+052401000503020201030202050301000c01081301000804010208150901006301000063
+01000063010000630100006301000063010000020100051301000500030e050000000523
+01000503020201030202050301000c010811010208030100080201000814090100070100
+0016010000420100000701000006010200100100000c0100003001000063010000630100
+00630100006301000002010005140100030e000005240100050302020103020205030100
+0c010813010008030100080201000814090100070100005a010000070100000801000010
+0100000c0100003001000063010000630100006301000063010000020100051301000500
+030e05000000052301000503020201030202050301000c01081301000803010008020100
+081409010007010000010100000301020002010000000101000301020002010000000101
+003b01000007010000000101000501000003010200030102000201000001010000030102
+000201000000010100030102000201000000010100030101000001000017010000630100
+0063010000630100006301000002010005140100030e0000052401000503020201030202
+050301000c01081301000803010008020100081409010007010000000100000301000002
+01000001010100010100000401000002010100010100003a010000070101000101000004
+010000020100000201000001010000020100000101000000010000030100000201000001
+010100010100000101000002010000010101000101000001010000010101001701000063
+010000630100006301000063010000020100051301000500030e05000000052301000503
+020201030202050301000c01081301000803010008020100081409010007010100080100
+00010100000801000002010000020100003a010000070100000201000004010000060100
+000101000005010100040100000201000001010000020100000101000002010000010100
+000501000002010000170100006301000063010000630100006301000002010005140100
+030e0000052401000503020201030202050301000c010813010008030100080201000814
+0901000701010005010300010100000801000002010000020100003a0100000701000002
+010000040100000301030001010000050101000401040001010000020100000101040001
+010000050100000201000017010000630100006301000063010000630100000201000513
+01000500030e05000000052301000503020201030202050301000c010813010008030100
+080201000814090100070100000001000003010000020100000101000008010000020100
+00020100003a010000070100000201000004010000020100000201000001010000050100
+000001000003010000050100000201000001010000050100000501000002010000170100
+006301000063010000630100006301000002010005140100030e00000524010005030202
+01030202050301000c010811010408020102081509010007010000010100000201000002
+010000010100000801000002010000020100003a01000007010100010100000401000002
+010000020100000101000002010000010100000101000002010000020100000101010001
+010000010100000201000001010000050100000101010017010000630100006301000063
+01000063010000020100051301000500030e050000000523010005030202010302020503
+01000c010832090100070100000201000002010300010100000801000002010000020100
+003a01000007010000000101000501000003010300020102000201000002010000020102
+000201000000010100030102000201000006010100000100001701000063010000630100
+00630100006301000002010005140100030e000005240100050302020103020205030100
+0c010832090100630100004a010000170100006301000063010000630100006301000002
+0100051301000500030e05000000052301000503020201030202050301000c0108320901
+006301000046010000020100001701000063010000630100006301000063010000020100
+05140100030e0000052401000503020201030202050301000c0108320901006301000047
+0102001801000063010000630100006301000063010000020100051301000500030e0500
+0000052301000503020201030202050301000c0108320901006301000063010000630100
+0063010000630100006301000002010005140100030e0000052401000503020201030202
+050301000c01083209010063010000630100006301000063010000630100006301000002
+0100051301000500030e05000000052301000503020201030202050301000c0109340063
+010000630100006301000063010000630100006301000002010005140100030e00000524
+01000503020201030202050301000c00093501ff01ff0161051301000500030e05000000
+052301000503020201030202050301000c36006301000063010000630100006301000063
+0100006301000002010005140100030e0000052401000503020201030202050301000c35
+090000630100006301000063010000630100006301000063010000020100051301000500
+030e05000000052301000503020201030202050301000c01083209010063010000630100
+006301000063010000630100006301000002010005140100030e00000524010005030202
+01030202050301000c010832090100630100006301000063010000630100006301000063
+010000020100051301000500030e05000000052301000503020201030202050301000c01
+081301000805010008160901006301000063010000630100006301000063010000630100
+0002010005140100030e0000052401000503020201030202050301000c01081101020803
+01020816090100170100004a010000070100003001020026010000630100006301000063
+01000063010000020100051301000500030e050000000523010005030202010302020503
+01000c0108130100080501000816090100170100004a0100000701000032010000260100
+006301000063010000630100006301000002010005140100030e00000524010005030202
+01030202050301000c010813010008050100081609010007010100000100000301020002
+010400020102004201000007010000000101000201000000010100030102000201010000
+010000020101000001000003010200020100000001010005010000030102000201000000
+0101001801000063010000630100006301000063010000020100051301000500030e0500
+0000052301000503020201030202050301000c0108130100080501000816090100070100
+000001000000010000010100000201000003010000030100000201000041010000070101
+000101000001010100010100000101000002010000010100000001000000010000010100
+000001000000010000010100000201000001010100010100000401000002010000020100
+000101010001010000170100006301000063010000630100006301000002010005140100
+030e0000052401000503020201030202050301000c010813010008050100081609010007
+010000000100000001000005010000030100000301000045010000070100000201000001
+010000050100000201000001010000000100000001000001010000000100000001000005
+010000010100000201000004010000060100000101000002010000170100006301000063
+0100006301000063010000020100051301000500030e0500000005230100050302020103
+0202050301000c0108130100080501000816090100070100000001000000010000020103
+000301000004010200420100000701000002010000010100000501000002010000010100
+000001000000010000010100000001000000010000020103000101000002010000040100
+000301030001010000020100001701000063010000630100006301000063010000020100
+05140100030e0000052401000503020201030202050301000c0108130100080501000816
+090100070100000001000000010000010100000201000003010000070100004101000007
+010000020100000101000005010000020100000101000000010000000100000101000000
+010000000100000101000002010000010100000201000004010000020100000201000001
+010000020100001701000063010000630100006301000063010000020100051301000500
+030e05000000052301000503020201030202050301000c01081101040801010408140901
+000701000000010000000100000101000002010000030100000301000002010000410100
+000701010001010000010100000501000002010000010100000001000000010000010100
+000001000000010000010100000201000001010100010100000401000002010000020100
+000101000002010000170100006301000063010000630100006301000002010005140100
+030e0000052401000503020201030202050301000c010832090100070100000001000000
+010000020103000401010002010200420100000701000000010100020100000601020002
+010000000100000001000001010000000100000001000002010300010100000001010005
+010000030103000101000002010000170100006301000063010000630100006301000002
+0100051301000500030e05000000052301000503020201030202050301000c0108320901
+006301000031010000300100006301000063010000630100006301000002010005140100
+030e0000052401000503020201030202050301000c010832090100630100003101000030
+01000063010000630100006301000063010000020100051301000500030e050000000523
+01000503020201030202050301000c010832090100630100003101000030010000630100
+0063010000630100006301000002010005140100030e0000052401000503020201030202
+050301000c01083209010063010000630100006301000063010000630100006301000002
+0100051301000500030e05000000052301000503020201030202050301000c0108320901
+0063010000630100006301000063010000630100006301000002010005140100030e0000
+052401000503020201030202050301000c01093400630100006301000063010000630100
+006301000063010000020100051301000500030e05000000052301000503020201030202
+050301000c00093501ff01ff016105140100030e00000524010005030202010302020503
+010005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000063010000630100006301000063010000630100006301000002010005130100
+0500030e0500000005230100050302020103020205030100000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500010000630100006301000063
+01000063010000630100006301000002010005140100030e000005240100050302020103
+020205030100050000000532010005000063010000630100006301000063010000630100
+0063010000020100051301000500030e0500000005230100050302020103020205030100
+000005340100006301000063010000630100006301000063010000630100000201000514
+0100030e0000052401000503020201030202050301000500000005130100050401020515
+010005000063010000630100006301000063010000630100006301000002010005130100
+0500030e0500000005230100050302020103020205030100000005120102050301000502
+010005150100006301000063010000630100006301000063010000630100000201000514
+0100030e0000052401000503020201030202050301000500000005130100050301000502
+010005140100050000630100006301000063010000630100006301000063010000020100
+051301000500030e05000000052301000503020201030202050301000000051401000503
+010005020100051501000063010000630100006301000063010000630100006301000002
+010005140100030e00000524010005030202010302020503010005000000051301000506
+010005150100050000630100006301000063010000630100006301000063010000020100
+051301000500030e05000000052301000503020201030202050301000000051401000505
+010005170100006301000063010000630100006301000063010000630100000201000514
+0100030e0000052401000503020201030202050301000500000005130100050401000517
+010005000063010000630100006301000063010000630100006301000002010005130100
+0500030e0500000005230100050302020103020205030100000005140100050301000502
+010005150100006301000063010000630100006301000063010000630100000201000514
+0100030e0000052401000503020201030202050301000500000005110104050101040514
+010005000063010000630100006301000063010000630100006301000002010005130100
+0500030e0500000005230100050302020103020205030100000005340100006301000063
+0100006301000063010000630100006301000002010005140100030e0000052401000503
+020201030202050301000500000005320100050000630100006301000063010000630100
+006301000063010000020100051301000500030e05000000052301000503020201030202
+050301000000053401000063010000630100006301000063010000630100006301000002
+010005140100030e00000524010005030202010302020503010005000000053201000500
+00630100006301000063010000630100006301000063010000020100051301000500030e
+050000000523010005030202010302020503010000000534010000630100006301000063
+01000063010000630100006301000002010005140100030e000005240100050302020103
+020205030100050000000532010005000063010000630100006301000063010000630100
+0063010000020100051301000500030e0500000005230100050302020103020205030100
+000005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+01000063010000630100006301000063010000630100006301000002010005140100030e
+000005240100050302020103020205030100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001ff01ff0161051301000500030e0500
+000005230100050302020103020205030100050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000630100006301000063010000630100
+00630100006301000002010005140100030e000005240100050302020103020205030100
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+010000630100006301000063010000630100006301000063010000020100051301000500
+030e05000000052301000503020201030202050301000500000005320100050000630100
+00630100006301000063010000630100006301000002010005140100030e000005240100
+050302020103020205030100000005340100006301000063010000630100006301000063
+01000063010000020100051301000500030e050000000523010005030202010302020503
+010005000000051301000504010205150100050000630100006301000063010000630100
+00630100006301000002010005140100030e000005240100050302020103020205030100
+000005120102050301000502010005150100006301000063010000630100006301000063
+01000063010000020100051301000500030e050000000523010005030202010302020503
+010005000000051301000507010005140100050000630100006301000063010000630100
+00630100006301000002010005140100030e000005240100050302020103020205030100
+000005140100050701000515010000630100006301000063010000630100006301000063
+010000020100051301000500030e05000000052301000503020201030202050301000500
+000005130100050501010515010005000063010000630100006301000063010000630100
+006301000002010005140100030e00000524010005030202010302020503010000000514
+010005070100051501000063010000630100006301000063010000630100006301000002
+0100051301000500030e0500000005230100050302020103020205030100050000000513
+010005070100051401000500006301000063010000630100006301000063010000630100
+0002010005140100030e0000052401000503020201030202050301000000051401000503
+010005020100051501000063010000630100006301000063010000630100006301000002
+0100051301000500030e0500000005230100050302020103020205030100050000000511
+010405020102051501000500006301000063010000630100006301000063010000630100
+0002010005140100030e0000052401000503020201030202050301000000053401000063
+0100006301000063010000630100006301000063010000020100051301000500030e0500
+000005230100050302020103020205030100050000000532010005000063010000630100
+006301000063010000630100006301000002010005140100030e00000524010005030202
+010302020503010000000534010000630100006301000063010000630100006301000063
+010000020100051301000500030e05000000052301000503020201030202050301000500
+000005320100050000630100006301000063010000630100006301000063010000020100
+05140100030e000005240100050302020103020205030100000005340100006301000063
+01000063010000630100006301000063010000020100051301000500030e050000000523
+010005030202010302020503010005000000053201000500006301000063010000630100
+0063010000630100006301000002010005140100030e0000052401000503020201030202
+050301000000050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100006301000063010000630100006301000063010000630100000201000513
+01000500030e050000000523010005030202010302020503010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+0100050001000500010005000100050001000500010005000100050001ff01ff01610514
+0100030e0000052401000503020201030202050301000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500006301000063010000630100
+00630100006301000063010000020100051301000500030e050000000523010005030202
+010302020503010000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050001000063010000630100006301000063010000630100006301000002
+010005140100030e00000524010005030202010302020503010005000000053201000500
+00630100006301000063010000630100006301000063010000020100051301000500030e
+050000000523010005030202010302020503010000000534010000630100006301000063
+01000063010000630100006301000002010005140100030e000005240100050302020103
+020205030100050000000513010005060100051501000500006301000063010000630100
+00630100006301000063010000020100051301000500030e050000000523010005030202
+010302020503010000000512010205050101051601000063010000630100006301000063
+010000630100006301000002010005140100030e00000524010005030202010302020503
+010005000000051301000504010005000100051501000500006301000063010000630100
+00630100006301000063010000020100051301000500030e050000000523010005030202
+010302020503010000000514010005040100050001000516010000630100006301000063
+01000063010000630100006301000002010005140100030e000005240100050302020103
+020205030100050000000513010005030100050101000515010005000063010000630100
+0063010000630100006301000063010000020100051301000500030e0500000005230100
+050302020103020205030100000005140100050201000502010005160100006301000063
+0100006301000063010000630100006301000002010005140100030e0000052401000503
+020201030202050301000500000005130100050201050514010005000063010000630100
+0063010000630100006301000063010000020100051301000500030e0500000005230100
+050302020103020205030100000005140100050601000516010000630100006301000063
+01000063010000630100006301000002010005140100030e000005240100050302020103
+020205030100050000000511010405030102051401000500006301000063010000630100
+00630100006301000063010000020100051301000500030e050000000523010005030202
+010302020503010000000534010000630100006301000063010000630100006301000063
+01000002010005140100030e000005240100050302020103020205030100050000000532
+010005000063010000630100006301000063010000630100006301000002010005130100
+0500030e0500000005230100050302020103020205030100000005340100006301000063
+0100006301000063010000630100006301000002010005140100030e0000052401000503
+020201030202050301000500000005320100050000630100006301000063010000630100
+006301000063010000020100051301000500030e05000000052301000503020201030202
+050301000000053401000063010000630100006301000063010000630100006301000002
+010005140100030e00000524010005030202010302020503010005000000053201000500
+00630100006301000063010000630100006301000063010000020100051301000500030e
+050000000523010005030202010302020503010000000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000063010000630100006301000063
+010000630100006301000002010005140100030e00000524010005030202010302020503
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+0100050001ff01ff0161051301000500030e050000000523010005030202010302020503
+010005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000063010000630100006301000063010000630100006301000002010005140100
+030e00000524010005030202010302020503010000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050001000063010000630100006301000063
+0100006301000063010000020100051301000500030e0500000005230100050302020103
+020205030100050000000532010005000063010000630100006301000063010000630100
+006301000002010005140100030e00000524010005030202010302020503010000000534
+010000630100006301000063010000630100006301000063010000020100051301000500
+030e05000000052301000503020201030202050301000500000005130100050301040514
+010005000063010000630100006301000063010000630100006301000002010005140100
+030e00000524010005030202010302020503010000000512010205030100051901000063
+0100006301000063010000630100006301000063010000020100051301000500030e0500
+000005230100050302020103020205030100050000000513010005030100051801000500
+0063010000630100006301000063010000630100006301000002010005140100030e0000
+052401000503020201030202050301000000051401000503010005190100006301000063
+01000063010000630100006301000063010000020100051301000500030e050000000523
+010005030202010302020503010005000000051301000503010305150100050000630100
+00630100006301000063010000630100006301000002010005140100030e000005240100
+050302020103020205030100000005140100050701000515010000630100006301000063
+010000630100006301000063010000020100051301000500030e05000000052301000503
+020201030202050301000500000005130100050701000514010005000063010000630100
+006301000063010000630100006301000002010005140100030e00000524010005030202
+010302020503010000000514010005020100050301000515010000630100006301000063
+010000630100006301000063010000020100051301000500030e05000000052301000503
+020201030202050301000500000005110104050101030515010005000063010000630100
+006301000063010000630100006301000002010005140100030e00000524010005030202
+010302020503010000000534010000630100006301000063010000630100006301000063
+010000020100051301000500030e05000000052301000503020201030202050301000500
+000005320100050000630100006301000063010000630100006301000063010000020100
+05140100030e000005240100050302020103020205030100000005340100006301000063
+01000063010000630100006301000063010000020100051301000500030e050000000523
+010005030202010302020503010005000000053201000500006301000063010000630100
+0063010000630100006301000002010005140100030e0000052401000503020201030202
+050301000000053401000063010000630100006301000063010000630100006301000002
+0100051301000500030e0500000005230100050302020103020205030100050000000532
+010005000063010000630100006301000063010000630100006301000002010005140100
+030e00000524010005030202010302020503010000000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000063010000630100006301000063
+0100006301000063010000020100051301000500030e0500000005230100050302020103
+020205030100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001ff01ff016105140100030e00000524010005030202010302020503
+010005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000063010000630100006301000063010000630100006301000002010005130100
+0500030e0500000005230100050302020103020205030100000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500010000630100006301000063
+01000063010000630100006301000002010005140100030e000005240100050302020103
+020205030100050000000532010005000063010000630100006301000063010000630100
+0063010000020100051301000500030e0500000005230100050302020103020205030100
+000005340100006301000063010000630100006301000063010000630100000201000514
+0100030e0000052401000503020201030202050301000500000005130100050501020514
+010005000063010000630100006301000063010000630100006301000002010005130100
+0500030e0500000005230100050302020103020205030100000005120102050401000518
+01000063010000630100006301000063010000630100006301000002010005140100030e
+000005240100050302020103020205030100050000000513010005030100051801000500
+00630100006301000063010000630100006301000063010000020100051301000500030e
+050000000523010005030202010302020503010000000514010005030100051901000063
+010000630100006301000063010000630100006301000002010005140100030e00000524
+010005030202010302020503010005000000051301000503010305150100050000630100
+006301000063010000630100006301000063010000020100051301000500030e05000000
+052301000503020201030202050301000000051401000503010005020100051501000063
+010000630100006301000063010000630100006301000002010005140100030e00000524
+010005030202010302020503010005000000051301000503010005020100051401000500
+00630100006301000063010000630100006301000063010000020100051301000500030e
+050000000523010005030202010302020503010000000514010005030100050201000515
+01000063010000630100006301000063010000630100006301000002010005140100030e
+000005240100050302020103020205030100050000000511010405020102051501000500
+00630100006301000063010000630100006301000063010000020100051301000500030e
+050000000523010005030202010302020503010000000534010000630100006301000063
+01000063010000630100006301000002010005140100030e000005240100050302020103
+020205030100050000000532010005000063010000630100006301000063010000630100
+0063010000020100051301000500030e0500000005230100050302020103020205030100
+000005340100006301000063010000630100006301000063010000630100000201000514
+0100030e0000052401000503020201030202050301000500000005320100050000630100
+006301000063010000630100006301000063010000020100051301000500030e05000000
+052301000503020201030202050301000000053401000063010000630100006301000063
+010000630100006301000002010005140100030e00000524010005030202010302020503
+010005000000053201000500006301000063010000630100006301000063010000630100
+00020100051301000500030e050000000523010005030202010302020503010000000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000063
+010000630100006301000063010000630100006301000002010005140100030e00000524
+010005030202010302020503010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+0100050001000500010005000100050001ff01ff0161051301000500030e050000000523
+010005030202010302020503010005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000063010000630100006301000063010000630100
+006301000002010005140100030e00000524010005030202010302020503010000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050001000063
+0100006301000063010000630100006301000063010000020100051301000500030e0500
+000005230100050302020103020205030100050000000532010005000063010000630100
+006301000063010000630100006301000002010005140100030e00000524010005030202
+010302020503010000000534010000630100006301000063010000630100006301000063
+010000020100051301000500030e05000000052301000503020201030202050301000500
+000005130100050301040514010005000063010000630100006301000063010000630100
+006301000002010005140100030e00000524010005030202010302020503010000000512
+010205030100050201000515010000630100006301000063010000630100006301000063
+010000020100051301000500030e05000000052301000503020201030202050301000500
+000005130100050601000515010005000063010000630100006301000063010000630100
+006301000002010005140100030e00000524010005030202010302020503010000000514
+010005060100051601000063010000630100006301000063010000630100006301000002
+0100051301000500030e0500000005230100050302020103020205030100050000000513
+010005060100051501000500006301000063010000630100006301000063010000630100
+0002010005140100030e0000052401000503020201030202050301000000051401000506
+010005160100006301000063010000630100006301000063010000630100000201000513
+01000500030e050000000523010005030202010302020503010005000000051301000505
+010005160100050000630100006301000063010000630100006301000063010000020100
+05140100030e000005240100050302020103020205030100000005140100050501000517
+010000630100006301000063010000630100006301000063010000020100051301000500
+030e05000000052301000503020201030202050301000500000005110104050301000516
+010005000063010000630100006301000063010000630100006301000002010005140100
+030e00000524010005030202010302020503010000000534010000630100006301000063
+010000630100006301000063010000020100051301000500030e05000000052301000503
+020201030202050301000500000005320100050000630100006301000063010000630100
+00630100006301000002010005140100030e000005240100050302020103020205030100
+000005340100006301000063010000630100006301000063010000630100000201000513
+01000500030e050000000523010005030202010302020503010005000000053201000500
+0063010000630100006301000063010000630100006301000002010005140100030e0000
+052401000503020201030202050301000000053401000063010000630100006301000063
+0100006301000063010000020100051301000500030e0500000005230100050302020103
+020205030100050000000532010005000063010000630100006301000063010000630100
+006301000002010005140100030e00000524010005030202010302020503010000000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000063
+0100006301000063010000630100006301000063010000020100051301000500030e0500
+000005230100050302020103020205030100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001ff01ff016105140100030e00000524
+010005030202010302020503010005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000063010000630100006301000063010000630100
+0063010000020100051301000500030e0500000005230100050302020103020205030100
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+01000063010000630100006301000063010000630100006301000002010005140100030e
+000005240100050302020103020205030100050000000532010005000063010000630100
+0063010000630100006301000063010000020100051301000500030e0500000005230100
+050302020103020205030100000005340100006301000063010000630100006301000063
+0100006301000002010005140100030e0000052401000503020201030202050301000500
+000005130100050401020515010005000063010000630100006301000063010000630100
+0063010000020100051301000500030e0500000005230100050302020103020205030100
+000005120102050301000502010005150100006301000063010000630100006301000063
+010000630100000201000514010005000000050000000500000005000000050000000500
+00000500000005000000052401000503020201030202050301ff01ff0199051301000500
+000005000000050000000500000005000000050000000500000005000000050000000523
+010005030202010302020503010005ff05ff05e3010005030202010302020503010005ff
+05ff05e3010005030202010302020503010005ff05ff05e3010005030202010302020503
+010005ff05ff05e3010005030202010302020503010005ff05ff05e30100050302020103
+02020503010005ff05ff05e3010005030202010302020503010005ff05ff05e301000503
+0202010302020503010005ff05ff05e301000503020201030202050301000549010005ff
+05ff059801000503020201030202050301000548010105ff05ff05980100050302020103
+020205030100054701000500010005ff05ff059801000503020201030202050301000549
+010005ff05ff059801000503020201030202050301000549010005ff05ff059801000503
+020201030202050301000549010005ff05ff059801000503020201030202050301000549
+010005ff05ff059801000503020201030202050301000549010005ff05ff059801000503
+020201030202050301000547010405ff05ff0596010005030202010302020503010005ff
+05ff05e3010005030202010302020503010005ff05ff05e3010005030202010302020503
+010005ff05ff05e3010005030202010302020503010005ff05ff05e30100050302020103
+02020503010005ff05ff05e3010005030202010302020503010005380100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100054b01000503020201030202050301000537
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000000054a01000503
+020201030202050301000538010005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000003ff03ff033e0000054b010005030202010302020503010005370100050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050003ff03ff033e05000000054a01000503
+020201030202050301000538010005000000050c0000050c010003ff03ff033e0000054b
+01000503020201030202050301000537010005000000050c0100050c0100050003ff03ff
+033e05000000054a01000503020201030202050301000538010005000000050c0000050c
+010003ff03ff033e0000054b01000503020201030202050301000537010005000000050c
+0100050c0100050003ff03ff033e05000000054a01000503020201030202050301000538
+010005000000050c0000050c010003ff03ff033e0000054b010005030202010302020503
+01000537010005000000050c0100050c0100050003ff03ff033e05000000054a01000503
+020201030202050301000538010005000000050c0000050c010003ff03ff033e0000054b
+01000503020201030202050301000537010005000000050c0100050c0100050003ff03ff
+033e05000000054a01000503020201030202050301000538010005000000050c0000050c
+010003ff03ff033e0000054b01000503020201030202050301000537010005000000050c
+0100050c0100050003ff03ff033e05000000054a01000503020201030202050301000538
+010005000000050c0000050c010003ff03ff033e0000054b010005030202010302020503
+010005370100050000000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050003ff03ff
+033e05000000054a01000503020201030202050301000538010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010003ff03ff033e0000054b010005030202010302020503
+010005370100050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+00000500000005000000050000000500000005000000050000000500000005000000054a
+010005030202010302020503010005380000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000054b010005030202010302020503010005ff05ff05e30100050302020103
+02020503010005ff05ff05e3010005030202010302020503010005ff05ff05e301000503
+0202010302020503010005ff05ff05e3010005030202010302020503010005ff05ff05e3
+010005030202010302020503010005ff05ff05e3010005030202010302020503010005ff
+05ff05e3010005030202010302020503010005ff05ff05e3010005030202010302020503
+010005ff05ff05e3010005030202010302020503010005ff05ff05e30100050302020103
+02020503010005ff05ff05e3010005030202010302020503010005ff05ff05e301000503
+0202010302020503010005ff05ff05e3010005030202010302020503010005ff05ff05e3
+010005030202010302020503010005ff05ff05e3010005030202010302020503010005ff
+05ff05e3010005030202010302020503010005ff05ff05e3010005030202010302020503
+010005ff05ff05e3010005030202010302020503010005ff05ff05e30100050302020103
+02020503010005ff05ff05e3010005030202010302020503010005ff05ff05e301000503
+0202010302020503010005ff05ff05e3010005030202010302020503010005ff05ff05e3
+010005030202010302020503010005ff05ff05e3010005030202010302020503010005ff
+05ff05e3010005030202010302020503010005ff05ff05e3010005030202010302020503
+010005ff05ff05e3010005030202010302020503010005ff05ff05e30100050302020103
+02020503010005ff05ff05e3010005030202010302020503010005ff05ff05e301000503
+0202010302020503010005ff05ff05e3010005030202010302020503010005ff05ff05e3
+010005030202010302020503010005ff05ff05e3010005030202010100040503010005ff
+05ff05e301000503000502020400050301ff01ff01e50503000002020400000002020400
+05ff05ff05ed00000202040000000202040005ff05ff05ed000002020400000002020400
+05ff05ff05ed00000202040000000202040005ff05ff05ed000002020400000002020400
+000502ff02ff02e100060202040000000208040002ff02ff02e100000208040000000208
+040002ff02ff02e100000208040000000208040001ff01ff01e100000208040000000409
+01ff01ff01e100000409
+%%EndData
+end
+%%PageTrailer
+%%Trailer
+%%BoundingBox: 0 0 380 315
+%%EOF
diff --git a/lib/tv/doc/src/tv_table_loaded.gif b/lib/tv/doc/src/tv_table_loaded.gif
new file mode 100644
index 0000000000..1786426f4d
--- /dev/null
+++ b/lib/tv/doc/src/tv_table_loaded.gif
Binary files differ
diff --git a/lib/tv/doc/src/tv_table_loaded.ps b/lib/tv/doc/src/tv_table_loaded.ps
new file mode 100644
index 0000000000..3f0cf9d707
--- /dev/null
+++ b/lib/tv/doc/src/tv_table_loaded.ps
@@ -0,0 +1,1430 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (ImageMagick)
+%%Title: (/clearcase/otp/erts/lib/tv/doc/src/tv_table_loaded.eps)
+%%CreationDate: (Mon Mar 19 17:15:33 2001)
+%%BoundingBox: 0 0 532 441
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 0
+%%EndComments
+
+%%BeginDefaults
+%%PageOrientation: Portrait
+%%EndDefaults
+
+%%BeginProlog
+%
+% Display a color image. The image is displayed in color on
+% Postscript viewers or printers that support color, otherwise
+% it is displayed as grayscale.
+%
+/buffer 512 string def
+/byte 1 string def
+/color_packet 3 string def
+/pixels 768 string def
+
+/DirectClassPacket
+{
+ %
+ % Get a DirectClass packet.
+ %
+ % Parameters:
+ % red.
+ % green.
+ % blue.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/DirectClassImage
+{
+ %
+ % Display a DirectClass image.
+ %
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { DirectClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayDirectClassPacket } image
+ } ifelse
+} bind def
+
+/GrayDirectClassPacket
+{
+ %
+ % Get a DirectClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % red
+ % green
+ % blue
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/GrayPseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassImage
+{
+ %
+ % Display a PseudoClass image.
+ %
+ % Parameters:
+ % class: 0-PseudoClass or 1-Grayscale.
+ %
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ class 0 gt
+ {
+ currentfile buffer readline pop
+ token pop /depth exch def pop
+ /grays columns 8 add depth sub depth mul 8 idiv string def
+ columns rows depth
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { currentfile grays readhexstring pop } image
+ }
+ {
+ %
+ % Parameters:
+ % colors: number of colors in the colormap.
+ % colormap: red, green, blue color packets.
+ %
+ currentfile buffer readline pop
+ token pop /colors exch def pop
+ /colors colors 3 mul def
+ /colormap colors string def
+ currentfile colormap readhexstring pop pop
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { PseudoClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayPseudoClassPacket } image
+ } ifelse
+ } ifelse
+} bind def
+
+/DisplayImage
+{
+ %
+ % Display a DirectClass or PseudoClass image.
+ %
+ % Parameters:
+ % x & y translation.
+ % x & y scale.
+ % label pointsize.
+ % image label.
+ % image columns & rows.
+ % class: 0-DirectClass or 1-PseudoClass.
+ % compression: 0-RunlengthEncodedCompression or 1-NoCompression.
+ % hex color packets.
+ %
+ gsave
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ x y translate
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ currentfile buffer readline pop
+ token pop /pointsize exch def pop
+ /Helvetica findfont pointsize scalefont setfont
+ x y scale
+ currentfile buffer readline pop
+ token pop /columns exch def
+ token pop /rows exch def pop
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ currentfile buffer readline pop
+ token pop /compression exch def pop
+ class 0 gt { PseudoClassImage } { DirectClassImage } ifelse
+ grestore
+} bind def
+%%EndProlog
+%%Page: 1 1
+%%PageBoundingBox: 0 0 532 441
+userdict begin
+%%BeginData:
+DisplayImage
+0 0
+532.000000 441.000000
+12
+760 630
+1
+0
+0
+16
+ffffff
+000000
+d8d8d8
+c2c2c2
+6b6b6b
+ff0000
+d9d9d9
+b22222
+828282
+ff9155
+c3c3c3
+7f7f7f
+990000
+000000
+000000
+000000
+000a01ff01ff01e1000b0208040001ff01ff01e100000208040000000208040002ff02ff
+02e1000002080400000002080400020000ff00ff00de0400020000000208040000000202
+04060200000004ff04ff04de020000000405020204000000020204000209000d02ff02ff
+02d500000202040000000202040002080000020d040002a501010206010102150101021e
+0101022901010206010102430101022a010102260101023201010233010102ae00000202
+040000000202040002080000020d04000277010502000107020101030206010702090101
+02060101021501010219010002030101021c0100020b010102060101022e010202020100
+020d0101022a0101020c0104021401010232010102160100021b010102ae000002020400
+00000202040002080000020d04000277010102070101020301010201010102080101020c
+010102060101021501010218010102210101020b010102060101022e010202020100020d
+01010238010102020101024801010215010102cc00000202040000000202040002080000
+0202040602030400027701010207010102030101020c0101020401030203010102000101
+020301010202010302020101020901010202010302030103020201030201010402010101
+020201030203010102000101020a01040201010302030101020001010203010102020103
+022701000200010102010100020201030203010402020103020201010209010102000101
+020101010203010302030101020201010200010102020101020101030202010402020101
+020101010202010102020101020001010203010102000101020301030203010402020104
+020501040202010102010101020501030201010402000101020101010204010302020101
+020001010201010102020103020201040202010402020103020301010200010102060104
+020201030274000002020400000004030208000002020400030400000203040002770101
+0207010102030102020b0101020301010201010102020102020001010202010102010101
+020101010201010102090101020101010201010102010101020101010200010102010101
+020101010203010102010101020101010202010202000101020a01010202010102010101
+020201020200010102020101020101010201010102260100020001010201010002010101
+020101010201010102010101020101010201010102010101020901020200010202000101
+020101010201010102020101020201020200010102010101020001010200010102010101
+020101010202010102010101020201010202010202000101020201020200010102010101
+020101010201010102050101020801010201010102020101020101010204010102010101
+020101010202010102010101020301010201010102010101020001010201010102010101
+020101010200010102050101020501010201010102020102020001010204010102050101
+020101010273000004030101020b00000203040003020000020404000277010402040101
+0204010302090101020701010202010102010101020201010201010102010101020d0101
+020101010201010102010101020801010201010102030101020101010201010102020101
+02010101020a010102060101020201010201010102020101020101010201010102260100
+0200010202000100020101010201010102010101020101010201010102010101020d0101
+020101010201010102050101020201010202010102010101020101010200010102000101
+020101010201010102020101020101010202010102020101020101010202010102010101
+020101010201010102010102020401020207010102010101020201010201010102040101
+020101010201010102030101020001000204010102010101020101020203010102010101
+020401020204010202040101020101010202010102010101020401020204010102010101
+02760103020b000002030400030200000204040002770101020701010206010202080101
+0204010402020101020101010202010102010105020d0101020101010201010102010101
+02050104020101010203010102010101020101010202010102010101020a010102030104
+020201010201010102020101020101050226010002010101020001000201010102010101
+020101010201010102010105020d01010201010102010101020201040202010102020101
+020101010201010102000101020001010201010102010101020201010201010102020101
+020201010201010102020101020101010201010502020103020301030205010102010101
+020201010201010102040105020101010204010102050105020101010204010102010101
+020501030203010302020101020101010202010102010101020501030202010502760103
+020b00000204040003000000020504000277010102070101020701010208010102030101
+020101010202010102010101020201010201010102110101020101010201010102010101
+0204010102010101020101010203010102010101020101010202010102010101020a0101
+020201010201010102020101020101010202010102010101022a01000202010202010101
+020101010201010102010101020101010211010102010101020101010201010102010101
+020201010202010102010101020101010201010102000101020001010200010202020101
+020101010202010102020101020101010202010102010101020101010208010202040102
+020401010201010102020101020101010204010102050101020301000200010102040101
+020501010204010102010101020701020204010202010101020101010202010102010101
+0207010202010101027a0103020b00000204040003000000020504000277010102070101
+020301010201010102080101020301010201010102020101020101010202010102010101
+020201000201010102090101020101010201010102010101020201000200010102010101
+020101010203010102010101020101010202010102010101020a01010202010102010101
+020201010201010102020101020101010202010002260100020201020201010102010101
+020101010200010202010101020201000201010102090101020101010201010102010101
+020101010202010102020101020101010202010102070101020001010202010102000102
+020201010202010102010101020201010201010102010101020201000205010102050101
+020101010200010102000102020201010200010202010101020001010202010002010101
+020201010201010102000101020001010202010002010101020401010201010102020100
+020401010205010102010101020101010202010102010101020101010204010102010101
+0202010002760103020b0000020500000206040002770105020301010204010302090101
+020401020200010102010104020301010202010302020101020901010202010302030103
+02020102020001010201010202010101020201030203010102010101020b010202010102
+020001010201010402030101020201030227010002030101020201030203010102000101
+020201030202010102090101020101010201010102020102020001010201010102020101
+020101010203010502050101020301010200010102020101020201010201010102020101
+020101010202010302020104020201040202010102010101020001010203010102000101
+020101010201010302030102020001010201010102000101020101030202010102040101
+020201030201010402020104020301030203010102010101020101010200010402030103
+02770103020b0000020d040002fc010602a201010201010102ff022a0103020b0000020d
+040002ff02a7010302ff022b0103020b0000020d040002ff02ff02d70103020c040d02ff
+02ff02d8010302ff02ff02f3010302ff02ff02f30103020200ff00ff00ec040002020103
+0202000004ff04ff04ec0202010302ff02ff02f30103020200ff00ff00ed020201030202
+00ff00ff00ec0800020201030202000106ff06ff06e90801020201030202000106ff06ff
+06e90801020201030202000106ff06ff06e90801020201030202000106ff06ff06e90801
+020201030202000106ff06ff06e908010202010302020001060b07040604070006030702
+061f07040610070206200702060b070006060700062d0700060207000604070006ff06fa
+07000602070006090702061308010202010302020001060b0700060f0700062107000614
+0700061f070006020700060a0700063507000602070006ff06ff0600070006020700060b
+0700061308010202010302020001060b0700060607020605070006030702061a07000604
+070206030702060507000603070206180700060207000601070006000701060207040602
+070206030702060207000600070106030702061807000602070006020702060307020602
+07000602070006ff06eb07000602070006020702060507000602070006000701060c0801
+0202010302020001060b0700060807000605070006020700060207000619070006030700
+060207000601070006020700060407000602070006020700061707000602070006010701
+060107000603070006060700060207000602070006010701060107000601070006020700
+0618070006000700060507000602070006020700060107000602070006ff06eb07000602
+07000601070006020700060407000602070106010700060b08010202010302020001060b
+070306050700060507000602070006020700061907000603070006020700060107000602
+07000604070006020700061b070006020700060107000602070006030700060607000602
+070006020700060107000602070006010700061c07000600070006050700060207000602
+070006010700060007000600070006ff06eb070406010700060207000604070006020700
+06020700060b08010202010302020001060b070006080700060507000602070406190700
+060307000602070006010700060207000604070006030702061807000602070006010700
+060207000603070006060700060207000602070006010700060207000602070206190700
+06000700060507000602070406010700060007000600070006ff06eb0700060207000601
+0704060407000602070006020700060b08010202010302020001060b0700060807000605
+070006020700061d07000603070006020700060107000602070006040700060607000617
+070006020700060107000602070006030700060607000602070006020700060107000602
+07000605070006190700060607000602070006050700060007000600070006ff06eb0700
+0602070006010700060807000602070006020700060b08010202010302020001060b0700
+060807000605070006020700060207000619070006030700060207000601070006020700
+060407000602070006020700061707000602070006010701060107000603070006060700
+060207000602070006010700060207000601070006020700061907000606070006020700
+0602070006010700060007000600070006ff06eb07000602070006010700060207000604
+07000602070106010700060b08010202010302020001060b070006080700060507000603
+0702061a0700060407020603070206050700060307020619070206020700060007010605
+07010604070006030702060207000602070006020702061a070006060700060307020603
+07000600070006ff06ec07000602070006020702060507000602070006000701060c0801
+0202010302020001067d070006ff06ff06590700060f08010202010302020001060a0706
+062a07060631070606000700063d070606ff06fe0706060e0700060f0801020201030202
+0001060a0706062a07060631070606000700063d070606ff06fe0706060e0700060f0801
+020201030202000106ff06ff06e90801020201030202000106ff06ff06e9080102020103
+0202000106ff06ff06e90801020201030202000108ff08ff08eb020201030202000008ff
+08ff08ec02020103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff
+06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff
+06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202010302020603
+0016061600160616004406160016061600160616001606ff06be02020103020206030015
+080006160015080006160015080000150800001508000616001508000616001508000616
+0015080006ff06be02020103020206030001061208010616000106120801061600010612
+080100010612080100010612080106160001061208010616000106120801061600010612
+080106ff06be020201030202060300010612080106160001061208010616000106120801
+000106120801000106120801061600010612080106160001061208010616000106120801
+06ff06be0202010302020603000106120801061600010603070206030702060408010616
+000106120801000106120801000106120801061600010612080106160001061208010616
+00010612080106ff06be0202010302020603000106080702060608010616000106030702
+060307020604080106160001061208010001061208010001061208010616000106050704
+0607080106160001060707010608080106160001060707030606080106ff06be02020103
+020206030001060b0701060408010616000106020704060107040603080106160001060e
+0700060208010001060e070006020801000106020700060e080106160001060307080605
+080106160001060607030607080106160001060507070604080106ff06be020201030202
+06030001060d070006000700060108010616000106020700060107010601070006010701
+0603080106160001060e0700060208010001060e070006020801000106020700060e0801
+061600010602070a06040801061600010606070306070801061600010604070306010703
+0603080106ff06be02020103020206030001060207020608070106010801061600010601
+070d0602080106160001060b07000601070006020801000106020700060a070006020801
+00010602070006010700060b080106160001060207030602070306040801061600010607
+0701060808010616000106040702060307020603080106ff06be02020103020206030001
+060107080602070206010801061600010600070006000703060007020600070406010801
+06160001060b07000601070006020801000106020700060a070006020801000106020700
+06010700060b080106160001060107030604070306030801061600010612080106160001
+06040702060307020603080106ff06be0202010302020603000106010709060608010616
+000106000700060007030600070206000704060108010616000106080700060107000601
+070006020801000106020700060407000604070006020801000106020700060107000601
+070006080801061600010601070206030707060108010616000106050704060708010616
+000106050701060207020604080106ff06be020201030202060300010601070906060801
+061600010600070006000703060007020600070406010801061600010608070006010700
+060107000602080100010602070006040700060407000602080100010602070006010700
+060107000608080106160001060107020604070506020801061600010606070306070801
+06160001060907020605080106ff06be0202010302020603000106010709060608010616
+000106000700060007030600070206000704060108010616000106050700060107000601
+070006010700060208010001060207000604070006010700060107000602080100010602
+070006010700060107000601070006050801061600010601070206050703060308010616
+0001060707020607080106160001060807020606080106ff06be02020103020206030001
+0601070d0602080106160001060007000600070706000704060108010616000106050700
+060107000601070006010700060208010001060207000604070006010700060107000602
+080100010602070006010700060107000601070006050801061600010601070306050701
+0604080106160001060707020607080106160001060707020607080106ff06be02020103
+020206030001060107030607070006030801061600010600070006000704060107000600
+070406010801061600010602070006010700060107000601070006010700060208010001
+060207000601070006010700060107000601070006020801000106020700060107000601
+07000601070006010700060208010616000106020703060b080106160001060707020607
+080106160001060707020607080106ff06be020201030202060300010601070206070700
+060408010616000106000706060107060601080106160001060207000601070006010700
+060107000601070006020801000106020700060107000601070006010700060107000602
+080100010602070006010700060107000601070006010700060208010616000106020709
+06050801061600010607070206070801061600010612080106ff06be0202010302020603
+000106010701060707000605080106160001060007000600070206050700060007020601
+080106160001060207000601070006010700060107000601070006020801000106020700
+060107000601070006010700060107000602080100010602070006010700060107000601
+070006010700060208010616000106030707060608010616000106060704060608010616
+0001060707020607080106ff06be02020103020206030001060107090606080106160001
+060007000600070206050700060007020601080106160001060207000601070006010700
+060107000601070006020801000106020700060107000601070006010700060107000602
+080100010602070006010700060107000601070006010700060208010616000106050704
+0607080106160001060507060605080106160001060707020607080106ff06be02020103
+020206030001061208010616000106000704060507040601080106160001061208010001
+0612080100010612080106160001061208010616000106120801061600010612080106ff
+06be02020103020206030001061208010616000106120801061600010612080100010612
+080100010612080106160001061208010616000106120801061600010612080106ff06be
+020201030202060300010612080106160001061208010616000106120801000106120801
+00010612080106160001061208010616000106120801061600010612080106ff06be0202
+010302020603000108140616000108140616000108140001081400010814061600010814
+06160001081406160001081406ff06be0202010302020603000008150616000008150616
+00000815000008150000081506160000081506160000081506160000081506ff06be0202
+0103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202
+0103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202
+0103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202
+0103020206ff06ff06ed02020103020206ff06ff06ed020201030202060301ff01ff01e5
+06030202010302020603010000ff00ff00cf010000120100060302020103020206030100
+00ff00ff00cf010000110800010006030202010302020603010000ff00ff00cf01000001
+060e0801010006030202010302020603010000ff00ff00cf01000001060e080101000603
+0202010302020603010000ff00ff00cf01000001060e0801010006030202010302020603
+010000ff00ff00cf01000001060e0801010006030202010302020603010000ff00ff00cf
+01000001060e0801010006030202010302020603010000ff00ff00cf01000001060e0801
+010006030202010302020603010000ff00ff00cf01000001060e08010100060302020103
+02020603010000ff00ff00cf010000010601010a06010801010006030202010302020603
+010000ff00ff00cf010000010602010806020801010006030202010302020603010000ff
+00ff00cf010000010603010606030801010006030202010302020603010000ff00ff00cf
+010000010604010406040801010006030202010302020603010000ff00ff00cf01000001
+0605010206050801010006030202010302020603010000ff00ff00cf0100000106060100
+06060801010006030202010302020603010000ff00ff00cf01000001060e080101000603
+0202010302020603010000ff00ff00cf01000001060e0801010006030202010302020603
+010000ff00ff00cf01000001060e0801010006030202010302020603010000ff00ff00cf
+01000001060e0801010006030202010302020603010000ff00ff00cf01000001060e0801
+010006030202010302020603010000ff00ff00cf01000001060e08010100060302020103
+02020603010000ff00ff00cf01000001060e0801010006030202010302020603010000ff
+00ff00cf010000010810010006030202010302020603010000ff00ff00cf010000000811
+01000603020201030202060301ff01ff01e5060302020103020206ff06ff06ed02020103
+020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed02020103
+020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed02020103
+020206ff06ff06ed020201030202060301ff01ff01e506030202010302020603010006ff
+06ff06970100064a01000603020201030202060301000663010506ff06ff062d0100064a
+01000603020201030202060301000662010706ff06ff062c0100064a0100060302020103
+020206030100066101020603010206ff06ff062b0100064a010006030202010302020603
+0100066101010605010106ff06ff062b0100064a01000603020201030202060301000661
+01020603010206ff06ff062b0100064a01000603020201030202060301000662010706ff
+06ff062c0100064a01000603020201030202060301000663010506ff06ff062d0100064a
+01000603020201030202060301000665010106ff06ff062f0100064a0100060302020103
+0202060301000665010106ff06ff062f0100064a01000603020201030202060301000665
+010106ff06ff062f0100064a01000603020201030202060301000665010106ff06ff062f
+0100064a01000603020201030202060301000665010106ff06ff062f0100064a01000603
+020201030202060301000665010106ff06ff062f0100064a010006030202010302020603
+0100066101010600010206ff06ff062f0100064a01000603020201030202060301000661
+01010600010206ff06ff062f0100064a01000603020201030202060301000661010506ff
+06ff062f0100064a01000603020201030202060301000661010506ff06ff062f0100064a
+0100060302020103020206030100066101020600010106ff06ff062f0100064a01000603
+0202010302020603010006ff06ff06970100064a01000603020201030202060301ff01ff
+0199064a0100060302020103020206030100063500610b04005f0b04005f0b04005f0b04
+005f0b04005f0b0400010100060c0812062a010006030202010302020603010006350060
+08000b030100005e08000b030100005e08000b030100005e08000b030100005e08000b03
+0100005e08000b03010000010100060c08110000062a0100060302020103020206030100
+06350001065d08010b0101020001065b08010b0101020001065b08010b0101020001065b
+08010b0101020001065b08010b0101020001065b08010b01010200010100060c08010010
+062a010006030202010302020603010006350001062c0100062f08010b0101020001062a
+0102062d08010b0101020001062a0102062d08010b0101020001062c0100062d08010b01
+0102000106290104062c08010b0101020001062b0102062c08010b01010200010100060c
+0801000d08000001062a010006030202010302020603010006350001062a0102062f0801
+0b01010200010629010006020100062c08010b01010200010629010006020100062c0801
+0b0101020001062b0101062d08010b010102000106290100063008010b0101020001062a
+0100062f08010b01010200010100060c08010001060a08010001062a0100060302020103
+02020603010006350001062c0100062f08010b01010200010629010006020100062c0801
+0b0101020001062d0100062c08010b0101020001062a010006000100062d08010b010102
+000106290100063008010b010102000106290100063008010b01010200010100060c0801
+0001060a08010001062a010006030202010302020603010006350001062c0100062f0801
+0b01010200010629010006020100062c08010b0101020001062d0100062c08010b010102
+0001062a010006000100062d08010b010102000106290100063008010b01010200010629
+0100063008010b01010200010100060c08010001060a08010001062a0100060302020103
+02020603010006350001062c0100062f08010b0101020001062c0100062d08010b010102
+0001062b0101062d08010b01010200010629010006010100062d08010b01010200010629
+0103062d08010b010102000106290103062d08010b01010200010100060c08010001060a
+08010001062a010006030202010302020603010006350001062c0100062f08010b010102
+0001062b0100062e08010b0101020001062d0100062c08010b0101020001062801000602
+0100062d08010b0101020001062d0100062c08010b01010200010629010006020100062c
+08010b01010200010100060c08010001060a08010001062a010006030202010302020603
+010006350001062c0100062f08010b0101020001062a0100062f08010b0101020001062d
+0100062c08010b010102000106280105062c08010b0101020001062d0100062c08010b01
+010200010629010006020100062c08010b01010200010100060c08010001060a08010001
+062a010006030202010302020603010006350001062c0100062f08010b01010200010629
+010006020100062c08010b01010200010629010006020100062c08010b0101020001062c
+0100062d08010b01010200010628010006030100062c08010b0101020001062901000602
+0100062c08010b01010200010100060c08010001060a08010001062a0100060302020103
+02020603010006350001062a0104062d08010b010102000106290104062c08010b010102
+0001062a0102062d08010b0101020001062b0102062c08010b010102000106290103062d
+08010b0101020001062a0102062d08010b01010200010100060c08010001060a08010001
+062a010006030202010302020603010006350001065d08010b0101020001065b08010b01
+01020001065b08010b0101020001065b08010b0101020001065b08010b0101020001065b
+08010b01010200010100060c08010001060a08010001062a010006030202010302020603
+010006350001065d08010b0101020001065b08010b0101020001065b08010b0101020001
+065b08010b0101020001065b08010b0101020001065b08010b01010200010100060c0801
+0001060a08010001062a010006030202010302020603010006350001065d08010b010102
+0001065b08010b0101020001065b08010b0101020001065b08010b0101020001065b0801
+0b0101020001065b08010b0101020001010006070100060308010001060a08010001062a
+010006030202010302020603010006350001065d08010b0101020001065b08010b010102
+0001065b08010b0101020001065b08010b0101020001065b08010b0101020001065b0801
+0b0101020001010006060101060308010001060a08010001062a01000603020201030202
+0603010006350001065d08010b0101020001065b08010b0101020001065b08010b010102
+0001065b08010b0101020001065b08010b0101020001065b08010b010102000101000605
+010006000100060308010001080c0001062a010006030202010302020603010006350001
+065d08010b0101020001065b08010b0101020001065b08010b0101020001065b08010b01
+01020001065b08010b0101020001065b08010b010102000101000607010006030801000d
+08000001062a010006030202010302020603010006350001085f0b0101020001085d0b01
+01020001085d0b0101020001085d0b0101020001085d0b0101020001085d0b0101020001
+010006070100060308010001060a08010001062a01000603020201030202060301000635
+000008600b0001030000085e0b0001030000085e0b0001030000085e0b0001030000085e
+0b0001030000085e0b00010300000800010006070100060308010001060a08010001062a
+010006030202010302020603010009360063010000630100006301000063010000630100
+006301000002010006070100060308010001060a08010001062a01000603020201030202
+0603010009350c0000630100006301000063010000630100006301000063010000020100
+06070100060308010001060a08010001062a010006030202010302020603010009010532
+0c0100630100006301000063010000630100006301000063010000020100060501040601
+08010001060a08010001062a0100060302020103020206030100090105320c0100630100
+006301000063010000630100006301000063010000020100060c08010001060a08010001
+062a010006030202010302020603010009010517010005190c0100630100006301000063
+010000630100006301000063010000020100060c08010001060a08010001062a01000603
+0202010302020603010009010515010205190c01001601020003010200420100000e0100
+00230100000b010200030102001801000063010000630100006301000063010000020100
+060c08010001060a08010001062a01000603020201030202060301000901051701000519
+0c01001801000005010000420100000e010000230100000d010000050100001801000063
+010000630100006301000063010000020100060c08010001060a08010001062a01000603
+0202010302020603010009010517010005190c01000f0102000501000005010000030102
+003b0100000e010000000101000301020002010000000101000201000000010100030102
+000201040001010000020100000401000005010000180100006301000063010000630100
+0063010000020100060c08010001060a08010001062a0100060302020103020206030100
+09010517010005190c01000e01000002010000040100000501000002010000020100003a
+0100000e0101000101000001010000020100000101010001010000010101000101000001
+010000020100000301000003010000020100000401000005010000180100006301000063
+0100006301000063010000020100060c08010001060a08010001062a0100060302020103
+02020603010009010517010005190c01000e010000020100000401000005010000020100
+00020100003a0100000e0100000201000001010000020100000101000005010000020100
+000101000007010000030100000201000004010000050100001801000063010000630100
+006301000063010000020100060c08010001060a08010001062a01000603020201030202
+0603010009010517010005190c01000e010000020100000401000005010000020104003a
+0100000e0100000201000001010000020100000101000005010000020100000201020004
+010000030100000201000004010000050100001801000063010000630100006301000063
+010000020100060c08010001080c0001062a010006030202010302020603010009010517
+010005190c01000e010000020100000401000005010000020100003e0100000e01000002
+010000010100000201000001010000050100000201000005010000030100000301000002
+01000004010000050100001801000063010000630100006301000063010000020100060c
+08010000080d0001062a010006030202010302020603010009010515010405170c01000e
+01000002010000040100000501000002010000020100003a0100000e0100000201000001
+010000020100000101000005010000020100000101000002010000030100000301000001
+01010004010000050100001801000063010000630100006301000063010000020100060c
+08010a0e0001062a0100060302020103020206030100090105320c01000f010200050100
+0005010000030102003b0100000e01000002010000020102000201000005010000020100
+000201020005010100020101000001000004010000050100001801000063010000630100
+006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
+090105320c0100630100006301000063010000630100006301000063010000020100060c
+08010a0e0001062a0100060302020103020206030100090105320c010063010000630100
+0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
+0103020206030100090105320c0100630100006301000063010000630100006301000063
+010000020100060c08010a0e0001062a0100060302020103020206030100090105320c01
+00630100006301000063010000630100006301000063010000020100060c08010a0e0001
+062a0100060302020103020206030100090105320c010063010000630100006301000063
+0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
+010009010c3400630100006301000063010000630100006301000063010000020100060c
+08010a0e0001062a010006030202010302020603010009000c3501ff01ff0161060c0801
+0a0e0001062a010006030202010302020603010009360063010000630100006301000063
+0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
+010009350c0000630100006301000063010000630100006301000063010000020100060c
+08010a0e0001062a0100060302020103020206030100090105320c010063010000630100
+0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
+0103020206030100090105320c0100630100006301000063010000630100006301000063
+010000020100060c08010a0e0001062a0100060302020103020206030100090105160102
+05180c0100630100006301000063010000630100006301000063010000020100060c0801
+0a0e0001062a01000603020201030202060301000901051501000502010005170c010026
+01000003010200030102002d010000160102004901000063010000630100006301000063
+010000020100060c08010a0e0001062a0100060302020103020206030100090105150100
+0502010005170c01002d010000050100002d010000180100004901000063010000630100
+006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
+0901051501000502010005170c01000f0101000001000001010000020100000101000000
+01010003010200050100000501000003010200260100000f010200050100000201000002
+010000020102000301020003010200020100000001010026010000630100006301000063
+01000063010000020100060c08010a0e0001062a01000603020201030202060301000901
+0518010005180c01000e0100000101010001010000020100000101010001010000040100
+0005010000050100000201000002010000250100000e0100000201000004010000020100
+000201000001010000020100000101000002010000010100000201000001010100010100
+002501000063010000630100006301000063010000020100060c08010a0e0001062a0100
+06030202010302020603010009010517010005190c01000e010000020100000101000002
+010000010100000201000004010000050100000501000006010000250100000e01000008
+010000020100000201000001010000050100000501000002010000010100000201000025
+01000063010000630100006301000063010000020100060c08010a0e0001062a01000603
+02020103020206030100090105160100051a0c01000e0100000201000001010000020100
+00010100000201000004010000050100000501000003010300250100000f010200050100
+000201000002010000020102000301020002010400010100000201000025010000630100
+00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
+060301000901051501000502010005170c01000e01000002010000010100000201000001
+010000020100000401000005010000050100000201000002010000250100001201000004
+010000020100000201000005010000050100000101000005010000020100002501000063
+010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
+02020603010009010515010405170c01000e010000010101000101000001010100010100
+00020100000401000005010000050100000201000002010000250100000e010000020100
+000401000002010000010101000101000002010000010100000201000001010000020100
+0001010000020100002501000063010000630100006301000063010000020100060c0801
+0a0e0001062a0100060302020103020206030100090105320c01000f0101000001000002
+01010000010000010100000201000004010000050100000501000003010300250100000f
+010200050100000301010000010000020102000301020003010200020100000201000025
+01000063010000630100006301000063010000020100060c08010a0e0001062a01000603
+02020103020206030100090105320c0100120100004f0100006301000063010000630100
+006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
+090105320c01000e010000020100004f0100006301000063010000630100006301000063
+010000020100060c08010a0e0001062a0100060302020103020206030100090105320c01
+000f010200500100006301000063010000630100006301000063010000020100060c0801
+0a0e0001062a0100060302020103020206030100090105320c0100630100006301000063
+010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
+020206030100090105320c01006301000063010000630100006301000063010000630100
+00020100060c08010a0e0001062a010006030202010302020603010009010c3400630100
+006301000063010000630100006301000063010000020100060c08010a0e0001062a0100
+06030202010302020603010009000c3501ff01ff0161060c08010a0e0001062a01000603
+020201030202060301000936006301000063010000630100006301000063010000630100
+00020100060c08010a0e0001062a010006030202010302020603010009350c0000630100
+006301000063010000630100006301000063010000020100060c08010a0e0001062a0100
+060302020103020206030100090105320c01006301000063010000630100006301000063
+01000063010000020100060c08010a0e0001062a01000603020201030202060301000901
+05320c0100630100006301000063010000630100006301000063010000020100060c0801
+0a0e0001062a010006030202010302020603010009010516010205180c01006301000063
+01000063010000630100006301000063010000020100060c08010a0e0001062a01000603
+020201030202060301000901051501000502010005170c0100630100000e010000530100
+0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
+010302020603010009010519010005170c0100630100000e010000530100006301000063
+0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
+010009010519010005170c01000f01020002010000000101000201000000010100030102
+003b0100000e010000000101000201000000010100030102000201010000010000020101
+0000010000030102002d01000063010000630100006301000063010000020100060c0801
+0a0e0001062a010006030202010302020603010009010517010105180c01000e01000002
+0100000101010001010000010101000101000001010000020100003a0100000e01010001
+010000010101000101000001010000020100000101000000010000000100000101000000
+0100000001000001010000020100002c0100006301000063010000630100006301000002
+0100060c08010a0e0001062a010006030202010302020603010009010519010005170c01
+001201000001010000020100000101000002010000050100003a0100000e010000020100
+000101000005010000020100000101000000010000000100000101000000010000000100
+00050100002c01000063010000630100006301000063010000020100060c08010a0e0001
+062a010006030202010302020603010009010519010005170c01000f0103000101000002
+0100000101000002010000020103003a0100000e01000002010000010100000501000002
+010000010100000001000000010000010100000001000000010000020103002c01000063
+010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
+0202060301000901051501000502010005170c01000e0100000201000001010000020100
+00010100000201000001010000020100003a0100000e0100000201000001010000050100
+000201000001010000000100000001000001010000000100000001000001010000020100
+002c01000063010000630100006301000063010000020100060c08010a0e0001062a0100
+06030202010302020603010009010516010205180c01000e010000020100000101000002
+010000010100000201000001010000020100003a0100000e010100010100000101000005
+010000020100000101000000010000000100000101000000010000000100000101000002
+0100002c01000063010000630100006301000063010000020100060c08010a0e0001062a
+0100060302020103020206030100090105320c01000f0103000101000002010000010100
+0002010000020103003a0100000e01000000010100020100000601020002010000000100
+0000010000010100000001000000010000020103002c0100006301000063010000630100
+0063010000020100060c08010a0e0001062a010006030202010302020603010009010532
+0c0100630100006301000063010000630100006301000063010000020100060c08010a0e
+0001062a0100060302020103020206030100090105320c01006301000063010000630100
+00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
+06030100090105320c010063010000630100006301000063010000630100006301000002
+0100060c08010a0e0001062a0100060302020103020206030100090105320c0100630100
+006301000063010000630100006301000063010000020100060c08010a0e0001062a0100
+060302020103020206030100090105320c01006301000063010000630100006301000063
+01000063010000020100060c08010a0e0001062a01000603020201030202060301000901
+0c3400630100006301000063010000630100006301000063010000020100060c08010a0e
+0001062a010006030202010302020603010009000c3501ff01ff0161060c08010a0e0001
+062a01000603020201030202060301000936006301000063010000630100006301000063
+01000063010000020100060c08010a0e0001062a01000603020201030202060301000935
+0c0000630100006301000063010000630100006301000063010000020100060c08010a0e
+0001062a0100060302020103020206030100090105320c01006301000063010000630100
+00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
+06030100090105320c010063010000630100006301000063010000630100006301000002
+0100060c08010a0e0001062a010006030202010302020603010009010518010005180c01
+00630100006301000063010000630100006301000063010000020100060c08010a0e0001
+062a010006030202010302020603010009010517010105180c0100170100000601000042
+010000150100001c0100000b010200030102001801000063010000630100006301000063
+010000020100060c08010a0e0001062a0100060302020103020206030100090105160100
+0500010005180c0100170100004a010000150100001c0100000d01000005010000180100
+0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
+01030202060301000901051601000500010005180c01000f010200020104000201020002
+0100000001010003010200340100000f0102000201000001010000030102000201000000
+010100030102000201040001010000020100000401000005010000180100006301000063
+0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
+01000901051501000501010005180c01000e010000020100000301000006010000020101
+00010100000101000002010000330100000e010000020100000101000000010000030100
+000201000001010100010100000101000002010000030100000301000002010000040100
+00050100001801000063010000630100006301000063010000020100060c08010a0e0001
+062a01000603020201030202060301000901051401000502010005180c01000e01000007
+01000006010000020100000201000005010000330100000e010000050101000801000001
+010000020100000101000007010000030100000201000004010000050100001801000063
+010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
+02020603010009010514010505170c01000f010200040100000601000002010000020100
+0002010300330100000f0102000201010005010300010100000201000002010200040100
+000301000002010000040100000501000018010000630100006301000063010000630100
+00020100060c08010a0e0001062a01000603020201030202060301000901051801000518
+0c0100120100000301000006010000020100000201000001010000020100003301000012
+010000010100000001000003010000020100000101000002010000050100000301000003
+010000020100000401000005010000180100006301000063010000630100006301000002
+0100060c08010a0e0001062a010006030202010302020603010009010517010205170c01
+000e01000002010000030100000601000002010000020100000101000002010000330100
+000e01000002010000010100000101000002010000020100000101000002010000010100
+000201000003010000030100000101010004010000050100001801000063010000630100
+006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
+090105320c01000f0102000501010004010000020100000201000002010300330100000f
+010200020100000201000002010300010100000201000002010200050101000201010000
+01000004010000050100001801000063010000630100006301000063010000020100060c
+08010a0e0001062a0100060302020103020206030100090105320c010063010000630100
+0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
+0103020206030100090105320c0100630100006301000063010000630100006301000063
+010000020100060c08010a0e0001062a0100060302020103020206030100090105320c01
+00630100006301000063010000630100006301000063010000020100060c08010a0e0001
+062a0100060302020103020206030100090105320c010063010000630100006301000063
+0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
+0100090105320c0100630100006301000063010000630100006301000063010000020100
+060c08010a0e0001062a010006030202010302020603010009010c340063010000630100
+0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
+010302020603010009000c3501ff01ff0161060c08010a0e0001062a0100060302020103
+020206030100093600630100006301000063010000630100006301000063010000020100
+060c08010a0e0001062a010006030202010302020603010009350c000063010000630100
+0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
+0103020206030100090105320c0100630100006301000063010000630100006301000063
+010000020100060c08010a0e0001062a0100060302020103020206030100090105320c01
+00630100006301000063010000630100006301000063010000020100060c08010a0e0001
+062a010006030202010302020603010009010515010405170c0100630100006301000063
+010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
+020206030100090105150100051b0c01000e0100000e010000140100002d010000320102
+002d01000063010000630100006301000063010000020100060c08010a0e0001062a0100
+060302020103020206030100090105150100051b0c01000e0100000e0100004301000034
+0100002d01000063010000630100006301000063010000020100060c08010a0e0001062a
+0100060302020103020206030100090105150100051b0c01000e01000001010000030102
+0002010400020102000201000000010100030102000201000000010100030102001f0100
+000e01000002010000010100000001010002010000000101000301020003010200050100
+00030102002601000063010000630100006301000063010000020100060c08010a0e0001
+062a010006030202010302020603010009010515010305180c01000e0100000001000003
+010000020100000301000003010000020100000101010001010000040100000201010001
+01000001010000020100001e0100000e0100000201000001010100010100000101010001
+010000010100000201000001010000020100000401000002010000020100002501000063
+010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
+02020603010009010519010005170c01000e010100080100000301000007010000010100
+00080100000201000002010000050100001e0100000e0100000201000001010000020100
+000101000002010000010100000901000004010000060100002501000063010000630100
+006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
+09010519010005170c01000e010100050103000301000004010300010100000801000002
+01000002010000020103001e0100000e0100000201000001010000020100000101000002
+010000020102000301030004010000030103002501000063010000630100006301000063
+010000020100060c08010a0e0001062a0100060302020103020206030100090105140100
+0503010005170c01000e0100000001000003010000020100000301000003010000020100
+000101000008010000020100000201000001010000020100001e0100000e010000020100
+000101000002010000010100000201000005010000010100000201000004010000020100
+00020100002501000063010000630100006301000063010000020100060c08010a0e0001
+062a010006030202010302020603010009010515010305180c01000e0100000101000002
+010000020100000301000003010000020100000101000008010000020100000201000001
+010000020100001e0100000e010000010101000101010001010000010101000101000001
+010000020100000101000002010000040100000201000002010000250100006301000063
+0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
+0100090105320c01000e0100000201000002010300040101000201030001010000080100
+000201000002010000020103001e0100000f010100000100000101000000010100020100
+000001010003010200030103000401000003010300250100006301000063010000630100
+0063010000020100060c08010a0e0001062a010006030202010302020603010009010532
+0c0100630100001501000005010000450100006301000063010000630100006301000002
+0100060c08010a0e0001062a0100060302020103020206030100090105320c0100630100
+0015010000050100004501000063010000630100006301000063010000020100060c0801
+0a0e0001062a0100060302020103020206030100090105320c0100630100001501000005
+0100004501000063010000630100006301000063010000020100060c08010a0e0001062a
+0100060302020103020206030100090105320c0100630100006301000063010000630100
+006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
+090105320c0100630100006301000063010000630100006301000063010000020100060c
+08010a0e0001062a010006030202010302020603010009010c3400630100006301000063
+010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
+02020603010009000c3501ff01ff0161060c08010a0e0001062a01000603020201030202
+06030100093600630100006301000063010000630100006301000063010000020100060c
+08010a0e0001062a010006030202010302020603010009350c0000630100006301000063
+010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
+020206030100090105320c01006301000063010000630100006301000063010000630100
+00020100060c08010a0e0001062a0100060302020103020206030100090105320c010063
+0100006301000063010000630100006301000063010000020100060c08010a0e0001062a
+010006030202010302020603010009010517010205170c01006301000063010000630100
+00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
+06030100090105160100051a0c0100110100001a010100040100002d010000160102000c
+010000020100003701000063010000630100006301000063010000020100060c08010a0e
+0001062a0100060302020103020206030100090105150100051b0c01002c010000350100
+0018010000100100003701000063010000630100006301000063010000020100060c0801
+0a0e0001062a0100060302020103020206030100090105150100051b0c01000f01020003
+010200030102000301020004010000040102000201000000010100030102001f0100000f
+010200050100000201000002010000020102000201000001010000340100006301000063
+0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
+010009010515010305180c01001101000002010000020100000101000002010000010100
+00020100000101040004010000020101000101000001010000020100001e0100000e0100
+000201000004010000020100000201000004010000020100000001000035010000630100
+00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
+060301000901051501000502010005170c01001101000002010000020100000101000005
+010000020100000301000006010000020100000201000001010000020100001e01000012
+010000040100000201000002010000040100000201010036010000630100006301000063
+01000063010000020100060c08010a0e0001062a01000603020201030202060301000901
+051501000502010005170c01001101000002010000020100000201020002010400030100
+00060100000201000002010000010104001e0100000f0103000401000003010000000100
+0005010000020101003601000063010000630100006301000063010000020100060c0801
+0a0e0001062a01000603020201030202060301000901051501000502010005170c010011
+010000020100000201000005010000010100000701000006010000020100000201000001
+010000220100000e01000002010000040100000301000000010000050100000201000000
+0100003501000063010000630100006301000063010000020100060c08010a0e0001062a
+010006030202010302020603010009010516010205180c01001101000002010000020100
+000101000002010000010100000201000003010000060100000201000002010000010100
+00020100001e0100000e0100000201000004010000040100000601000002010000010100
+003401000063010000630100006301000063010000020100060c08010a0e0001062a0100
+060302020103020206030100090105320c01001101000003010200030102000301020004
+010000060100000201000002010000020102001f0100000f010300040100000401000006
+01000002010000020100003301000063010000630100006301000063010000020100060c
+08010a0e0001062a0100060302020103020206030100090105320c010011010000500100
+006301000063010000630100006301000063010000020100060c08010a0e0001062a0100
+060302020103020206030100090105320c01000e01000001010000500100006301000063
+010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
+020206030100090105320c01000f01010051010000630100006301000063010000630100
+0063010000020100060c08010a0e0001062a010006030202010302020603010009010532
+0c0100630100006301000063010000630100006301000063010000020100060c08010a0e
+0001062a0100060302020103020206030100090105320c01006301000063010000630100
+00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
+0603010009010c3400630100006301000063010000630100006301000063010000020100
+060c08010a0e0001062a010006030202010302020603010009000c3501ff01ff0161060c
+08010a0e0001062a01000603020201030202060301000936006301000063010000630100
+00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
+0603010009350c0000630100006301000063010000630100006301000063010000020100
+060c08010a0e0001062a0100060302020103020206030100090105320c01006301000063
+01000063010000630100006301000063010000020100060c08010a0e0001062a01000603
+02020103020206030100090105320c010063010000630100006301000063010000630100
+0063010000020100060c08010a0e0001062a010006030202010302020603010009010515
+010405170c0100630100006301000063010000630100006301000063010000020100060c
+08010a0e0001062a01000603020201030202060301000901051501000502010005170c01
+0011010100130100000b01000002010000290100002c0100000b010200030102001f0100
+0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
+010302020603010009010518010005180c010010010000150100000f010000290100002c
+0100000d010000050100001f01000063010000630100006301000063010000020100060c
+08010a0e0001062a010006030202010302020603010009010518010005180c0100100100
+000301000000010100030102000301010000010000010100000001010003010200020100
+0001010000260100000e0100000001010003010200020100000001010002010000000101
+0002010400010100000201000004010000050100001f0100006301000063010000630100
+0063010000020100060c08010a0e0001062a010006030202010302020603010009010518
+010005180c01000e01040001010100010100000101000002010000010100000101010001
+01010001010000040100000201000000010000270100000e010100010100000101000002
+010000010101000101000001010100010100000301000003010000020100000401000005
+0100001f01000063010000630100006301000063010000020100060c08010a0e0001062a
+010006030202010302020603010009010518010005180c01001001000003010000050100
+00020100000101000002010000010100000801000002010100280100000e010000020100
+000101000002010000010100000501000007010000030100000201000004010000050100
+001f01000063010000630100006301000063010000020100060c08010a0e0001062a0100
+06030202010302020603010009010517010005190c010010010000030100000501040001
+01000002010000010100000801000002010100280100000e010000020100000101000002
+010000010100000501000007010000030100000201000004010000050100001f01000063
+010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
+02020603010009010517010005190c010010010000030100000501000005010000020100
+0001010000080100000201000000010000270100000e0100000201000001010000020100
+00010100000501000007010000030100000201000004010000050100001f010000630100
+00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
+0603010009010517010005190c0100100100000301000005010000020100000101000001
+01010001010000080100000201000001010000260100000e010000020100000101000002
+010000010100000501000007010000030100000101010004010000050100001f01000063
+010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
+020206030100090105320c01001001000003010000060102000301010000010000010100
+00080100000201000002010000250100000e010000020100000201020002010000050100
+0008010100020101000001000004010000050100001f0100006301000063010000630100
+0063010000020100060c08010a0e0001062a010006030202010302020603010009010532
+0c0100630100006301000063010000630100006301000063010000020100060c08010a0e
+0001062a0100060302020103020206030100090105320c01006301000063010000630100
+00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
+06030100090105320c010063010000630100006301000063010000630100006301000002
+0100060c08010a0e0001062a0100060302020103020206030100090105320c0100630100
+006301000063010000630100006301000063010000020100060c08010a0e0001062a0100
+060302020103020206030100090105320c01006301000063010000630100006301000063
+01000063010000020100060c08010a0e0001062a01000603020201030202060301000901
+0c3400630100006301000063010000630100006301000063010000020100060c08010a0e
+0001062a010006030202010302020603010009000c3501ff01ff0161060c08010a0e0001
+062a01000603020201030202060301000936006301000063010000630100006301000063
+01000063010000020100060c08010a0e0001062a01000603020201030202060301000935
+0c0000630100006301000063010000630100006301000063010000020100060c08010a0e
+0001062a0100060302020103020206030100090105320c01006301000063010000630100
+00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
+06030100090105320c010063010000630100006301000063010000630100006301000002
+0100060c08010a0e0001062a010006030202010302020603010009010516010205180c01
+00630100006301000063010000630100006301000063010000020100060c08010a0e0001
+062a01000603020201030202060301000901051501000502010005170c0100630100000e
+0100000f0100000b01000006010000100100001b01000063010000630100006301000063
+010000020100060c08010a0e0001062a0100060302020103020206030100090105150100
+0502010005170c0100630100000e0100001c010000180100001b01000063010000630100
+006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
+0901051501000502010005170c01000e0100000001010003010200020100000001010042
+0100000e0100000101000002010000000101000301020003010200020104000201020002
+010000000101000301020002010000000101000301020002010000000101000301010000
+0100000201000063010000630100006301000063010000020100060c08010a0e0001062a
+010006030202010302020603010009010516010205180c01000e01010001010000010100
+00020100000101010001010000410100000e010000000100000301010001010000040100
+000201000002010000030100000601000002010100010100000101000002010000010101
+000101000001010000020100000101010001010000010100000101010002010000630100
+00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
+060301000901051501000502010005170c01000e01000002010000010100000201000001
+010000450100000e01010004010000080100000201000007010000060100000201000002
+010000010100000201000001010000020100000101000002010000010100000501000002
+0100000201000063010000630100006301000063010000020100060c08010a0e0001062a
+01000603020201030202060301000901051501000502010005170c01000e010000020100
+000101040001010000450100000e01010004010000080100000301020004010000060100
+000201000002010000010104000101000002010000010104000101000005010000020100
+000201000063010000630100006301000063010000020100060c08010a0e0001062a0100
+0603020201030202060301000901051501000502010005170c01000e0100000201000001
+01000005010000450100000e010000000100000301000008010000060100000301000006
+010000020100000201000001010000050100000201000001010000050100000501000002
+0100000201000063010000630100006301000063010000020100060c08010a0e0001062a
+010006030202010302020603010009010516010205180c01000e01010001010000010100
+000201000001010000450100000e01000001010000020100000801000002010000020100
+000301000006010000020100000201000001010000020100000101010001010000010100
+000201000001010000050100000101010002010000630100006301000063010000630100
+00020100060c08010a0e0001062a0100060302020103020206030100090105320c01000e
+010000000101000301020002010000450100000e01000002010000010100000801000003
+010200050101000401000002010000020100000201020002010000000101000301020002
+01000006010100000100000201000063010000630100006301000063010000020100060c
+08010a0e0001062a0100060302020103020206030100090105320c01000e010000530100
+005f0100000201000063010000630100006301000063010000020100060c08010a0e0001
+062a0100060302020103020206030100090105320c01000e010000530100005b01000002
+0100000201000063010000630100006301000063010000020100060c08010a0e0001062a
+0100060302020103020206030100090105320c01000e010000530100005c010200030100
+0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
+0103020206030100090105320c0100630100006301000063010000630100006301000063
+010000020100060c08010a0e0001062a0100060302020103020206030100090105320c01
+00630100006301000063010000630100006301000063010000020100060c08010a0e0001
+062a010006030202010302020603010009010c3400630100006301000063010000630100
+006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
+09000c3501ff01ff0161060c08010a0e0001062a01000603020201030202060301000936
+00630100006301000063010000630100006301000063010000020100060c08010a0e0001
+062a010006030202010302020603010009350c0000630100006301000063010000630100
+006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
+090105320c0100630100006301000063010000630100006301000063010000020100060c
+08010a0e0001062a0100060302020103020206030100090105320c010063010000630100
+0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
+010302020603010009010516010205180c01006301000063010000630100006301000063
+01000063010000020100060c08010a0e0001062a01000603020201030202060301000901
+051501000502010005170c0100260100003b01000019010000170102002d010000630100
+00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
+060301000901051501000502010005170c01006301000019010000190100002d01000063
+010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
+0202060301000901051501000502010005170c01000e0101000001000003010200020100
+00000101000301020003010200340100000f010200030101000001000002010200020100
+00000101000201000000010100050100000301020002010000000101001f010000630100
+00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
+060301000901051501000502010005170c01000e01000000010000000100000101000002
+0100000101010001010000040100000201000002010000330100000e0100000201000001
+010000010101000101000002010000010101000101000001010100010100000401000002
+0100000201000001010100010100001e0100006301000063010000630100006301000002
+0100060c08010a0e0001062a010006030202010302020603010009010516010305170c01
+000e010000000100000001000005010000010100000801000006010000330100000e0100
+000201000001010000020100000101000002010000010100000201000001010000020100
+00040100000601000001010000020100001e010000630100006301000063010000630100
+00020100060c08010a0e0001062a01000603020201030202060301000901051901000517
+0c01000e010000000100000001000002010300010100000801000003010300330100000e
+010000020100000101000002010000010104000101000002010000010100000201000004
+0100000301030001010000020100001e0100006301000063010000630100006301000002
+0100060c08010a0e0001062a010006030202010302020603010009010518010005180c01
+000e01000000010000000100000101000002010000010100000801000002010000020100
+00330100000e010000020100000101000002010000010100000501000002010000010100
+000201000004010000020100000201000001010000020100001e01000063010000630100
+006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
+09010515010205190c01000e010000000100000001000001010000020100000101000008
+0100000201000002010000330100000e0100000201000001010000010101000101000002
+010000010100000201000001010100010100000401000002010000020100000101000002
+0100001e01000063010000630100006301000063010000020100060c08010a0e0001062a
+0100060302020103020206030100090105320c01000e0100000001000000010000020103
+00010100000801000003010300330100000f010200030101000001000002010200020100
+00020100000101000000010100050100000301030001010000020100001e010000630100
+00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
+06030100090105320c0100630100002a0100003701000063010000630100006301000063
+010000020100060c08010a0e0001062a0100060302020103020206030100090105320c01
+00630100002a0100003701000063010000630100006301000063010000020100060c0801
+0a0e0001062a0100060302020103020206030100090105320c0100630100002a01000037
+01000063010000630100006301000063010000020100060c08010a0e0001062a01000603
+02020103020206030100090105320c010063010000630100006301000063010000630100
+0063010000020100060c08010a0e0001062a010006030202010302020603010009010532
+0c0100630100006301000063010000630100006301000063010000020100060c08010a0e
+0001062a010006030202010302020603010009010c340063010000630100006301000063
+0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
+010009000c3501ff01ff0161060c08010a0e0001062a0100060302020103020206030100
+009a0100006301000063010000630100006301000063010000020100060c08010a0e0001
+062a01000603020201030202060301000035080000630100006301000063010000630100
+006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
+00010632080100630100006301000063010000630100006301000063010000020100060c
+08010a0e0001062a01000603020201030202060301000001063208010063010000630100
+0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
+010302020603010000010613010006040102061508010063010000630100006301000063
+0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
+010000010611010206030100060201000614080100630100006301000063010000630100
+006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
+000106130100060301000602010006140801006301000063010000630100006301000063
+01000063010000020100060c08010a0e0001062a01000603020201030202060301000001
+061301000603010006020100061408010063010000630100006301000063010000630100
+0063010000020100060c08010a0e0001062a010006030202010302020603010000010613
+010006030100060201000614080100630100006301000063010000630100006301000063
+010000020100060c08010a0e0001062a0100060302020103020206030100000106130100
+060301000602010006140801006301000063010000630100006301000063010000630100
+00020100060c08010a0e0001062a01000603020201030202060301000001061301000603
+010006020100061408010063010000630100006301000063010000630100006301000002
+0100060c08010a0e0001062a010006030202010302020603010000010613010006030100
+060201000614080100630100006301000063010000630100006301000063010000020100
+060c08010a0e0001062a0100060302020103020206030100000106110104060201020615
+080100630100006301000063010000630100006301000063010000020100060c08010a0e
+0001062a0100060302020103020206030100000106320801006301000063010000630100
+00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
+060301000001063208010063010000630100006301000063010000630100006301000002
+0100060c08010a0e0001062a010006030202010302020603010000010632080100630100
+006301000063010000630100006301000063010000020100060c08010a0e0001062a0100
+060302020103020206030100000106320801006301000063010000630100006301000063
+01000063010000020100060c08010a0e0001062a01000603020201030202060301000001
+0632080100630100006301000063010000630100006301000063010000020100060c0801
+0a0e0001062a010006030202010302020603010000010632080100630100006301000063
+010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
+020206030100000108340063010000630100006301000063010000630100006301000002
+0100060c08010a0e0001062a01000603020201030202060301000000083501ff01ff0161
+060c08010a0e0001062a0100060302020103020206030100009a01000063010000630100
+00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
+060301000035080000630100006301000063010000630100006301000063010000020100
+060c08010a0e0001062a0100060302020103020206030100000106320801006301000063
+01000063010000630100006301000063010000020100060c08010a0e0001062a01000603
+020201030202060301000001063208010063010000630100006301000063010000630100
+0063010000020100060c08010a0e0001062a010006030202010302020603010000010613
+010006050100061608010063010000630100006301000063010000630100006301000002
+0100060c08010a0e0001062a010006030202010302020603010000010611010206030102
+0616080100630100006301000063010000630100006301000063010000020100060c0801
+0a0e0001062a010006030202010302020603010000010613010006050100061608010063
+0100006301000063010000630100006301000063010000020100060c08010a0e0001062a
+010006030202010302020603010000010613010006050100061608010063010000630100
+0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
+010302020603010000010613010006050100061608010063010000630100006301000063
+0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
+010000010613010006050100061608010063010000630100006301000063010000630100
+0063010000020100060c08010a0e0001062a010006030202010302020603010000010613
+010006050100061608010063010000630100006301000063010000630100006301000002
+0100060c08010a0e0001062a010006030202010302020603010000010613010006050100
+0616080100630100006301000063010000630100006301000063010000020100060c0801
+0a0e0001062a010006030202010302020603010000010611010406010104061408010063
+0100006301000063010000630100006301000063010000020100060c08010a0e0001062a
+010006030202010302020603010000010632080100630100006301000063010000630100
+006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
+00010632080100630100006301000063010000630100006301000063010000020100060c
+08010a0e0001062a01000603020201030202060301000001063208010063010000630100
+0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
+010302020603010000010632080100630100006301000063010000630100006301000063
+010000020100060c08010a0e0001062a0100060302020103020206030100000106320801
+00630100006301000063010000630100006301000063010000020100060c08010a0e0001
+062a01000603020201030202060301000001063208010063010000630100006301000063
+0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
+01000001083400630100006301000063010000630100006301000063010000020100060c
+08010a0e0001062a01000603020201030202060301000000083501ff01ff0161060c0801
+0a0e0001062a0100060302020103020206030100009a0100006301000063010000630100
+006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
+0035080000630100006301000063010000630100006301000063010000020100060c0801
+0a0e0001062a010006030202010302020603010000010632080100630100006301000063
+010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
+020206030100000106320801006301000063010000630100006301000063010000630100
+00020100060c08010a0e0001062a01000603020201030202060301000001061301000604
+01020615080100630100006301000063010000630100006301000063010000020100060c
+08010a0e0001062a01000603020201030202060301000001061101020603010006020100
+0614080100630100006301000063010000630100006301000063010000020100060c0801
+0a0e0001062a010006030202010302020603010000010613010006030100060201000614
+080100630100006301000063010000630100006301000063010000020100060c08010a0e
+0001062a0100060302020103020206030100000106130100060301000602010006140801
+00630100006301000063010000630100006301000063010000020100060c08010a0e0001
+062a01000603020201030202060301000001061301000606010006150801006301000063
+01000063010000630100006301000063010000020100060c08010a0e0001062a01000603
+020201030202060301000001061301000605010006160801006301000063010000630100
+00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
+060301000001061301000604010006170801006301000063010000630100006301000063
+01000063010000020100060c08010a0e0001062a01000603020201030202060301000001
+061301000603010006020100061408010063010000630100006301000063010000630100
+0063010000020100060c08010a0e0001062a010006030202010302020603010000010611
+010406010104061408010063010000630100006301000063010000630100006301000002
+0100060c08010a0e0001062a010006030202010302020603010000010632080100630100
+006301000063010000630100006301000063010000020100060c08010a0e0001062a0100
+060302020103020206030100000106320801006301000063010000630100006301000063
+01000063010000020100060c08010a0e0001062a01000603020201030202060301000001
+0632080100630100006301000063010000630100006301000063010000020100060c0801
+0a0e0001062a010006030202010302020603010000010632080100630100006301000063
+010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
+020206030100000106320801006301000063010000630100006301000063010000630100
+00020100060c08010a0e0001062a01000603020201030202060301000001063208010063
+0100006301000063010000630100006301000063010000020100060c08010a0e0001062a
+010006030202010302020603010000010834006301000063010000630100006301000063
+01000063010000020100060c08010a0e0001062a01000603020201030202060301000000
+083501ff01ff0161060c08010a0e0001062a0100060302020103020206030100009a0100
+006301000063010000630100006301000063010000020100060c08010a0e0001062a0100
+060302020103020206030100003508000063010000630100006301000063010000630100
+0063010000020100060c08010a0e0001062a010006030202010302020603010000010632
+080100630100006301000063010000630100006301000063010000020100060c08010a0e
+0001062a0100060302020103020206030100000106320801006301000063010000630100
+00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
+060301000001061301000604010206150801006301000063010000630100006301000063
+01000063010000020100060c08010a0e0001062a01000603020201030202060301000001
+061101020603010006020100061408010063010000630100006301000063010000630100
+0063010000020100060c08010a0e0001062a010006030202010302020603010000010613
+010006070100061408010063010000630100006301000063010000630100006301000002
+0100060c08010a0e0001062a010006030202010302020603010000010613010006070100
+0614080100630100006301000063010000630100006301000063010000020100060c0801
+0a0e0001062a010006030202010302020603010000010613010006050101061508010063
+0100006301000063010000630100006301000063010000020100060c08010a0e0001062a
+010006030202010302020603010000010613010006070100061408010063010000630100
+0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
+010302020603010000010613010006070100061408010063010000630100006301000063
+0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
+010000010613010006030100060201000614080100630100006301000063010000630100
+006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
+000106110104060201020615080100630100006301000063010000630100006301000063
+010000020100060c08010a0e0001062a0100060302020103020206030100000106320801
+00630100006301000063010000630100006301000063010000020100060c08010a0e0001
+062a01000603020201030202060301000001063208010063010000630100006301000063
+0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
+010000010632080100630100006301000063010000630100006301000063010000020100
+060c08010a0e0001062a0100060302020103020206030100000106320801006301000063
+01000063010000630100006301000063010000020100060c08010a0e0001062a01000603
+020201030202060301000001063208010063010000630100006301000063010000630100
+0063010000020100060c08010a0e0001062a010006030202010302020603010000010632
+080100630100006301000063010000630100006301000063010000020100060c08010a0e
+0001062a0100060302020103020206030100000108340063010000630100006301000063
+0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
+01000000083501ff01ff0161060c08010a0e0001062a0100060302020103020206030100
+009a0100006301000063010000630100006301000063010000020100060c08010a0e0001
+062a01000603020201030202060301000035080000630100006301000063010000630100
+006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
+00010632080100630100006301000063010000630100006301000063010000020100060c
+08010a0e0001062a01000603020201030202060301000001063208010063010000630100
+0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
+010302020603010000010613010006060100061508010063010000630100006301000063
+0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
+010000010611010206050101061508010063010000630100006301000063010000630100
+0063010000020100060c08010a0e0001062a010006030202010302020603010000010613
+010006040100060001000615080100630100006301000063010000630100006301000063
+010000020100060c08010a0e0001062a0100060302020103020206030100000106130100
+060401000600010006150801006301000063010000630100006301000063010000630100
+00020100060c08010a0e0001062a01000603020201030202060301000001061301000603
+010006010100061508010063010000630100006301000063010000630100006301000002
+0100060c08010a0e0001062a010006030202010302020603010000010613010006020100
+060201000615080100630100006301000063010000630100006301000063010000020100
+060c08010a0e0001062a0100060302020103020206030100000106130100060201050614
+080100630100006301000063010000630100006301000063010000020100060c08010a0e
+0001062a0100060302020103020206030100000106130100060601000615080100630100
+006301000063010000630100006301000063010000020100060c08010a0e0001062a0100
+060302020103020206030100000106110104060301020614080100630100006301000063
+010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
+020206030100000106320801006301000063010000630100006301000063010000630100
+00020100060c08010a0e0001062a01000603020201030202060301000001063208010063
+0100006301000063010000630100006301000063010000020100060c08010a0e0001062a
+010006030202010302020603010000010632080100630100006301000063010000630100
+006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
+00010632080100630100006301000063010000630100006301000063010000020100060c
+08010a0e0001062a01000603020201030202060301000001063208010063010000630100
+0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
+010302020603010000010632080100630100006301000063010000630100006301000063
+010000020100060c08010a0e0001062a0100060302020103020206030100000108340063
+0100006301000063010000630100006301000063010000020100060c08010a0e0001062a
+01000603020201030202060301000000083501ff01ff0161060c08010a0e0001062a0100
+060302020103020206030100009a01000063010000630100006301000063010000630100
+00020100060c08010a0e0001062a01000603020201030202060301000035080000630100
+006301000063010000630100006301000063010000020100060c08010a0e0001062a0100
+060302020103020206030100000106320801006301000063010000630100006301000063
+01000063010000020100060c08010a0e0001062a01000603020201030202060301000001
+0632080100630100006301000063010000630100006301000063010000020100060c0801
+0a0e0001062a010006030202010302020603010000010613010006030104061408010063
+0100006301000063010000630100006301000063010000020100060c08010a0e0001062a
+010006030202010302020603010000010611010206030100061808010063010000630100
+0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
+010302020603010000010613010006030100061808010063010000630100006301000063
+0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
+010000010613010006030100061808010063010000630100006301000063010000630100
+0063010000020100060c08010a0e0001062a010006030202010302020603010000010613
+010006030103061508010063010000630100006301000063010000630100006301000002
+0100060c08010a0e0001062a010006030202010302020603010000010613010006070100
+0614080100630100006301000063010000630100006301000063010000020100060c0801
+0a0e0001062a010006030202010302020603010000010613010006070100061408010063
+0100006301000063010000630100006301000063010000020100060c08010a0e0001062a
+010006030202010302020603010000010613010006020100060301000614080100630100
+006301000063010000630100006301000063010000020100060c08010a0e0001062a0100
+060302020103020206030100000106110104060101030615080100630100006301000063
+010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
+020206030100000106320801006301000063010000630100006301000063010000630100
+00020100060c08010a0e0001062a01000603020201030202060301000001063208010063
+0100006301000063010000630100006301000063010000020100060c08010a0e0001062a
+010006030202010302020603010000010632080100630100006301000063010000630100
+006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
+00010632080100630100006301000063010000630100006301000063010000020100060c
+08010a0e0001062a01000603020201030202060301000001063208010063010000630100
+0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
+010302020603010000010632080100630100006301000063010000630100006301000063
+010000020100060c08010a0e0001062a0100060302020103020206030100000108340063
+0100006301000063010000630100006301000063010000020100060c08010a0e0001062a
+01000603020201030202060301000000083501ff01ff0161060c08010a0e0001062a0100
+060302020103020206030100009a01000063010000630100006301000063010000630100
+00020100060c08010a0e0001062a01000603020201030202060301000035080000630100
+006301000063010000630100006301000063010000020100060c08010a0e0001062a0100
+060302020103020206030100000106320801006301000063010000630100006301000063
+01000063010000020100060c08010a0e0001062a01000603020201030202060301000001
+0632080100630100006301000063010000630100006301000063010000020100060c0801
+0a0e0001062a010006030202010302020603010000010613010006050102061408010063
+0100006301000063010000630100006301000063010000020100060c08010a0e0001062a
+010006030202010302020603010000010611010206040100061708010063010000630100
+0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
+010302020603010000010613010006030100061808010063010000630100006301000063
+0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
+010000010613010006030100061808010063010000630100006301000063010000630100
+0063010000020100060c08010a0e0001062a010006030202010302020603010000010613
+010006030103061508010063010000630100006301000063010000630100006301000002
+0100060c08010a0e0001062a010006030202010302020603010000010613010006030100
+060201000614080100630100006301000063010000630100006301000063010000020100
+060c08010a0e0001062a0100060302020103020206030100000106130100060301000602
+01000614080100630100006301000063010000630100006301000063010000020100060c
+08010a0e0001062a01000603020201030202060301000001061301000603010006020100
+0614080100630100006301000063010000630100006301000063010000020100060c0801
+0a0e0001062a010006030202010302020603010000010611010406020102061508010063
+0100006301000063010000630100006301000063010000020100060c08010a0e0001062a
+010006030202010302020603010000010632080100630100006301000063010000630100
+006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
+00010632080100630100006301000063010000630100006301000063010000020100060c
+08010a0e0001062a01000603020201030202060301000001063208010063010000630100
+0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
+010302020603010000010632080100630100006301000063010000630100006301000063
+010000020100060c08010a0e0001062a0100060302020103020206030100000106320801
+00630100006301000063010000630100006301000063010000020100060c08010a0e0001
+062a01000603020201030202060301000001063208010063010000630100006301000063
+0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
+01000001083400630100006301000063010000630100006301000063010000020100060c
+08010a0e0001062a01000603020201030202060301000000083501ff01ff0161060c0801
+0a0e0001062a0100060302020103020206030100009a0100006301000063010000630100
+006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
+0035080000630100006301000063010000630100006301000063010000020100060c0801
+0a0e0001062a010006030202010302020603010000010632080100630100006301000063
+010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
+020206030100000106320801006301000063010000630100006301000063010000630100
+00020100060c08010a0e0001062a01000603020201030202060301000001061301000603
+01040614080100630100006301000063010000630100006301000063010000020100060c
+08010a0e0001062a01000603020201030202060301000001061101020603010006020100
+0614080100630100006301000063010000630100006301000063010000020100060c0801
+0a0e0001062a010006030202010302020603010000010613010006060100061508010063
+0100006301000063010000630100006301000063010000020100060c08010a0e0001062a
+010006030202010302020603010000010613010006060100061508010063010000630100
+0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
+010302020603010000010613010006060100061508010063010000630100006301000063
+0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
+010000010613010006060100061508010063010000630100006301000063010000630100
+0063010000020100060c08010a0e0001062a010006030202010302020603010000010613
+010006050100061608010063010000630100006301000063010000630100006301000002
+0100060c08010a0e0001062a010006030202010302020603010000010613010006050100
+0616080100630100006301000063010000630100006301000063010000020100060c0801
+0a0e0001062a010006030202010302020603010000010611010406030100061608010063
+0100006301000063010000630100006301000063010000020100060c08010a0e0001062a
+010006030202010302020603010000010632080100630100006301000063010000630100
+006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
+00010632080100630100006301000063010000630100006301000063010000020100060c
+08010a0e0001062a01000603020201030202060301000001063208010063010000630100
+0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
+010302020603010000010632080100630100006301000063010000630100006301000063
+010000020100060c08010a0e0001062a0100060302020103020206030100000106320801
+00630100006301000063010000630100006301000063010000020100060c08010a0e0001
+062a01000603020201030202060301000001063208010063010000630100006301000063
+0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
+01000001083400630100006301000063010000630100006301000063010000020100060c
+08010a0e0001062a01000603020201030202060301000000083501ff01ff0161060c0801
+0a0e0001062a0100060302020103020206030100009a0100006301000063010000630100
+006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
+0035080000630100006301000063010000630100006301000063010000020100060c0801
+0a0e0001062a010006030202010302020603010000010632080100630100006301000063
+010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
+020206030100000106320801006301000063010000630100006301000063010000630100
+00020100060c08010a0e0001062a01000603020201030202060301000001061301000604
+01020615080100630100006301000063010000630100006301000063010000020100060c
+08010a0e0001062a01000603020201030202060301000001061101020603010006020100
+0614080100630100006301000063010000630100006301000063010000020100060c0801
+0a0e0001062a010006030202010302020603010000010613010006030100060201000614
+080100630100006301000063010000630100006301000063010000020100060c08010a0e
+0001062a0100060302020103020206030100000106130100060301000602010006140801
+00630100006301000063010000630100006301000063010000020100060c08010a0e0001
+062a01000603020201030202060301000001061301000604010206150801006301000063
+01000063010000630100006301000063010000020100060c08010a0e0001062a01000603
+020201030202060301000001061301000603010006020100061408010063010000630100
+0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
+010302020603010000010613010006030100060201000614080100630100006301000063
+010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
+020206030100000106130100060301000602010006140801006301000063010000630100
+00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
+060301000001061101040602010206150801006301000063010000630100006301000063
+01000063010000020100060c08010a0e0001062a01000603020201030202060301000001
+0632080100630100006301000063010000630100006301000063010000020100060c0801
+0a0e0001062a010006030202010302020603010000010632080100630100006301000063
+010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
+020206030100000106320801006301000063010000630100006301000063010000630100
+00020100060c08010a0e0001062a01000603020201030202060301000001063208010063
+0100006301000063010000630100006301000063010000020100060c08010a0e0001062a
+010006030202010302020603010000010632080100630100006301000063010000630100
+006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
+00010632080100630100006301000063010000630100006301000063010000020100060c
+08010a0e0001062a01000603020201030202060301000001083400630100006301000063
+010000630100006301000063010000020100060c08010010062a01000603020201030202
+060301ff01ff0199060c08000011062a010006030202010302020603010006ff06ff06e3
+010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff
+06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603
+010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020103
+02020603010006ff06ff06e3010006030202010302020603010006ff06ff06e301000603
+020201030202060301000649010006ff06ff069801000603020201030202060301000648
+010106ff06ff06980100060302020103020206030100064701000600010006ff06ff0698
+01000603020201030202060301000649010006ff06ff0698010006030202010302020603
+01000649010006ff06ff069801000603020201030202060301000649010006ff06ff0698
+01000603020201030202060301000649010006ff06ff0698010006030202010302020603
+01000649010006ff06ff069801000603020201030202060301000647010406ff06ff0696
+010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff
+06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603
+010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020103
+020206030100063708ff08ff0860064a0100060302020103020206030100063708ff08ff
+085f0000064a010006030202010302020603010006370801001d0aff0aff0a3e0001064a
+010006030202010302020603010006370801001c08000aff0aff0a3e0001064a01000603
+02020103020206030100063708010001060b08000000060b08010aff0aff0a3e0001064a
+0100060302020103020206030100063708010001060b08000000060b08010aff0aff0a3e
+0001064a0100060302020103020206030100063708010001060b08000000060b08010aff
+0aff0a3e0001064a0100060302020103020206030100063708010001060b08000000060b
+08010aff0aff0a3e0001064a0100060302020103020206030100063708010001060b0800
+0000060b08010aff0aff0a3e0001064a0100060302020103020206030100063708010001
+060b08000000060b08010aff0aff0a3e0001064a01000603020201030202060301000637
+08010001060b08000000060b08010aff0aff0a3e0001064a010006030202010302020603
+0100063708010001060b08000000060b08010aff0aff0a3e0001064a0100060302020103
+020206030100063708010001060b08000000060b08010aff0aff0a3e0001064a01000603
+02020103020206030100063708010001060b08000000060b08010aff0aff0a3e0001064a
+0100060302020103020206030100063708010001060b08000000060b08010aff0aff0a3e
+0001064a0100060302020103020206030100063708010001080c0000080d0aff0aff0a3e
+0001064a0100060302020103020206030100063708010000081c0aff0aff0a3e0001064a
+01000603020201030202060301000637080100ff00ff005e064a01000603020201030202
+060301000637080000ff00ff005f064a010006030202010302020603010006ff06ff06e3
+010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff
+06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603
+010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020103
+02020603010006ff06ff06e3010006030202010302020603010006ff06ff06e301000603
+0202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e3
+010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff
+06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603
+010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020103
+02020603010006ff06ff06e3010006030202010302020603010006ff06ff06e301000603
+0202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e3
+010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff
+06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603
+010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020103
+02020603010006ff06ff06e3010006030202010302020603010006ff06ff06e301000603
+0202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e3
+010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff
+06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603
+010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020101
+00040603010006ff06ff06e301000603000502020400060301ff01ff01e5060300000202
+040000000202040006ff06ff06ed00000202040000000202040006ff06ff06ed00000202
+040000000202040006ff06ff06ed00000202040000000202040006ff06ff06ed00000202
+0400000002020400000502ff02ff02e100060202040000000208040002ff02ff02e10000
+0208040000000208040002ff02ff02e100000208040000000208040001ff01ff01e10000
+020804000000040901ff01ff01e100000409
+%%EndData
+end
+%%PageTrailer
+%%Trailer
+%%BoundingBox: 0 0 532 441
+%%EOF
diff --git a/lib/tv/doc/src/tv_table_sorted.gif b/lib/tv/doc/src/tv_table_sorted.gif
new file mode 100644
index 0000000000..fd69e3cc58
--- /dev/null
+++ b/lib/tv/doc/src/tv_table_sorted.gif
Binary files differ
diff --git a/lib/tv/doc/src/tv_table_sorted.ps b/lib/tv/doc/src/tv_table_sorted.ps
new file mode 100644
index 0000000000..681b2f4d19
--- /dev/null
+++ b/lib/tv/doc/src/tv_table_sorted.ps
@@ -0,0 +1,1502 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (ImageMagick)
+%%Title: (/clearcase/otp/erts/lib/tv/doc/src/tv_table_sorted.eps)
+%%CreationDate: (Mon Mar 19 17:15:35 2001)
+%%BoundingBox: 0 0 532 441
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 0
+%%EndComments
+
+%%BeginDefaults
+%%PageOrientation: Portrait
+%%EndDefaults
+
+%%BeginProlog
+%
+% Display a color image. The image is displayed in color on
+% Postscript viewers or printers that support color, otherwise
+% it is displayed as grayscale.
+%
+/buffer 512 string def
+/byte 1 string def
+/color_packet 3 string def
+/pixels 768 string def
+
+/DirectClassPacket
+{
+ %
+ % Get a DirectClass packet.
+ %
+ % Parameters:
+ % red.
+ % green.
+ % blue.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/DirectClassImage
+{
+ %
+ % Display a DirectClass image.
+ %
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { DirectClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayDirectClassPacket } image
+ } ifelse
+} bind def
+
+/GrayDirectClassPacket
+{
+ %
+ % Get a DirectClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % red
+ % green
+ % blue
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/GrayPseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassImage
+{
+ %
+ % Display a PseudoClass image.
+ %
+ % Parameters:
+ % class: 0-PseudoClass or 1-Grayscale.
+ %
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ class 0 gt
+ {
+ currentfile buffer readline pop
+ token pop /depth exch def pop
+ /grays columns 8 add depth sub depth mul 8 idiv string def
+ columns rows depth
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { currentfile grays readhexstring pop } image
+ }
+ {
+ %
+ % Parameters:
+ % colors: number of colors in the colormap.
+ % colormap: red, green, blue color packets.
+ %
+ currentfile buffer readline pop
+ token pop /colors exch def pop
+ /colors colors 3 mul def
+ /colormap colors string def
+ currentfile colormap readhexstring pop pop
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { PseudoClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayPseudoClassPacket } image
+ } ifelse
+ } ifelse
+} bind def
+
+/DisplayImage
+{
+ %
+ % Display a DirectClass or PseudoClass image.
+ %
+ % Parameters:
+ % x & y translation.
+ % x & y scale.
+ % label pointsize.
+ % image label.
+ % image columns & rows.
+ % class: 0-DirectClass or 1-PseudoClass.
+ % compression: 0-RunlengthEncodedCompression or 1-NoCompression.
+ % hex color packets.
+ %
+ gsave
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ x y translate
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ currentfile buffer readline pop
+ token pop /pointsize exch def pop
+ /Helvetica findfont pointsize scalefont setfont
+ x y scale
+ currentfile buffer readline pop
+ token pop /columns exch def
+ token pop /rows exch def pop
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ currentfile buffer readline pop
+ token pop /compression exch def pop
+ class 0 gt { PseudoClassImage } { DirectClassImage } ifelse
+ grestore
+} bind def
+%%EndProlog
+%%Page: 1 1
+%%PageBoundingBox: 0 0 532 441
+userdict begin
+%%BeginData:
+DisplayImage
+0 0
+532.000000 441.000000
+12
+760 630
+1
+0
+0
+16
+ffffff
+000000
+d8d8d8
+c2c2c2
+6b6b6b
+ff0000
+d9d9d9
+b22222
+828282
+00ff00
+ffda00
+ffff80
+c3c3c3
+7f7f7f
+998300
+000000
+000a01ff01ff01e1000b0208040001ff01ff01e100000208040000000208040002ff02ff
+02e1000002080400000002080400020000ff00ff00de0400020000000208040000000202
+04060200000004ff04ff04de020000000405020204000000020204000209000d02ff02ff
+02d500000202040000000202040002080000020d040002a501010206010102150101021e
+0101022901010206010102430101022a010102260101023201010233010102ae00000202
+040000000202040002080000020d04000277010502000107020101030206010702090101
+02060101021501010219010002030101021c0100020b010102060101022e010202020100
+020d0101022a0101020c0104021401010232010102160100021b010102ae000002020400
+00000202040002080000020d04000277010102070101020301010201010102080101020c
+010102060101021501010218010102210101020b010102060101022e010202020100020d
+01010238010102020101024801010215010102cc00000202040000000202040002080000
+0202040602030400027701010207010102030101020c0101020401030203010102000101
+020301010202010302020101020901010202010302030103020201030201010402010101
+020201030203010102000101020a01040201010302030101020001010203010102020103
+022701000200010102010100020201030203010402020103020201010209010102000101
+020101010203010302030101020201010200010102020101020101030202010402020101
+020101010202010102020101020001010203010102000101020301030203010402020104
+020501040202010102010101020501030201010402000101020101010204010302020101
+020001010201010102020103020201040202010402020103020301010200010102060104
+020201030274000002020400000004030208000002020400030400000203040002770101
+0207010102030102020b0101020301010201010102020102020001010202010102010101
+020101010201010102090101020101010201010102010101020101010200010102010101
+020101010203010102010101020101010202010202000101020a01010202010102010101
+020201020200010102020101020101010201010102260100020001010201010002010101
+020101010201010102010101020101010201010102010101020901020200010202000101
+020101010201010102020101020201020200010102010101020001010200010102010101
+020101010202010102010101020201010202010202000101020201020200010102010101
+020101010201010102050101020801010201010102020101020101010204010102010101
+020101010202010102010101020301010201010102010101020001010201010102010101
+020101010200010102050101020501010201010102020102020001010204010102050101
+020101010273000004030101020b00000203040003020000020404000277010402040101
+0204010302090101020701010202010102010101020201010201010102010101020d0101
+020101010201010102010101020801010201010102030101020101010201010102020101
+02010101020a010102060101020201010201010102020101020101010201010102260100
+0200010202000100020101010201010102010101020101010201010102010101020d0101
+020101010201010102050101020201010202010102010101020101010200010102000101
+020101010201010102020101020101010202010102020101020101010202010102010101
+020101010201010102010102020401020207010102010101020201010201010102040101
+020101010201010102030101020001000204010102010101020101020203010102010101
+020401020204010202040101020101010202010102010101020401020204010102010101
+02760103020b000002030400030200000204040002770101020701010206010202080101
+0204010402020101020101010202010102010105020d0101020101010201010102010101
+02050104020101010203010102010101020101010202010102010101020a010102030104
+020201010201010102020101020101050226010002010101020001000201010102010101
+020101010201010102010105020d01010201010102010101020201040202010102020101
+020101010201010102000101020001010201010102010101020201010201010102020101
+020201010201010102020101020101010201010502020103020301030205010102010101
+020201010201010102040105020101010204010102050105020101010204010102010101
+020501030203010302020101020101010202010102010101020501030202010502760103
+020b00000204040003000000020504000277010102070101020701010208010102030101
+020101010202010102010101020201010201010102110101020101010201010102010101
+0204010102010101020101010203010102010101020101010202010102010101020a0101
+020201010201010102020101020101010202010102010101022a01000202010202010101
+020101010201010102010101020101010211010102010101020101010201010102010101
+020201010202010102010101020101010201010102000101020001010200010202020101
+020101010202010102020101020101010202010102010101020101010208010202040102
+020401010201010102020101020101010204010102050101020301000200010102040101
+020501010204010102010101020701020204010202010101020101010202010102010101
+0207010202010101027a0103020b00000204040003000000020504000277010102070101
+020301010201010102080101020301010201010102020101020101010202010102010101
+020201000201010102090101020101010201010102010101020201000200010102010101
+020101010203010102010101020101010202010102010101020a01010202010102010101
+020201010201010102020101020101010202010002260100020201020201010102010101
+020101010200010202010101020201000201010102090101020101010201010102010101
+020101010202010102020101020101010202010102070101020001010202010102000102
+020201010202010102010101020201010201010102010101020201000205010102050101
+020101010200010102000102020201010200010202010101020001010202010002010101
+020201010201010102000101020001010202010002010101020401010201010102020100
+020401010205010102010101020101010202010102010101020101010204010102010101
+0202010002760103020b0000020500000206040002770105020301010204010302090101
+020401020200010102010104020301010202010302020101020901010202010302030103
+02020102020001010201010202010101020201030203010102010101020b010202010102
+020001010201010402030101020201030227010002030101020201030203010102000101
+020201030202010102090101020101010201010102020102020001010201010102020101
+020101010203010502050101020301010200010102020101020201010201010102020101
+020101010202010302020104020201040202010102010101020001010203010102000101
+020101010201010302030102020001010201010102000101020101030202010102040101
+020201030201010402020104020301030203010102010101020101010200010402030103
+02770103020b0000020d040002fc010602a201010201010102ff022a0103020b0000020d
+040002ff02a7010302ff022b0103020b0000020d040002ff02ff02d70103020c040d02ff
+02ff02d8010302ff02ff02f3010302ff02ff02f30103020200ff00ff00ec040002020103
+0202000004ff04ff04ec0202010302ff02ff02f30103020200ff00ff00ed020201030202
+00ff00ff00ec0800020201030202000106ff06ff06e90801020201030202000106ff06ff
+06e90801020201030202000106ff06ff06e90801020201030202000106ff06ff06e90801
+020201030202000106ff06ff06e908010202010302020001060b07040604070006030702
+061f07040610070206200702060b070006060700062d0700060207000604070006ff06fa
+07000602070006090702061308010202010302020001060b0700060f0700062107000614
+0700061f070006020700060a0700063507000602070006ff06ff0600070006020700060b
+0700061308010202010302020001060b0700060607020605070006030702061a07000604
+070206030702060507000603070206180700060207000601070006000701060207040602
+070206030702060207000600070106030702061807000602070006020702060307020602
+07000602070006ff06eb07000602070006020702060507000602070006000701060c0801
+0202010302020001060b0700060807000605070006020700060207000619070006030700
+060207000601070006020700060407000602070006020700061707000602070006010701
+060107000603070006060700060207000602070006010701060107000601070006020700
+0618070006000700060507000602070006020700060107000602070006ff06eb07000602
+07000601070006020700060407000602070106010700060b08010202010302020001060b
+070306050700060507000602070006020700061907000603070006020700060107000602
+07000604070006020700061b070006020700060107000602070006030700060607000602
+070006020700060107000602070006010700061c07000600070006050700060207000602
+070006010700060007000600070006ff06eb070406010700060207000604070006020700
+06020700060b08010202010302020001060b070006080700060507000602070406190700
+060307000602070006010700060207000604070006030702061807000602070006010700
+060207000603070006060700060207000602070006010700060207000602070206190700
+06000700060507000602070406010700060007000600070006ff06eb0700060207000601
+0704060407000602070006020700060b08010202010302020001060b0700060807000605
+070006020700061d07000603070006020700060107000602070006040700060607000617
+070006020700060107000602070006030700060607000602070006020700060107000602
+07000605070006190700060607000602070006050700060007000600070006ff06eb0700
+0602070006010700060807000602070006020700060b08010202010302020001060b0700
+060807000605070006020700060207000619070006030700060207000601070006020700
+060407000602070006020700061707000602070006010701060107000603070006060700
+060207000602070006010700060207000601070006020700061907000606070006020700
+0602070006010700060007000600070006ff06eb07000602070006010700060207000604
+07000602070106010700060b08010202010302020001060b070006080700060507000603
+0702061a0700060407020603070206050700060307020619070206020700060007010605
+07010604070006030702060207000602070006020702061a070006060700060307020603
+07000600070006ff06ec07000602070006020702060507000602070006000701060c0801
+0202010302020001067d070006ff06ff06590700060f08010202010302020001060a0706
+062a07060631070606000700063d070606ff06fe0706060e0700060f0801020201030202
+0001060a0706062a07060631070606000700063d070606ff06fe0706060e0700060f0801
+020201030202000106ff06ff06e90801020201030202000106ff06ff06e9080102020103
+0202000106ff06ff06e90801020201030202000108ff08ff08eb020201030202000008ff
+08ff08ec02020103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff
+06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff
+06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202010302020603
+0016061600160616004406160016061600160616001606ff06be02020103020206030015
+080006160015080006160015080000150800001508000616001508000616001508000616
+0015080006ff06be02020103020206030001061208010616000106120801061600010612
+080100010612080100010612080106160001061208010616000106120801061600010612
+080106ff06be020201030202060300010612080106160001061208010616000106120801
+000106120801000106120801061600010612080106160001061208010616000106120801
+06ff06be0202010302020603000106120801061600010603070206030702060408010616
+000106120801000106120801000106120801061600010612080106160001061208010616
+00010612080106ff06be0202010302020603000106080702060608010616000106030702
+060307020604080106160001061208010001061208010001061208010616000106050704
+0607080106160001060707010608080106160001060707030606080106ff06be02020103
+020206030001060b0701060408010616000106020704060107040603080106160001060e
+0700060208010001060e070006020801000106020700060e080106160001060307080605
+080106160001060607030607080106160001060507070604080106ff06be020201030202
+06030001060d070006000700060108010616000106020700060107010601070006010701
+0603080106160001060e0700060208010001060e070006020801000106020700060e0801
+061600010602070a06040801061600010606070306070801061600010604070306010703
+0603080106ff06be02020103020206030001060207020608070106010801061600010601
+070d0602080106160001060b07000601070006020801000106020700060a070006020801
+00010602070006010700060b080106160001060207030602070306040801061600010607
+0701060808010616000106040702060307020603080106ff06be02020103020206030001
+060107080602070206010801061600010600070006000703060007020600070406010801
+06160001060b07000601070006020801000106020700060a070006020801000106020700
+06010700060b080106160001060107030604070306030801061600010612080106160001
+06040702060307020603080106ff06be0202010302020603000106010709060608010616
+000106000700060007030600070206000704060108010616000106080700060107000601
+070006020801000106020700060407000604070006020801000106020700060107000601
+070006080801061600010601070206030707060108010616000106050704060708010616
+000106050701060207020604080106ff06be020201030202060300010601070906060801
+061600010600070006000703060007020600070406010801061600010608070006010700
+060107000602080100010602070006040700060407000602080100010602070006010700
+060107000608080106160001060107020604070506020801061600010606070306070801
+06160001060907020605080106ff06be0202010302020603000106010709060608010616
+000106000700060007030600070206000704060108010616000106050700060107000601
+070006010700060208010001060207000604070006010700060107000602080100010602
+070006010700060107000601070006050801061600010601070206050703060308010616
+0001060707020607080106160001060807020606080106ff06be02020103020206030001
+0601070d0602080106160001060007000600070706000704060108010616000106050700
+060107000601070006010700060208010001060207000604070006010700060107000602
+080100010602070006010700060107000601070006050801061600010601070306050701
+0604080106160001060707020607080106160001060707020607080106ff06be02020103
+020206030001060107030607070006030801061600010600070006000704060107000600
+070406010801061600010602070006010700060107000601070006010700060208010001
+060207000601070006010700060107000601070006020801000106020700060107000601
+07000601070006010700060208010616000106020703060b080106160001060707020607
+080106160001060707020607080106ff06be020201030202060300010601070206070700
+060408010616000106000706060107060601080106160001060207000601070006010700
+060107000601070006020801000106020700060107000601070006010700060107000602
+080100010602070006010700060107000601070006010700060208010616000106020709
+06050801061600010607070206070801061600010612080106ff06be0202010302020603
+000106010701060707000605080106160001060007000600070206050700060007020601
+080106160001060207000601070006010700060107000601070006020801000106020700
+060107000601070006010700060107000602080100010602070006010700060107000601
+070006010700060208010616000106030707060608010616000106060704060608010616
+0001060707020607080106ff06be02020103020206030001060107090606080106160001
+060007000600070206050700060007020601080106160001060207000601070006010700
+060107000601070006020801000106020700060107000601070006010700060107000602
+080100010602070006010700060107000601070006010700060208010616000106050704
+0607080106160001060507060605080106160001060707020607080106ff06be02020103
+020206030001061208010616000106000704060507040601080106160001061208010001
+0612080100010612080106160001061208010616000106120801061600010612080106ff
+06be02020103020206030001061208010616000106120801061600010612080100010612
+080100010612080106160001061208010616000106120801061600010612080106ff06be
+020201030202060300010612080106160001061208010616000106120801000106120801
+00010612080106160001061208010616000106120801061600010612080106ff06be0202
+010302020603000108140616000108140616000108140001081400010814061600010814
+06160001081406160001081406ff06be0202010302020603000008150616000008150616
+00000815000008150000081506160000081506160000081506160000081506ff06be0202
+0103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202
+0103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202
+0103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202
+0103020206ff06ff06ed02020103020206ff06ff06ed020201030202060301ff01ff01e5
+06030202010302020603010000ff00ff00cf010000120100060302020103020206030100
+00ff00ff00cf010000110800010006030202010302020603010000ff00ff00cf01000001
+060e0801010006030202010302020603010000ff00ff00cf01000001060e080101000603
+0202010302020603010000ff00ff00cf01000001060e0801010006030202010302020603
+010000ff00ff00cf01000001060e0801010006030202010302020603010000ff00ff00cf
+01000001060e0801010006030202010302020603010000ff00ff00cf01000001060e0801
+010006030202010302020603010000ff00ff00cf01000001060e08010100060302020103
+02020603010000ff00ff00cf010000010601010a06010801010006030202010302020603
+010000ff00ff00cf010000010602010806020801010006030202010302020603010000ff
+00ff00cf010000010603010606030801010006030202010302020603010000ff00ff00cf
+010000010604010406040801010006030202010302020603010000ff00ff00cf01000001
+0605010206050801010006030202010302020603010000ff00ff00cf0100000106060100
+06060801010006030202010302020603010000ff00ff00cf01000001060e080101000603
+0202010302020603010000ff00ff00cf01000001060e0801010006030202010302020603
+010000ff00ff00cf01000001060e0801010006030202010302020603010000ff00ff00cf
+01000001060e0801010006030202010302020603010000ff00ff00cf01000001060e0801
+010006030202010302020603010000ff00ff00cf01000001060e08010100060302020103
+02020603010000ff00ff00cf01000001060e0801010006030202010302020603010000ff
+00ff00cf010000010810010006030202010302020603010000ff00ff00cf010000000811
+01000603020201030202060301ff01ff01e5060302020103020206ff06ff06ed02020103
+020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed02020103
+020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed02020103
+020206ff06ff06ed020201030202060301ff01ff01e506030202010302020603010006ff
+06ff06970100064a01000603020201030202060301000663010506ff06ff062d0100064a
+01000603020201030202060301000662010706ff06ff062c0100064a0100060302020103
+020206030100066101020603010206ff06ff062b0100064a010006030202010302020603
+0100066101010605010106ff06ff062b0100064a01000603020201030202060301000661
+01020603010206ff06ff062b0100064a01000603020201030202060301000662010706ff
+06ff062c0100064a01000603020201030202060301000663010506ff06ff062d0100064a
+01000603020201030202060301000665010106ff06ff062f0100064a0100060302020103
+0202060301000665010106ff06ff062f0100064a01000603020201030202060301000665
+010106ff06ff062f0100064a01000603020201030202060301000665010106ff06ff062f
+0100064a01000603020201030202060301000665010106ff06ff062f0100064a01000603
+020201030202060301000665010106ff06ff062f0100064a010006030202010302020603
+0100066101010600010206ff06ff062f0100064a01000603020201030202060301000661
+01010600010206ff06ff062f0100064a01000603020201030202060301000661010506ff
+06ff062f0100064a01000603020201030202060301000661010506ff06ff062f0100064a
+0100060302020103020206030100066101020600010106ff06ff062f0100064a01000603
+0202010302020603010006ff06ff06970100064a01000603020201030202060301ff01ff
+0199064a010006030202010302020603010006350b610d04005f0d04005f0d04005f0d04
+005f0d04005f0d0400010100061308120623010006030202010302020603010006350b60
+0e000d030100005e08000d030100005e08000d030100005e08000d030100005e08000d03
+0100005e08000d0301000001010006130811000006230100060302020103020206030100
+06350b010a5d0e010d0101020001065b08010d0101020001065b08010d0101020001065b
+08010d0101020001065b08010d0101020001065b08010d01010200010100061308010010
+0623010006030202010302020603010006350b010a2c01000a2f0e010d0101020001062a
+0102062d08010d0101020001062a0102062d08010d0101020001062c0100062d08010d01
+0102000106290104062c08010d0101020001062b0102062c08010d010102000101000613
+0801000d080000010623010006030202010302020603010006350b010a2a01020a2f0e01
+0d01010200010629010006020100062c08010d01010200010629010006020100062c0801
+0d0101020001062b0101062d08010d010102000106290100063008010d0101020001062a
+0100062f08010d01010200010100061308010001060a0801000106230100060302020103
+02020603010006350b010a2c01000a2f0e010d01010200010629010006020100062c0801
+0d0101020001062d0100062c08010d0101020001062a010006000100062d08010d010102
+000106290100063008010d010102000106290100063008010d0101020001010006130801
+0001060a080100010623010006030202010302020603010006350b010a2c01000a2f0e01
+0d01010200010629010006020100062c08010d0101020001062d0100062c08010d010102
+0001062a010006000100062d08010d010102000106290100063008010d01010200010629
+0100063008010d01010200010100061308010001060a0801000106230100060302020103
+02020603010006350b010a2c01000a2f0e010d0101020001062c0100062d08010d010102
+0001062b0101062d08010d01010200010629010006010100062d08010d01010200010629
+0103062d08010d010102000106290103062d08010d01010200010100061308010001060a
+080100010623010006030202010302020603010006350b010a2c01000a2f0e010d010102
+0001062b0100062e08010d0101020001062d0100062c08010d0101020001062801000602
+0100062d08010d0101020001062d0100062c08010d01010200010629010006020100062c
+08010d01010200010100061308010001060a080100010623010006030202010302020603
+010006350b010a2c01000a2f0e010d0101020001062a0100062f08010d0101020001062d
+0100062c08010d010102000106280105062c08010d0101020001062d0100062c08010d01
+010200010629010006020100062c08010d01010200010100061308010001060a08010001
+0623010006030202010302020603010006350b010a2c01000a2f0e010d01010200010629
+010006020100062c08010d01010200010629010006020100062c08010d0101020001062c
+0100062d08010d01010200010628010006030100062c08010d0101020001062901000602
+0100062c08010d01010200010100061308010001060a0801000106230100060302020103
+02020603010006350b010a2a01040a2d0e010d010102000106290104062c08010d010102
+0001062a0102062d08010d0101020001062b0102062c08010d010102000106290103062d
+08010d0101020001062a0102062d08010d01010200010100061308010001060a08010001
+0623010006030202010302020603010006350b010a5d0e010d0101020001065b08010d01
+01020001065b08010d0101020001065b08010d0101020001065b08010d0101020001065b
+08010d01010200010100061308010001060a080100010623010006030202010302020603
+010006350b010a5d0e010d0101020001065b08010d0101020001065b08010d0101020001
+065b08010d0101020001065b08010d0101020001065b08010d0101020001010006130801
+0001060a080100010623010006030202010302020603010006350b010a5d0e010d010102
+0001065b08010d0101020001065b08010d0101020001065b08010d0101020001065b0801
+0d0101020001065b08010d01010200010100060e0100060308010001060a080100010623
+010006030202010302020603010006350b010a5d0e010d0101020001065b08010d010102
+0001065b08010d0101020001065b08010d0101020001065b08010d0101020001065b0801
+0d01010200010100060d0101060308010001060a08010001062301000603020201030202
+0603010006350b010a5d0e010d0101020001065b08010d0101020001065b08010d010102
+0001065b08010d0101020001065b08010d0101020001065b08010d01010200010100060c
+010006000100060308010001080c00010623010006030202010302020603010006350b01
+0a5d0e010d0101020001065b08010d0101020001065b08010d0101020001065b08010d01
+01020001065b08010d0101020001065b08010d01010200010100060e010006030801000d
+080000010623010006030202010302020603010006350b010e5f0d0101020001085d0d01
+01020001085d0d0101020001085d0d0101020001085d0d0101020001085d0d0101020001
+0100060e0100060308010001060a08010001062301000603020201030202060301000635
+0b000e600d0001030000085e0d0001030000085e0d0001030000085e0d0001030000085e
+0d0001030000085e0d000103000008000100060e0100060308010001060a080100010623
+0100060302020103020206030100009a0100006301000063010000630100006301000063
+010000020100060e0100060308010001060a080100010623010006030202010302020603
+01000035080000630100006301000063010000630100006301000063010000020100060e
+0100060308010001060a0801000106230100060302020103020206030100000106320801
+00630100006301000063010000630100006301000063010000020100060c010406010801
+0001060a0801000106230100060302020103020206030100000106320801006301000063
+01000063010000630100006301000063010000020100061308010001060a080100010623
+010006030202010302020603010000010617010006190801006301000063010000630100
+00630100006301000063010000020100061308010001060a080100010623010006030202
+01030202060301000001061501020619080100630100000e010000530100006301000063
+0100006301000063010000020100061308010001060a0801000106230100060302020103
+0202060301000001061701000619080100630100000e0100005301000063010000630100
+006301000063010000020100061308010001060a08010001062301000603020201030202
+0603010000010617010006190801000f0102000201000000010100020100000001010003
+0102003b0100000e01000000010100020100000001010003010200020101000001000002
+01010000010000030102002d010000630100006301000063010000630100000201000613
+08010001060a080100010623010006030202010302020603010000010617010006190801
+000e010000020100000101010001010000010101000101000001010000020100003a0100
+000e01010001010000010101000101000001010000020100000101000000010000000100
+0001010000000100000001000001010000020100002c0100006301000063010000630100
+0063010000020100061308010001060a0801000106230100060302020103020206030100
+00010617010006190801001201000001010000020100000101000002010000050100003a
+0100000e0100000201000001010000050100000201000001010000000100000001000001
+0100000001000000010000050100002c0100006301000063010000630100006301000002
+0100061308010001060a0801000106230100060302020103020206030100000106170100
+06190801000f01030001010000020100000101000002010000020103003a0100000e0100
+000201000001010000050100000201000001010000000100000001000001010000000100
+0000010000020103002c0100006301000063010000630100006301000002010006130801
+0001080c00010623010006030202010302020603010000010617010006190801000e0100
+00020100000101000002010000010100000201000001010000020100003a0100000e0100
+000201000001010000050100000201000001010000000100000001000001010000000100
+000001000001010000020100002c01000063010000630100006301000063010000020100
+061308010000080d00010623010006030202010302020603010000010615010406170801
+000e010000020100000101000002010000010100000201000001010000020100003a0100
+000e01010001010000010100000501000002010000010100000001000000010000010100
+00000100000001000001010000020100002c010000630100006301000063010000630100
+00020100061308010c0e000106230100060302020103020206030100000106320801000f
+01030001010000020100000101000002010000020103003a0100000e0100000001010002
+01000006010200020100000001000000010000010100000001000000010000020103002c
+01000063010000630100006301000063010000020100061308010c0e0001062301000603
+020201030202060301000001063208010063010000630100006301000063010000630100
+0063010000020100061308010c0e00010623010006030202010302020603010000010632
+080100630100006301000063010000630100006301000063010000020100061308010c0e
+000106230100060302020103020206030100000106320801006301000063010000630100
+00630100006301000063010000020100061308010c0e0001062301000603020201030202
+060301000001063208010063010000630100006301000063010000630100006301000002
+0100061308010c0e00010623010006030202010302020603010000010632080100630100
+006301000063010000630100006301000063010000020100061308010c0e000106230100
+060302020103020206030100000108340063010000630100006301000063010000630100
+0063010000020100061308010c0e00010623010006030202010302020603010000000835
+01ff01ff0161061308010c0e000106230100060302020103020206030100009a01000063
+01000063010000630100006301000063010000020100061308010c0e0001062301000603
+020201030202060301000035080000630100006301000063010000630100006301000063
+010000020100061308010c0e000106230100060302020103020206030100000106320801
+00630100006301000063010000630100006301000063010000020100061308010c0e0001
+062301000603020201030202060301000001063208010063010000630100006301000063
+0100006301000063010000020100061308010c0e00010623010006030202010302020603
+010000010616010206180801006301000063010000630100006301000063010000630100
+00020100061308010c0e0001062301000603020201030202060301000001061501000602
+0100061708010011010100130100000b01000002010000290100002c0100000b01020003
+0102001f01000063010000630100006301000063010000020100061308010c0e00010623
+010006030202010302020603010000010615010006020100061708010010010000150100
+000f010000290100002c0100000d010000050100001f0100006301000063010000630100
+0063010000020100061308010c0e00010623010006030202010302020603010000010615
+010006020100061708010010010000030100000001010003010200030101000001000001
+01000000010100030102000201000001010000260100000e010000000101000301020002
+01000000010100020100000001010002010400010100000201000004010000050100001f
+01000063010000630100006301000063010000020100061308010c0e0001062301000603
+0202010302020603010000010618010006180801000e0104000101010001010000010100
+000201000001010000010101000101010001010000040100000201000000010000270100
+000e01010001010000010100000201000001010100010100000101010001010000030100
+00030100000201000004010000050100001f010000630100006301000063010000630100
+00020100061308010c0e0001062301000603020201030202060301000001061701000619
+080100100100000301000005010000020100000101000002010000010100000801000002
+010100280100000e01000002010000010100000201000001010000050100000701000003
+0100000201000004010000050100001f0100006301000063010000630100006301000002
+0100061308010c0e000106230100060302020103020206030100000106160100061a0801
+001001000003010000050104000101000002010000010100000801000002010100280100
+000e01000002010000010100000201000001010000050100000701000003010000020100
+0004010000050100001f0100006301000063010000630100006301000002010006130801
+0c0e00010623010006030202010302020603010000010615010006020100061708010010
+010000030100000501000005010000020100000101000008010000020100000001000027
+0100000e0100000201000001010000020100000101000005010000070100000301000002
+01000004010000050100001f010000630100006301000063010000630100000201000613
+08010c0e0001062301000603020201030202060301000001061501040617080100100100
+000301000005010000020100000101000001010100010100000801000002010000010100
+00260100000e010000020100000101000002010000010100000501000007010000030100
+000101010004010000050100001f01000063010000630100006301000063010000020100
+061308010c0e000106230100060302020103020206030100000106320801001001000003
+01000006010200030101000001000001010000080100000201000002010000250100000e
+010000020100000201020002010000050100000801010002010100000100000401000005
+0100001f01000063010000630100006301000063010000020100061308010c0e00010623
+010006030202010302020603010000010632080100630100006301000063010000630100
+006301000063010000020100061308010c0e000106230100060302020103020206030100
+000106320801006301000063010000630100006301000063010000630100000201000613
+08010c0e0001062301000603020201030202060301000001063208010063010000630100
+0063010000630100006301000063010000020100061308010c0e00010623010006030202
+010302020603010000010632080100630100006301000063010000630100006301000063
+010000020100061308010c0e000106230100060302020103020206030100000106320801
+00630100006301000063010000630100006301000063010000020100061308010c0e0001
+062301000603020201030202060301000001083400630100006301000063010000630100
+006301000063010000020100061308010c0e000106230100060302020103020206030100
+0000083501ff01ff0161061308010c0e000106230100060302020103020206030100009a
+0100006301000063010000630100006301000063010000020100061308010c0e00010623
+010006030202010302020603010000350800006301000063010000630100006301000063
+01000063010000020100061308010c0e0001062301000603020201030202060301000001
+063208010063010000630100006301000063010000630100006301000002010006130801
+0c0e00010623010006030202010302020603010000010632080100630100006301000063
+010000630100006301000063010000020100061308010c0e000106230100060302020103
+020206030100000106160102061808010063010000630100006301000063010000630100
+0063010000020100061308010c0e00010623010006030202010302020603010000010615
+01000602010006170801002601000003010200030102002d010000160102004901000063
+010000630100006301000063010000020100061308010c0e000106230100060302020103
+02020603010000010619010006170801002d010000050100002d01000018010000490100
+0063010000630100006301000063010000020100061308010c0e00010623010006030202
+010302020603010000010619010006170801000f01010000010000010100000201000001
+0100000001010003010200050100000501000003010200260100000f0102000501000002
+010000020100000201020003010200030102000201000000010100260100006301000063
+0100006301000063010000020100061308010c0e00010623010006030202010302020603
+010000010617010106180801000e01000001010100010100000201000001010100010100
+000401000005010000050100000201000002010000250100000e01000002010000040100
+000201000002010000010100000201000001010000020100000101000002010000010101
+00010100002501000063010000630100006301000063010000020100061308010c0e0001
+0623010006030202010302020603010000010619010006170801000e0100000201000001
+01000002010000010100000201000004010000050100000501000006010000250100000e
+010000080100000201000002010000010100000501000005010000020100000101000002
+0100002501000063010000630100006301000063010000020100061308010c0e00010623
+010006030202010302020603010000010619010006170801000e01000002010000010100
+0002010000010100000201000004010000050100000501000003010300250100000f0102
+000501000002010000020100000201020003010200020104000101000002010000250100
+0063010000630100006301000063010000020100061308010c0e00010623010006030202
+01030202060301000001061501000602010006170801000e010000020100000101000002
+010000010100000201000004010000050100000501000002010000020100002501000012
+010000040100000201000002010000050100000501000001010000050100000201000025
+01000063010000630100006301000063010000020100061308010c0e0001062301000603
+0202010302020603010000010616010206180801000e0100000101010001010000010101
+0001010000020100000401000005010000050100000201000002010000250100000e0100
+000201000004010000020100000101010001010000020100000101000002010000010100
+000201000001010000020100002501000063010000630100006301000063010000020100
+061308010c0e000106230100060302020103020206030100000106320801000f01010000
+010000020101000001000001010000020100000401000005010000050100000301030025
+0100000f0102000501000003010100000100000201020003010200030102000201000002
+0100002501000063010000630100006301000063010000020100061308010c0e00010623
+010006030202010302020603010000010632080100120100004f01000063010000630100
+00630100006301000063010000020100061308010c0e0001062301000603020201030202
+06030100000106320801000e010000020100004f01000063010000630100006301000063
+01000063010000020100061308010c0e0001062301000603020201030202060301000001
+06320801000f010200500100006301000063010000630100006301000063010000020100
+061308010c0e000106230100060302020103020206030100000106320801006301000063
+01000063010000630100006301000063010000020100061308010c0e0001062301000603
+020201030202060301000001063208010063010000630100006301000063010000630100
+0063010000020100061308010c0e00010623010006030202010302020603010000010834
+00630100006301000063010000630100006301000063010000020100061308010c0e0001
+062301000603020201030202060301000000083501ff01ff0161061308010c0e00010623
+0100060302020103020206030100009a0100006301000063010000630100006301000063
+010000020100061308010c0e000106230100060302020103020206030100003508000063
+0100006301000063010000630100006301000063010000020100061308010c0e00010623
+010006030202010302020603010000010632080100630100006301000063010000630100
+006301000063010000020100061308010c0e000106230100060302020103020206030100
+000106320801006301000063010000630100006301000063010000630100000201000613
+08010c0e0001062301000603020201030202060301000001061801000618080100630100
+006301000063010000630100006301000063010000020100061308010c0e000106230100
+0603020201030202060301000001061701010618080100110100001a010100040100002d
+010000160102000c01000002010000370100006301000063010000630100006301000002
+0100061308010c0e00010623010006030202010302020603010000010616010006000100
+06180801002c010000350100001801000010010000370100006301000063010000630100
+0063010000020100061308010c0e00010623010006030202010302020603010000010616
+01000600010006180801000f010200030102000301020003010200040100000401020002
+01000000010100030102001f0100000f0102000501000002010000020100000201020002
+010000010100003401000063010000630100006301000063010000020100061308010c0e
+000106230100060302020103020206030100000106150100060101000618080100110100
+000201000002010000010100000201000001010000020100000101040004010000020101
+000101000001010000020100001e0100000e010000020100000401000002010000020100
+000401000002010000000100003501000063010000630100006301000063010000020100
+061308010c0e000106230100060302020103020206030100000106140100060201000618
+080100110100000201000002010000010100000501000002010000030100000601000002
+0100000201000001010000020100001e0100001201000004010000020100000201000004
+010000020101003601000063010000630100006301000063010000020100061308010c0e
+000106230100060302020103020206030100000106140105061708010011010000020100
+0002010000020102000201040003010000060100000201000002010000010104001e0100
+000f01030004010000030100000001000005010000020101003601000063010000630100
+006301000063010000020100061308010c0e000106230100060302020103020206030100
+000106180100061808010011010000020100000201000005010000010100000701000006
+010000020100000201000001010000220100000e01000002010000040100000301000000
+010000050100000201000000010000350100006301000063010000630100006301000002
+0100061308010c0e00010623010006030202010302020603010000010617010206170801
+001101000002010000020100000101000002010000010100000201000003010000060100
+00020100000201000001010000020100001e0100000e0100000201000004010000040100
+000601000002010000010100003401000063010000630100006301000063010000020100
+061308010c0e000106230100060302020103020206030100000106320801001101000003
+010200030102000301020004010000060100000201000002010000020102001f0100000f
+010300040100000401000006010000020100000201000033010000630100006301000063
+01000063010000020100061308010c0e0001062301000603020201030202060301000001
+063208010011010000500100006301000063010000630100006301000063010000020100
+061308010c0e000106230100060302020103020206030100000106320801000e01000001
+010000500100006301000063010000630100006301000063010000020100061308010c0e
+000106230100060302020103020206030100000106320801000f01010051010000630100
+0063010000630100006301000063010000020100061308010c0e00010623010006030202
+010302020603010000010632080100630100006301000063010000630100006301000063
+010000020100061308010c0e000106230100060302020103020206030100000106320801
+00630100006301000063010000630100006301000063010000020100061308010c0e0001
+062301000603020201030202060301000001083400630100006301000063010000630100
+006301000063010000020100061308010c0e000106230100060302020103020206030100
+0000083501ff01ff0161061308010c0e0001062301000603020201030202060301000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+00630100006301000063010000630100006301000063010000020100061308010c0e0001
+062301000603020201030202060301000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000000050000000500000005000000050000000500
+000005000000050000000500000005000100006301000063010000630100006301000063
+01000063010000020100061308010c0e0001062301000603020201030202060301000500
+000005320100050000630100006301000063010000630100006301000063010000020100
+061308010c0e000106230100060302020103020206030100000005340100006301000063
+01000063010000630100006301000063010000020100061308010c0e0001062301000603
+020201030202060301000500000005150104051701000500006301000063010000630100
+00630100006301000063010000020100061308010c0e0001062301000603020201030202
+06030100000005160100051c0100000e010000160100003b0100000e0100000601020010
+0100000c0100002901000063010000630100006301000063010000020100061308010c0e
+0001062301000603020201030202060301000500000005150100051b01000500000e0100
+00530100000e01000008010000100100000c010000290100006301000063010000630100
+0063010000020100061308010c0e00010623010006030202010302020603010000000516
+0100051c0100000e01000001010000030102000201000000010100030102000201000000
+010100340100000e01000000010100050100000301020003010200020100000101000003
+010200020100000001010003010200020100000001010003010100000100001001000063
+010000630100006301000063010000020100061308010c0e000106230100060302020103
+0202060301000500000005150103051801000500000e0100000001000003010000020100
+000101010001010000040100000201010001010000330100000e01010001010000040100
+000201000002010000010100000201000001010000000100000301000002010000010101
+000101000001010000020100000101010001010000010100000101010010010000630100
+00630100006301000063010000020100061308010c0e0001062301000603020201030202
+060301000000051a010005180100000e0101000801000001010000080100000201000002
+010000330100000e01000002010000040100000601000001010000050101000401000002
+010000010100000201000001010000020100000101000005010000020100001001000063
+010000630100006301000063010000020100061308010c0e000106230100060302020103
+0202060301000500000005190100051701000500000e0101000501030001010000080100
+000201000002010000330100000e01000002010000040100000301030001010000050101
+000401040001010000020100000101040001010000050100000201000010010000630100
+00630100006301000063010000020100061308010c0e0001062301000603020201030202
+060301000000051501000503010005180100000e01000000010000030100000201000001
+010000080100000201000002010000330100000e01000002010000040100000201000002
+010000010100000501000000010000030100000501000002010000010100000501000005
+010000020100001001000063010000630100006301000063010000020100061308010c0e
+0001062301000603020201030202060301000500000005150103051801000500000e0100
+0001010000020100000201000001010000080100000201000002010000330100000e0101
+000101000004010000020100000201000001010000020100000101000001010000020100
+000201000001010100010100000101000002010000010100000501000001010100100100
+0063010000630100006301000063010000020100061308010c0e00010623010006030202
+0103020206030100000005340100000e0100000201000002010300010100000801000002
+01000002010000330100000e010000000101000501000003010300020102000201000002
+010000020102000201000000010100030102000201000006010100000100001001000063
+010000630100006301000063010000020100061308010c0e000106230100060302020103
+020206030100050000000532010005000063010000510100001001000063010000630100
+006301000063010000020100061308010c0e000106230100060302020103020206030100
+00000534010000630100004d010000020100001001000063010000630100006301000063
+010000020100061308010c0e000106230100060302020103020206030100050000000532
+0100050000630100004e0102001101000063010000630100006301000063010000020100
+061308010c0e000106230100060302020103020206030100000005340100006301000063
+01000063010000630100006301000063010000020100061308010c0e0001062301000603
+020201030202060301000500000005320100050000630100006301000063010000630100
+006301000063010000020100061308010c0e000106230100060302020103020206030100
+000005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010000630100006301000063010000630100006301000063010000020100061308010c0e
+000106230100060302020103020206030100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001000500010005000100050001000500
+010005000100050001000500010005000100050001ff01ff0161061308010c0e00010623
+01000603020201030202060301000d360063010000630100006301000063010000630100
+0063010000020100061308010c0e0001062301000603020201030202060301000d350100
+00630100006301000063010000630100006301000063010000020100061308010c0e0001
+062301000603020201030202060301000d01013400630100006301000063010000630100
+006301000063010000020100061308010c0e000106230100060302020103020206030100
+0d0101340063010000630100006301000063010000630100006301000002010006130801
+0c0e0001062301000603020201030202060301000d010117000201190063010000630100
+0063010000630100006301000063010000020100061308010c0e00010623010006030202
+01030202060301000d0101160000011c000e0100000e010000140100002d010000320102
+002d01000063010000630100006301000063010000020100061308010c0e000106230100
+0603020201030202060301000d0101150000011d000e0100000e01000043010000340100
+002d01000063010000630100006301000063010000020100061308010c0e000106230100
+0603020201030202060301000d0101150000011d000e0100000101000003010200020104
+00020102000201000000010100030102000201000000010100030102001f0100000e0100
+000201000001010000000101000201000000010100030102000301020005010000030102
+002601000063010000630100006301000063010000020100061308010c0e000106230100
+0603020201030202060301000d0101150003011a000e0100000001000003010000020100
+000301000003010000020100000101010001010000040100000201010001010000010100
+00020100001e0100000e0100000201000001010100010100000101010001010000010100
+000201000001010000020100000401000002010000020100002501000063010000630100
+006301000063010000020100061308010c0e000106230100060302020103020206030100
+0d0101150000010200000119000e01010008010000030100000701000001010000080100
+000201000002010000050100001e0100000e010000020100000101000002010000010100
+000201000001010000090100000401000006010000250100006301000063010000630100
+0063010000020100061308010c0e0001062301000603020201030202060301000d010115
+0000010200000119000e0101000501030003010000040103000101000008010000020100
+0002010000020103001e0100000e01000002010000010100000201000001010000020100
+000201020003010300040100000301030025010000630100006301000063010000630100
+00020100061308010c0e0001062301000603020201030202060301000d01011500000102
+00000119000e010000000100000301000002010000030100000301000002010000010100
+0008010000020100000201000001010000020100001e0100000e01000002010000010100
+000201000001010000020100000501000001010000020100000401000002010000020100
+002501000063010000630100006301000063010000020100061308010c0e000106230100
+0603020201030202060301000d0101160002011a000e0100000101000002010000020100
+000301000003010000020100000101000008010000020100000201000001010000020100
+001e0100000e010000010101000101010001010000010101000101000001010000020100
+000101000002010000040100000201000002010000250100006301000063010000630100
+0063010000020100061308010c0e0001062301000603020201030202060301000d010134
+000e01000002010000020103000401010002010300010100000801000002010000020100
+00020103001e0100000f0101000001000001010000000101000201000000010100030102
+000301030004010000030103002501000063010000630100006301000063010000020100
+061308010c0e0001062301000603020201030202060301000d0101340063010000150100
+00050100004501000063010000630100006301000063010000020100061308010c0e0001
+062301000603020201030202060301000d01013400630100001501000005010000450100
+0063010000630100006301000063010000020100061308010c0e00010623010006030202
+01030202060301000d010134006301000015010000050100004501000063010000630100
+006301000063010000020100061308010c0e000106230100060302020103020206030100
+0d0101340063010000630100006301000063010000630100006301000002010006130801
+0c0e0001062301000603020201030202060301000d010134006301000063010000630100
+00630100006301000063010000020100061308010c0e0001062301000603020201030202
+060301000d01013400630100006301000063010000630100006301000063010000020100
+061308010c0e0001062301000603020201030202060301000d0001ff01ff019706130801
+0c0e000106230100060302020103020206030100009a0100006301000063010000630100
+006301000063010000020100061308010c0e000106230100060302020103020206030100
+003508000063010000630100006301000063010000630100006301000002010006130801
+0c0e00010623010006030202010302020603010000010632080100630100006301000063
+010000630100006301000063010000020100061308010c0e000106230100060302020103
+020206030100000106320801006301000063010000630100006301000063010000630100
+00020100061308010c0e0001062301000603020201030202060301000001061501040617
+080100630100006301000063010000630100006301000063010000020100061308010c0e
+000106230100060302020103020206030100000106150100060201000617080100260100
+003b01000019010000170102002d01000063010000630100006301000063010000020100
+061308010c0e000106230100060302020103020206030100000106180100061808010063
+01000019010000190100002d010000630100006301000063010000630100000201000613
+08010c0e00010623010006030202010302020603010000010618010006180801000e0101
+00000100000301020002010000000101000301020003010200340100000f010200030101
+000001000002010200020100000001010002010000000101000501000003010200020100
+00000101001f01000063010000630100006301000063010000020100061308010c0e0001
+0623010006030202010302020603010000010618010006180801000e0100000001000000
+01000001010000020100000101010001010000040100000201000002010000330100000e
+010000020100000101000001010100010100000201000001010100010100000101010001
+01000004010000020100000201000001010100010100001e010000630100006301000063
+01000063010000020100061308010c0e0001062301000603020201030202060301000001
+0618010006180801000e0100000001000000010000050100000101000008010000060100
+00330100000e010000020100000101000002010000010100000201000001010000020100
+000101000002010000040100000601000001010000020100001e01000063010000630100
+006301000063010000020100061308010c0e000106230100060302020103020206030100
+00010617010006190801000e010000000100000001000002010300010100000801000003
+010300330100000e01000002010000010100000201000001010400010100000201000001
+01000002010000040100000301030001010000020100001e010000630100006301000063
+01000063010000020100061308010c0e0001062301000603020201030202060301000001
+0617010006190801000e0100000001000000010000010100000201000001010000080100
+000201000002010000330100000e01000002010000010100000201000001010000050100
+0002010000010100000201000004010000020100000201000001010000020100001e0100
+0063010000630100006301000063010000020100061308010c0e00010623010006030202
+010302020603010000010617010006190801000e01000000010000000100000101000002
+01000001010000080100000201000002010000330100000e010000020100000101000001
+010100010100000201000001010000020100000101010001010000040100000201000002
+01000001010000020100001e010000630100006301000063010000630100000201000613
+08010c0e000106230100060302020103020206030100000106320801000e010000000100
+000001000002010300010100000801000003010300330100000f01020003010100000100
+000201020002010000020100000101000000010100050100000301030001010000020100
+001e01000063010000630100006301000063010000020100061308010c0e000106230100
+06030202010302020603010000010632080100630100002a010000370100006301000063
+0100006301000063010000020100061308010c0e00010623010006030202010302020603
+010000010632080100630100002a01000037010000630100006301000063010000630100
+00020100061308010c0e0001062301000603020201030202060301000001063208010063
+0100002a0100003701000063010000630100006301000063010000020100061308010c0e
+000106230100060302020103020206030100000106320801006301000063010000630100
+00630100006301000063010000020100061308010c0e0001062301000603020201030202
+060301000001063208010063010000630100006301000063010000630100006301000002
+0100061308010c0e00010623010006030202010302020603010000010834006301000063
+01000063010000630100006301000063010000020100061308010c0e0001062301000603
+020201030202060301000000083501ff01ff0161061308010c0e00010623010006030202
+010302020603010005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000063010000630100006301000063010000630100006301000002
+0100061308010c0e00010623010006030202010302020603010000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050000000500000005000000
+050000000500000005000000050000000500000005000000050001000063010000630100
+0063010000630100006301000063010000020100061308010c0e00010623010006030202
+010302020603010005000000053201000500006301000063010000630100006301000063
+01000063010000020100061308010c0e0001062301000603020201030202060301000000
+053401000063010000630100006301000063010000630100006301000002010006130801
+0c0e00010623010006030202010302020603010005000000051601020518010005000063
+0100006301000063010000630100006301000063010000020100061308010c0e00010623
+01000603020201030202060301000000051601000502010005180100001e010000430100
+000e01000006010200100100000c01000029010000630100006301000063010000630100
+00020100061308010c0e0001062301000603020201030202060301000500000005150100
+05020100051701000500001e010000430100000e01000008010000100100000c01000029
+01000063010000630100006301000063010000020100061308010c0e0001062301000603
+020201030202060301000000051601000502010005180100000e01010000010000030102
+0002010400020102003b0100000e01000000010100050100000301020003010200020100
+000101000003010200020100000001010003010200020100000001010003010100000100
+001001000063010000630100006301000063010000020100061308010c0e000106230100
+0603020201030202060301000500000005160102051801000500000e0100000001000000
+01000001010000020100000301000003010000020100003a0100000e0101000101000004
+010000020100000201000001010000020100000101000000010000030100000201000001
+010100010100000101000002010000010101000101000001010000010101001001000063
+010000630100006301000063010000020100061308010c0e000106230100060302020103
+0202060301000000051601000502010005180100000e0100000001000000010000050100
+0003010000030100003e0100000e01000002010000040100000601000001010000050101
+000401000002010000010100000201000001010000020100000101000005010000020100
+001001000063010000630100006301000063010000020100061308010c0e000106230100
+060302020103020206030100050000000515010005020100051701000500000e01000000
+010000000100000201030003010000040102003b0100000e010000020100000401000003
+010300010100000501010004010400010100000201000001010400010100000501000002
+0100001001000063010000630100006301000063010000020100061308010c0e00010623
+01000603020201030202060301000000051601000502010005180100000e010000000100
+0000010000010100000201000003010000070100003a0100000e01000002010000040100
+000201000002010000010100000501000000010000030100000501000002010000010100
+000501000005010000020100001001000063010000630100006301000063010000020100
+061308010c0e000106230100060302020103020206030100050000000516010205180100
+0500000e010000000100000001000001010000020100000301000003010000020100003a
+0100000e0101000101000004010000020100000201000001010000020100000101000001
+010000020100000201000001010100010100000101000002010000010100000501000001
+0101001001000063010000630100006301000063010000020100061308010c0e00010623
+0100060302020103020206030100000005340100000e0100000001000000010000020103
+0004010100020102003b0100000e01000000010100050100000301030002010200020100
+000201000002010200020100000001010003010200020100000601010000010000100100
+0063010000630100006301000063010000020100061308010c0e00010623010006030202
+010302020603010005000000053201000500006301000051010000100100006301000063
+0100006301000063010000020100061308010c0e00010623010006030202010302020603
+010000000534010000630100004d01000002010000100100006301000063010000630100
+0063010000020100061308010c0e00010623010006030202010302020603010005000000
+05320100050000630100004e010200110100006301000063010000630100006301000002
+0100061308010c0e00010623010006030202010302020603010000000534010000630100
+006301000063010000630100006301000063010000020100061308010c0e000106230100
+060302020103020206030100050000000532010005000063010000630100006301000063
+0100006301000063010000020100061308010c0e00010623010006030202010302020603
+010000000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000063010000630100006301000063010000630100006301000002010006130801
+0c0e00010623010006030202010302020603010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+050001000500010005000100050001000500010005000100050001000500010005000100
+0500010005000100050001000500010005000100050001ff01ff0161061308010c0e0001
+06230100060302020103020206030100009a010000630100006301000063010000630100
+0063010000020100061308010c0e00010623010006030202010302020603010000350800
+00630100006301000063010000630100006301000063010000020100061308010c0e0001
+062301000603020201030202060301000001063208010063010000630100006301000063
+0100006301000063010000020100061308010c0e00010623010006030202010302020603
+010000010632080100630100006301000063010000630100006301000063010000020100
+061308010c0e000106230100060302020103020206030100000106160102061808010063
+0100006301000063010000630100006301000063010000020100061308010c0e00010623
+010006030202010302020603010000010615010006020100061708010016010200030102
+00420100000e010000230100000b01020003010200180100006301000063010000630100
+0063010000020100061308010c0e00010623010006030202010302020603010000010615
+01000602010006170801001801000005010000420100000e010000230100000d01000005
+0100001801000063010000630100006301000063010000020100061308010c0e00010623
+01000603020201030202060301000001061501000602010006170801000f010200050100
+0005010000030102003b0100000e01000000010100030102000201000000010100020100
+000001010003010200020104000101000002010000040100000501000018010000630100
+00630100006301000063010000020100061308010c0e0001062301000603020201030202
+060301000001061501000602010006170801000e01000002010000040100000501000002
+010000020100003a0100000e010100010100000101000002010000010101000101000001
+010100010100000101000002010000030100000301000002010000040100000501000018
+01000063010000630100006301000063010000020100061308010c0e0001062301000603
+0202010302020603010000010616010306170801000e0100000201000004010000050100
+0002010000020100003a0100000e01000002010000010100000201000001010000050100
+000201000001010000070100000301000002010000040100000501000018010000630100
+00630100006301000063010000020100061308010c0e0001062301000603020201030202
+0603010000010619010006170801000e010000020100000401000005010000020104003a
+0100000e0100000201000001010000020100000101000005010000020100000201020004
+010000030100000201000004010000050100001801000063010000630100006301000063
+010000020100061308010c0e000106230100060302020103020206030100000106180100
+06180801000e010000020100000401000005010000020100003e0100000e010000020100
+000101000002010000010100000501000002010000050100000301000003010000020100
+000401000005010000180100006301000063010000630100006301000002010006130801
+0c0e00010623010006030202010302020603010000010615010206190801000e01000002
+010000040100000501000002010000020100003a0100000e010000020100000101000002
+010000010100000501000002010000010100000201000003010000030100000101010004
+010000050100001801000063010000630100006301000063010000020100061308010c0e
+000106230100060302020103020206030100000106320801000f01020005010000050100
+00030102003b0100000e0100000201000002010200020100000501000002010000020102
+000501010002010100000100000401000005010000180100006301000063010000630100
+0063010000020100061308010c0e00010623010006030202010302020603010000010632
+080100630100006301000063010000630100006301000063010000020100061308010c0e
+000106230100060302020103020206030100000106320801006301000063010000630100
+00630100006301000063010000020100061308010c0e0001062301000603020201030202
+060301000001063208010063010000630100006301000063010000630100006301000002
+0100061308010c0e00010623010006030202010302020603010000010632080100630100
+006301000063010000630100006301000063010000020100061308010c0e000106230100
+060302020103020206030100000106320801006301000063010000630100006301000063
+01000063010000020100061308010c0e0001062301000603020201030202060301000001
+083400630100006301000063010000630100006301000063010000020100061308010c0e
+0001062301000603020201030202060301000000083501ff01ff0161061308010c0e0001
+062301000603020201030202060301000900000009000000090000000900000009000000
+090000000900000009000000090000000900000009000000090000000900000009000000
+090000000900000009000000090000000900000009000000090000000900000009000000
+090000000900000009000000090000000900006301000063010000630100006301000063
+01000063010000020100061308010c0e0001062301000603020201030202060301000000
+090000000900000009000000090000000900000009000000090000000900000009000000
+090000000900000009000000090000000900000009000000090000000900000009000000
+090000000900000009000000090000000900000009000000090000000900000009000100
+00630100006301000063010000630100006301000063010000020100061308010c0e0001
+062301000603020201030202060301000900000009320100090000630100006301000063
+010000630100006301000063010000020100061308010c0e000106230100060302020103
+020206030100000009340100006301000063010000630100006301000063010000630100
+00020100061308010c0e0001062301000603020201030202060301000900000009130100
+090401020915010009000063010000630100006301000063010000630100006301000002
+0100061308010c0e00010623010006030202010302020603010000000912010209030100
+090201000915010000630100001701000020010200260100006301000063010000630100
+0063010000020100061308010c0e00010623010006030202010302020603010009000000
+091301000903010009020100091401000900006301000017010000220100002601000063
+010000630100006301000063010000020100061308010c0e000106230100060302020103
+020206030100000009140100090301000902010009150100000e01000000010100030102
+000201000000010100420100000f01020002010400010100000201000001010000000101
+000301020002010000000101000501000003010200020100000001010018010000630100
+00630100006301000063010000020100061308010c0e0001062301000603020201030202
+0603010009000000091301000903010009020100091401000900000e0101000101000001
+010000020100000101010001010000410100000e01000002010000030100000301000002
+010000010101000101000001010000020100000101010001010000040100000201000002
+010000010101000101000017010000630100006301000063010000630100000201000613
+08010c0e0001062301000603020201030202060301000000091401000903010009020100
+09150100000e01000002010000010100000201000001010000450100000e010000070100
+000301000002010000010100000501000002010000010100000201000004010000060100
+000101000002010000170100006301000063010000630100006301000002010006130801
+0c0e00010623010006030202010302020603010009000000091301000903010009020100
+091401000900000e010000020100000101040001010000450100000f0102000401000003
+010000020100000101000005010400010100000201000004010000030103000101000002
+0100001701000063010000630100006301000063010000020100061308010c0e00010623
+0100060302020103020206030100000009140100090301000902010009150100000e0100
+000201000001010000050100004501000012010000030100000301000002010000010100
+000501000005010000020100000401000002010000020100000101000002010000170100
+0063010000630100006301000063010000020100061308010c0e00010623010006030202
+0103020206030100090000000911010409020102091501000900000e0101000101000001
+0100000201000001010000450100000e0100000201000003010000030100000101010001
+010000050100000201000001010100010100000401000002010000020100000101000002
+0100001701000063010000630100006301000063010000020100061308010c0e00010623
+0100060302020103020206030100000009340100000e0100000001010003010200020100
+00450100000f010200050101000201010000010000010100000601020002010000000101
+000501000003010300010100000201000017010000630100006301000063010000630100
+00020100061308010c0e0001062301000603020201030202060301000900000009320100
+0900000e0100005301000031010000300100006301000063010000630100006301000002
+0100061308010c0e000106230100060302020103020206030100000009340100000e0100
+005301000031010000300100006301000063010000630100006301000002010006130801
+0c0e00010623010006030202010302020603010009000000093201000900000e01000053
+010000310100003001000063010000630100006301000063010000020100061308010c0e
+000106230100060302020103020206030100000009340100006301000063010000630100
+00630100006301000063010000020100061308010c0e0001062301000603020201030202
+060301000900000009320100090000630100006301000063010000630100006301000063
+010000020100061308010c0e000106230100060302020103020206030100000009000100
+090001000900010009000100090001000900010009000100090001000900010009000100
+090001000900010009000100090001000900010009000100090001000900010009000100
+090001000900010009000100090001000900010009000100090001000900010000630100
+006301000063010000630100006301000063010000020100061308010c0e000106230100
+060302020103020206030100090001000900010009000100090001000900010009000100
+090001000900010009000100090001000900010009000100090001000900010009000100
+090001000900010009000100090001000900010009000100090001000900010009000100
+090001000900010009000100090001ff01ff0161061308010c0e00010623010006030202
+0103020206030100009a0100006301000063010000630100006301000063010000020100
+061308010c0e000106230100060302020103020206030100003508000063010000630100
+0063010000630100006301000063010000020100061308010c0e00010623010006030202
+010302020603010000010632080100630100006301000063010000630100006301000063
+010000020100061308010c0e000106230100060302020103020206030100000106320801
+00630100006301000063010000630100006301000063010000020100061308010c0e0001
+062301000603020201030202060301000001061301000605010006160801006301000063
+01000063010000630100006301000063010000020100061308010c0e0001062301000603
+020201030202060301000001061101020603010206160801001701000006010000420100
+00150100001c0100000b0102000301020018010000630100006301000063010000630100
+00020100061308010c0e0001062301000603020201030202060301000001061301000605
+01000616080100170100004a010000150100001c0100000d010000050100001801000063
+010000630100006301000063010000020100061308010c0e000106230100060302020103
+0202060301000001061301000605010006160801000f0102000201040002010200020100
+000001010003010200340100000f01020002010000010100000301020002010000000101
+000301020002010400010100000201000004010000050100001801000063010000630100
+006301000063010000020100061308010c0e000106230100060302020103020206030100
+0001061301000605010006160801000e0100000201000003010000060100000201010001
+0100000101000002010000330100000e0100000201000001010000000100000301000002
+010000010101000101000001010000020100000301000003010000020100000401000005
+0100001801000063010000630100006301000063010000020100061308010c0e00010623
+01000603020201030202060301000001061301000605010006160801000e010000070100
+0006010000020100000201000005010000330100000e0100000501010008010000010100
+000201000001010000070100000301000002010000040100000501000018010000630100
+00630100006301000063010000020100061308010c0e0001062301000603020201030202
+060301000001061301000605010006160801000f01020004010000060100000201000002
+01000002010300330100000f010200020101000501030001010000020100000201020004
+010000030100000201000004010000050100001801000063010000630100006301000063
+010000020100061308010c0e000106230100060302020103020206030100000106130100
+060501000616080100120100000301000006010000020100000201000001010000020100
+003301000012010000010100000001000003010000020100000101000002010000050100
+000301000003010000020100000401000005010000180100006301000063010000630100
+0063010000020100061308010c0e00010623010006030202010302020603010000010611
+01040601010406140801000e010000020100000301000006010000020100000201000001
+01000002010000330100000e010000020100000101000001010000020100000201000001
+010000020100000101000002010000030100000301000001010100040100000501000018
+01000063010000630100006301000063010000020100061308010c0e0001062301000603
+02020103020206030100000106320801000f010200050101000401000002010000020100
+0002010300330100000f0102000201000002010000020103000101000002010000020102
+000501010002010100000100000401000005010000180100006301000063010000630100
+0063010000020100061308010c0e00010623010006030202010302020603010000010632
+080100630100006301000063010000630100006301000063010000020100061308010c0e
+000106230100060302020103020206030100000106320801006301000063010000630100
+00630100006301000063010000020100061308010c0e0001062301000603020201030202
+060301000001063208010063010000630100006301000063010000630100006301000002
+0100061308010c0e00010623010006030202010302020603010000010632080100630100
+006301000063010000630100006301000063010000020100061308010c0e000106230100
+060302020103020206030100000106320801006301000063010000630100006301000063
+01000063010000020100061308010c0e0001062301000603020201030202060301000001
+083400630100006301000063010000630100006301000063010000020100061308010c0e
+0001062301000603020201030202060301000000083501ff01ff0161061308010c0e0001
+06230100060302020103020206030100009a010000630100006301000063010000630100
+0063010000020100061308010c0e00010623010006030202010302020603010000350800
+00630100006301000063010000630100006301000063010000020100061308010c0e0001
+062301000603020201030202060301000001063208010063010000630100006301000063
+0100006301000063010000020100061308010c0e00010623010006030202010302020603
+010000010632080100630100006301000063010000630100006301000063010000020100
+061308010c0e000106230100060302020103020206030100000106130100060401020615
+080100630100006301000063010000630100006301000063010000020100061308010c0e
+000106230100060302020103020206030100000106110102060301000602010006140801
+00630100006301000063010000630100006301000063010000020100061308010c0e0001
+062301000603020201030202060301000001061301000603010006020100061408010063
+0100006301000063010000630100006301000063010000020100061308010c0e00010623
+010006030202010302020603010000010613010006030100060201000614080100630100
+006301000063010000630100006301000063010000020100061308010c0e000106230100
+060302020103020206030100000106130100060601000615080100630100006301000063
+010000630100006301000063010000020100061308010c0e000106230100060302020103
+020206030100000106130100060501000616080100630100006301000063010000630100
+006301000063010000020100061308010c0e000106230100060302020103020206030100
+000106130100060401000617080100630100006301000063010000630100006301000063
+010000020100061308010c0e000106230100060302020103020206030100000106130100
+060301000602010006140801006301000063010000630100006301000063010000630100
+00020100061308010c0e0001062301000603020201030202060301000001061101040601
+010406140801006301000063010000630100006301000063010000630100000201000613
+08010c0e0001062301000603020201030202060301000001063208010063010000630100
+0063010000630100006301000063010000020100061308010c0e00010623010006030202
+010302020603010000010632080100630100006301000063010000630100006301000063
+010000020100061308010c0e000106230100060302020103020206030100000106320801
+00630100006301000063010000630100006301000063010000020100061308010c0e0001
+062301000603020201030202060301000001063208010063010000630100006301000063
+0100006301000063010000020100061308010c0e00010623010006030202010302020603
+010000010632080100630100006301000063010000630100006301000063010000020100
+061308010c0e000106230100060302020103020206030100000106320801006301000063
+01000063010000630100006301000063010000020100061308010c0e0001062301000603
+020201030202060301000001083400630100006301000063010000630100006301000063
+010000020100061308010c0e0001062301000603020201030202060301000000083501ff
+01ff0161061308010c0e000106230100060302020103020206030100009a010000630100
+0063010000630100006301000063010000020100061308010c0e00010623010006030202
+010302020603010000350800006301000063010000630100006301000063010000630100
+00020100061308010c0e0001062301000603020201030202060301000001063208010063
+0100006301000063010000630100006301000063010000020100061308010c0e00010623
+010006030202010302020603010000010632080100630100006301000063010000630100
+006301000063010000020100061308010c0e000106230100060302020103020206030100
+000106130100060401020615080100630100006301000063010000630100006301000063
+010000020100061308010c0e000106230100060302020103020206030100000106110102
+060301000602010006140801006301000063010000630100006301000063010000630100
+00020100061308010c0e0001062301000603020201030202060301000001061301000607
+010006140801006301000063010000630100006301000063010000630100000201000613
+08010c0e0001062301000603020201030202060301000001061301000607010006140801
+00630100006301000063010000630100006301000063010000020100061308010c0e0001
+062301000603020201030202060301000001061301000605010106150801006301000063
+01000063010000630100006301000063010000020100061308010c0e0001062301000603
+020201030202060301000001061301000607010006140801006301000063010000630100
+00630100006301000063010000020100061308010c0e0001062301000603020201030202
+060301000001061301000607010006140801006301000063010000630100006301000063
+01000063010000020100061308010c0e0001062301000603020201030202060301000001
+061301000603010006020100061408010063010000630100006301000063010000630100
+0063010000020100061308010c0e00010623010006030202010302020603010000010611
+010406020102061508010063010000630100006301000063010000630100006301000002
+0100061308010c0e00010623010006030202010302020603010000010632080100630100
+006301000063010000630100006301000063010000020100061308010c0e000106230100
+060302020103020206030100000106320801006301000063010000630100006301000063
+01000063010000020100061308010c0e0001062301000603020201030202060301000001
+063208010063010000630100006301000063010000630100006301000002010006130801
+0c0e00010623010006030202010302020603010000010632080100630100006301000063
+010000630100006301000063010000020100061308010c0e000106230100060302020103
+020206030100000106320801006301000063010000630100006301000063010000630100
+00020100061308010c0e0001062301000603020201030202060301000001063208010063
+0100006301000063010000630100006301000063010000020100061308010c0e00010623
+010006030202010302020603010000010834006301000063010000630100006301000063
+01000063010000020100061308010c0e0001062301000603020201030202060301000000
+083501ff01ff0161061308010c0e000106230100060302020103020206030100009a0100
+006301000063010000630100006301000063010000020100061308010c0e000106230100
+060302020103020206030100003508000063010000630100006301000063010000630100
+0063010000020100061308010c0e00010623010006030202010302020603010000010632
+080100630100006301000063010000630100006301000063010000020100061308010c0e
+000106230100060302020103020206030100000106320801006301000063010000630100
+00630100006301000063010000020100061308010c0e0001062301000603020201030202
+060301000001061301000606010006150801006301000063010000630100006301000063
+01000063010000020100061308010c0e0001062301000603020201030202060301000001
+061101020605010106150801006301000063010000630100006301000063010000630100
+00020100061308010c0e0001062301000603020201030202060301000001061301000604
+010006000100061508010063010000630100006301000063010000630100006301000002
+0100061308010c0e00010623010006030202010302020603010000010613010006040100
+060001000615080100630100006301000063010000630100006301000063010000020100
+061308010c0e000106230100060302020103020206030100000106130100060301000601
+010006150801006301000063010000630100006301000063010000630100000201000613
+08010c0e0001062301000603020201030202060301000001061301000602010006020100
+061508010063010000630100006301000063010000630100006301000002010006130801
+0c0e00010623010006030202010302020603010000010613010006020105061408010063
+0100006301000063010000630100006301000063010000020100061308010c0e00010623
+010006030202010302020603010000010613010006060100061508010063010000630100
+0063010000630100006301000063010000020100061308010c0e00010623010006030202
+010302020603010000010611010406030102061408010063010000630100006301000063
+0100006301000063010000020100061308010c0e00010623010006030202010302020603
+010000010632080100630100006301000063010000630100006301000063010000020100
+061308010c0e000106230100060302020103020206030100000106320801006301000063
+01000063010000630100006301000063010000020100061308010c0e0001062301000603
+020201030202060301000001063208010063010000630100006301000063010000630100
+0063010000020100061308010c0e00010623010006030202010302020603010000010632
+080100630100006301000063010000630100006301000063010000020100061308010c0e
+000106230100060302020103020206030100000106320801006301000063010000630100
+00630100006301000063010000020100061308010c0e0001062301000603020201030202
+060301000001063208010063010000630100006301000063010000630100006301000002
+0100061308010c0e00010623010006030202010302020603010000010834006301000063
+01000063010000630100006301000063010000020100061308010c0e0001062301000603
+020201030202060301000000083501ff01ff0161061308010c0e00010623010006030202
+0103020206030100009a0100006301000063010000630100006301000063010000020100
+061308010c0e000106230100060302020103020206030100003508000063010000630100
+0063010000630100006301000063010000020100061308010c0e00010623010006030202
+010302020603010000010632080100630100006301000063010000630100006301000063
+010000020100061308010c0e000106230100060302020103020206030100000106320801
+00630100006301000063010000630100006301000063010000020100061308010c0e0001
+062301000603020201030202060301000001061301000603010406140801006301000063
+01000063010000630100006301000063010000020100061308010c0e0001062301000603
+020201030202060301000001061101020603010006180801006301000063010000630100
+00630100006301000063010000020100061308010c0e0001062301000603020201030202
+060301000001061301000603010006180801006301000063010000630100006301000063
+01000063010000020100061308010c0e0001062301000603020201030202060301000001
+061301000603010006180801006301000063010000630100006301000063010000630100
+00020100061308010c0e0001062301000603020201030202060301000001061301000603
+010306150801006301000063010000630100006301000063010000630100000201000613
+08010c0e0001062301000603020201030202060301000001061301000607010006140801
+00630100006301000063010000630100006301000063010000020100061308010c0e0001
+062301000603020201030202060301000001061301000607010006140801006301000063
+01000063010000630100006301000063010000020100061308010c0e0001062301000603
+020201030202060301000001061301000602010006030100061408010063010000630100
+0063010000630100006301000063010000020100061308010c0e00010623010006030202
+010302020603010000010611010406010103061508010063010000630100006301000063
+0100006301000063010000020100061308010c0e00010623010006030202010302020603
+010000010632080100630100006301000063010000630100006301000063010000020100
+061308010c0e000106230100060302020103020206030100000106320801006301000063
+01000063010000630100006301000063010000020100061308010c0e0001062301000603
+020201030202060301000001063208010063010000630100006301000063010000630100
+0063010000020100061308010c0e00010623010006030202010302020603010000010632
+080100630100006301000063010000630100006301000063010000020100061308010c0e
+000106230100060302020103020206030100000106320801006301000063010000630100
+00630100006301000063010000020100061308010c0e0001062301000603020201030202
+060301000001063208010063010000630100006301000063010000630100006301000002
+0100061308010c0e00010623010006030202010302020603010000010834006301000063
+01000063010000630100006301000063010000020100061308010c0e0001062301000603
+020201030202060301000000083501ff01ff0161061308010c0e00010623010006030202
+0103020206030100009a0100006301000063010000630100006301000063010000020100
+061308010c0e000106230100060302020103020206030100003508000063010000630100
+0063010000630100006301000063010000020100061308010c0e00010623010006030202
+010302020603010000010632080100630100006301000063010000630100006301000063
+010000020100061308010c0e000106230100060302020103020206030100000106320801
+00630100006301000063010000630100006301000063010000020100061308010c0e0001
+062301000603020201030202060301000001061301000605010206140801006301000063
+01000063010000630100006301000063010000020100061308010c0e0001062301000603
+020201030202060301000001061101020604010006170801006301000063010000630100
+00630100006301000063010000020100061308010c0e0001062301000603020201030202
+060301000001061301000603010006180801006301000063010000630100006301000063
+01000063010000020100061308010c0e0001062301000603020201030202060301000001
+061301000603010006180801006301000063010000630100006301000063010000630100
+00020100061308010c0e0001062301000603020201030202060301000001061301000603
+010306150801006301000063010000630100006301000063010000630100000201000613
+08010c0e0001062301000603020201030202060301000001061301000603010006020100
+061408010063010000630100006301000063010000630100006301000002010006130801
+0c0e00010623010006030202010302020603010000010613010006030100060201000614
+080100630100006301000063010000630100006301000063010000020100061308010c0e
+000106230100060302020103020206030100000106130100060301000602010006140801
+00630100006301000063010000630100006301000063010000020100061308010c0e0001
+062301000603020201030202060301000001061101040602010206150801006301000063
+01000063010000630100006301000063010000020100061308010c0e0001062301000603
+020201030202060301000001063208010063010000630100006301000063010000630100
+0063010000020100061308010c0e00010623010006030202010302020603010000010632
+080100630100006301000063010000630100006301000063010000020100061308010c0e
+000106230100060302020103020206030100000106320801006301000063010000630100
+00630100006301000063010000020100061308010c0e0001062301000603020201030202
+060301000001063208010063010000630100006301000063010000630100006301000002
+0100061308010c0e00010623010006030202010302020603010000010632080100630100
+006301000063010000630100006301000063010000020100061308010c0e000106230100
+060302020103020206030100000106320801006301000063010000630100006301000063
+01000063010000020100061308010c0e0001062301000603020201030202060301000001
+083400630100006301000063010000630100006301000063010000020100061308010c0e
+0001062301000603020201030202060301000000083501ff01ff0161061308010c0e0001
+06230100060302020103020206030100009a010000630100006301000063010000630100
+0063010000020100061308010c0e00010623010006030202010302020603010000350800
+00630100006301000063010000630100006301000063010000020100061308010c0e0001
+062301000603020201030202060301000001063208010063010000630100006301000063
+0100006301000063010000020100061308010c0e00010623010006030202010302020603
+010000010632080100630100006301000063010000630100006301000063010000020100
+061308010c0e000106230100060302020103020206030100000106130100060301040614
+080100630100006301000063010000630100006301000063010000020100061308010c0e
+000106230100060302020103020206030100000106110102060301000602010006140801
+00630100006301000063010000630100006301000063010000020100061308010c0e0001
+062301000603020201030202060301000001061301000606010006150801006301000063
+01000063010000630100006301000063010000020100061308010c0e0001062301000603
+020201030202060301000001061301000606010006150801006301000063010000630100
+00630100006301000063010000020100061308010c0e0001062301000603020201030202
+060301000001061301000606010006150801006301000063010000630100006301000063
+01000063010000020100061308010c0e0001062301000603020201030202060301000001
+061301000606010006150801006301000063010000630100006301000063010000630100
+00020100061308010c0e0001062301000603020201030202060301000001061301000605
+010006160801006301000063010000630100006301000063010000630100000201000613
+08010c0e0001062301000603020201030202060301000001061301000605010006160801
+00630100006301000063010000630100006301000063010000020100061308010c0e0001
+062301000603020201030202060301000001061101040603010006160801006301000063
+01000063010000630100006301000063010000020100061308010c0e0001062301000603
+020201030202060301000001063208010063010000630100006301000063010000630100
+0063010000020100061308010c0e00010623010006030202010302020603010000010632
+080100630100006301000063010000630100006301000063010000020100061308010c0e
+000106230100060302020103020206030100000106320801006301000063010000630100
+00630100006301000063010000020100061308010c0e0001062301000603020201030202
+060301000001063208010063010000630100006301000063010000630100006301000002
+0100061308010c0e00010623010006030202010302020603010000010632080100630100
+006301000063010000630100006301000063010000020100061308010c0e000106230100
+060302020103020206030100000106320801006301000063010000630100006301000063
+01000063010000020100061308010c0e0001062301000603020201030202060301000001
+083400630100006301000063010000630100006301000063010000020100061308010c0e
+0001062301000603020201030202060301000000083501ff01ff0161061308010c0e0001
+06230100060302020103020206030100009a010000630100006301000063010000630100
+0063010000020100061308010c0e00010623010006030202010302020603010000350800
+00630100006301000063010000630100006301000063010000020100061308010c0e0001
+062301000603020201030202060301000001063208010063010000630100006301000063
+0100006301000063010000020100061308010c0e00010623010006030202010302020603
+010000010632080100630100006301000063010000630100006301000063010000020100
+061308010c0e000106230100060302020103020206030100000106130100060401020615
+080100630100006301000063010000630100006301000063010000020100061308010c0e
+000106230100060302020103020206030100000106110102060301000602010006140801
+00630100006301000063010000630100006301000063010000020100061308010c0e0001
+062301000603020201030202060301000001061301000603010006020100061408010063
+0100006301000063010000630100006301000063010000020100061308010c0e00010623
+010006030202010302020603010000010613010006030100060201000614080100630100
+006301000063010000630100006301000063010000020100061308010c0e000106230100
+060302020103020206030100000106130100060401020615080100630100006301000063
+010000630100006301000063010000020100061308010c0e000106230100060302020103
+020206030100000106130100060301000602010006140801006301000063010000630100
+00630100006301000063010000020100061308010c0e0001062301000603020201030202
+060301000001061301000603010006020100061408010063010000630100006301000063
+0100006301000063010000020100061308010c0e00010623010006030202010302020603
+010000010613010006030100060201000614080100630100006301000063010000630100
+006301000063010000020100061308010c0e000106230100060302020103020206030100
+000106110104060201020615080100630100006301000063010000630100006301000063
+010000020100061308010c0e000106230100060302020103020206030100000106320801
+00630100006301000063010000630100006301000063010000020100061308010c0e0001
+062301000603020201030202060301000001063208010063010000630100006301000063
+0100006301000063010000020100061308010c0e00010623010006030202010302020603
+010000010632080100630100006301000063010000630100006301000063010000020100
+061308010c0e000106230100060302020103020206030100000106320801006301000063
+01000063010000630100006301000063010000020100061308010c0e0001062301000603
+020201030202060301000001063208010063010000630100006301000063010000630100
+0063010000020100061308010c0e00010623010006030202010302020603010000010632
+080100630100006301000063010000630100006301000063010000020100061308010c0e
+000106230100060302020103020206030100000108340063010000630100006301000063
+0100006301000063010000020100061308010010062301000603020201030202060301ff
+01ff01990613080000110623010006030202010302020603010006ff06ff06e301000603
+0202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e3
+010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff
+06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603
+010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020103
+0202060301000649010006ff06ff069801000603020201030202060301000648010106ff
+06ff06980100060302020103020206030100064701000600010006ff06ff069801000603
+020201030202060301000649010006ff06ff069801000603020201030202060301000649
+010006ff06ff069801000603020201030202060301000649010006ff06ff069801000603
+020201030202060301000649010006ff06ff069801000603020201030202060301000649
+010006ff06ff069801000603020201030202060301000647010406ff06ff069601000603
+0202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e3
+010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff
+06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603
+0100063708ff08ff0860064a0100060302020103020206030100063708ff08ff085f0000
+064a010006030202010302020603010006370801001d0cff0cff0c3e0001064a01000603
+0202010302020603010006370801001c08000cff0cff0c3e0001064a0100060302020103
+020206030100063708010001060b08000000060b08010cff0cff0c3e0001064a01000603
+02020103020206030100063708010001060b08000000060b08010cff0cff0c3e0001064a
+0100060302020103020206030100063708010001060b08000000060b08010cff0cff0c3e
+0001064a0100060302020103020206030100063708010001060b08000000060b08010cff
+0cff0c3e0001064a0100060302020103020206030100063708010001060b08000000060b
+08010cff0cff0c3e0001064a0100060302020103020206030100063708010001060b0800
+0000060b08010cff0cff0c3e0001064a0100060302020103020206030100063708010001
+060b08000000060b08010cff0cff0c3e0001064a01000603020201030202060301000637
+08010001060b08000000060b08010cff0cff0c3e0001064a010006030202010302020603
+0100063708010001060b08000000060b08010cff0cff0c3e0001064a0100060302020103
+020206030100063708010001060b08000000060b08010cff0cff0c3e0001064a01000603
+02020103020206030100063708010001060b08000000060b08010cff0cff0c3e0001064a
+0100060302020103020206030100063708010001080c0000080d0cff0cff0c3e0001064a
+0100060302020103020206030100063708010000081c0cff0cff0c3e0001064a01000603
+020201030202060301000637080100ff00ff005e064a0100060302020103020206030100
+0637080000ff00ff005f064a010006030202010302020603010006ff06ff06e301000603
+0202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e3
+010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff
+06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603
+010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020103
+02020603010006ff06ff06e3010006030202010302020603010006ff06ff06e301000603
+0202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e3
+010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff
+06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603
+010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020103
+02020603010006ff06ff06e3010006030202010302020603010006ff06ff06e301000603
+0202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e3
+010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff
+06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603
+010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020103
+02020603010006ff06ff06e3010006030202010302020603010006ff06ff06e301000603
+0202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e3
+010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff
+06ff06e3010006030202010302020603010006ff06ff06e3010006030202010100040603
+010006ff06ff06e301000603000502020400060301ff01ff01e506030000020204000000
+0202040006ff06ff06ed00000202040000000202040006ff06ff06ed0000020204000000
+0202040006ff06ff06ed00000202040000000202040006ff06ff06ed0000020204000000
+02020400000502ff02ff02e100060202040000000208040002ff02ff02e1000002080400
+00000208040002ff02ff02e100000208040000000208040001ff01ff01e1000002080400
+0000040901ff01ff01e100000409
+%%EndData
+end
+%%PageTrailer
+%%Trailer
+%%BoundingBox: 0 0 532 441
+%%EOF
diff --git a/lib/tv/doc/src/warning.gif b/lib/tv/doc/src/warning.gif
new file mode 100644
index 0000000000..96af52360e
--- /dev/null
+++ b/lib/tv/doc/src/warning.gif
Binary files differ
diff --git a/lib/tv/ebin/.gitignore b/lib/tv/ebin/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/lib/tv/ebin/.gitignore
diff --git a/lib/tv/info b/lib/tv/info
new file mode 100644
index 0000000000..63e88b04b5
--- /dev/null
+++ b/lib/tv/info
@@ -0,0 +1,2 @@
+group: tools
+short: An ETS and MNESIA graphical table visualizer
diff --git a/lib/tv/priv/Makefile b/lib/tv/priv/Makefile
new file mode 100644
index 0000000000..69e3e32c8a
--- /dev/null
+++ b/lib/tv/priv/Makefile
@@ -0,0 +1,72 @@
+#
+# %CopyrightBegin%
+#
+# Copyright Ericsson AB 1997-2009. All Rights Reserved.
+#
+# The contents of this file are subject to the Erlang Public License,
+# Version 1.1, (the "License"); you may not use this file except in
+# compliance with the License. You should have received a copy of the
+# Erlang Public License along with this software. If not, it can be
+# retrieved online at http://www.erlang.org/.
+#
+# Software distributed under the License is distributed on an "AS IS"
+# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+# the License for the specific language governing rights and limitations
+# under the License.
+#
+# %CopyrightEnd%
+include $(ERL_TOP)/make/target.mk
+include $(ERL_TOP)/make/$(TARGET)/otp.mk
+
+include ../vsn.mk
+VSN = $(TV_VSN)
+
+# ----------------------------------------------------
+# Release directory specification
+# ----------------------------------------------------
+RELSYSDIR = $(RELEASE_PATH)/lib/tv-$(VSN)
+
+#
+# Macros
+#
+TOOLBAR_FILES = \
+ arrow_left.xbm \
+ arrow_right.xbm \
+ edit1.xbm \
+ erlang.gif \
+ help.xbm \
+ info.xbm \
+ key.xbm \
+ more.xbm \
+ no_sort.xbm \
+ open.xbm \
+ poll.xbm \
+ search.xbm \
+ sort.xbm \
+ sort_reverse.xbm \
+ tv.gif \
+ tv.tool
+
+#
+# Rules
+#
+
+debug opt:
+
+docs:
+
+clean:
+
+
+# ----------------------------------------------------
+# Release Target
+# ----------------------------------------------------
+include $(ERL_TOP)/make/otp_release_targets.mk
+
+release_spec: opt
+ $(INSTALL_DIR) $(RELSYSDIR)/priv
+ $(INSTALL_DATA) $(TOOLBAR_FILES) $(RELSYSDIR)/priv
+
+release_docs_spec:
+
+FORCE:
diff --git a/lib/tv/priv/arrow_left.xbm b/lib/tv/priv/arrow_left.xbm
new file mode 100644
index 0000000000..58db123a00
--- /dev/null
+++ b/lib/tv/priv/arrow_left.xbm
@@ -0,0 +1,5 @@
+#define arrow_left_width 16
+#define arrow_left_height 8
+static unsigned char arrow_left_bits[] = {
+ 0x70, 0x00, 0x38, 0x00, 0x1c, 0x00, 0xfe, 0xff, 0xfe, 0xff, 0x1c, 0x00,
+ 0x38, 0x00, 0x70, 0x00};
diff --git a/lib/tv/priv/arrow_right.xbm b/lib/tv/priv/arrow_right.xbm
new file mode 100644
index 0000000000..7eca80303d
--- /dev/null
+++ b/lib/tv/priv/arrow_right.xbm
@@ -0,0 +1,5 @@
+#define arrow_right_width 16
+#define arrow_right_height 8
+static unsigned char arrow_right_bits[] = {
+ 0x00, 0x1c, 0x00, 0x38, 0x00, 0x70, 0xfc, 0xff, 0xfc, 0xff, 0x00, 0x70,
+ 0x00, 0x38, 0x00, 0x1c};
diff --git a/lib/tv/priv/edit1.xbm b/lib/tv/priv/edit1.xbm
new file mode 100644
index 0000000000..dc13f274c0
--- /dev/null
+++ b/lib/tv/priv/edit1.xbm
@@ -0,0 +1,12 @@
+#define edit1_width 25
+#define edit1_height 25
+static unsigned char edit1_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x0f, 0x00,
+ 0x00, 0x01, 0x14, 0x00, 0x70, 0xf9, 0x27, 0x00, 0xf8, 0x01, 0x3c, 0x00,
+ 0xf8, 0xf9, 0x27, 0x00, 0xf0, 0x03, 0x20, 0x00, 0xe0, 0xff, 0x27, 0x00,
+ 0xc0, 0x07, 0x20, 0x00, 0x80, 0xff, 0x27, 0x00, 0x00, 0x1f, 0x20, 0x00,
+ 0x00, 0xfd, 0x27, 0x00, 0x00, 0x79, 0x20, 0x00, 0x00, 0xf9, 0x27, 0x00,
+ 0x00, 0x21, 0x21, 0x00, 0x00, 0xf9, 0x27, 0x00, 0x00, 0x01, 0x20, 0x00,
+ 0x00, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00};
diff --git a/lib/tv/priv/erlang.gif b/lib/tv/priv/erlang.gif
new file mode 100644
index 0000000000..8d06e98065
--- /dev/null
+++ b/lib/tv/priv/erlang.gif
Binary files differ
diff --git a/lib/tv/priv/help.xbm b/lib/tv/priv/help.xbm
new file mode 100644
index 0000000000..b2cbc541e4
--- /dev/null
+++ b/lib/tv/priv/help.xbm
@@ -0,0 +1,8 @@
+#define help_width 20
+#define help_height 20
+static unsigned char help_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0xff, 0x00, 0x80, 0xe7, 0x01,
+ 0x80, 0xc3, 0x01, 0x80, 0xc3, 0x01, 0x00, 0xe3, 0x00, 0x00, 0x70, 0x00,
+ 0x00, 0x38, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/lib/tv/priv/info.xbm b/lib/tv/priv/info.xbm
new file mode 100644
index 0000000000..d5157661c2
--- /dev/null
+++ b/lib/tv/priv/info.xbm
@@ -0,0 +1,8 @@
+#define info_width 20
+#define info_height 20
+static unsigned char info_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1e, 0x00,
+ 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00,
+ 0x00, 0x3e, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/lib/tv/priv/key.xbm b/lib/tv/priv/key.xbm
new file mode 100644
index 0000000000..222be32219
--- /dev/null
+++ b/lib/tv/priv/key.xbm
@@ -0,0 +1,6 @@
+#define key_width 10
+#define key_height 18
+static char key_bits[] = {
+ 0xfc,0x00,0xfe,0x01,0x87,0x03,0x03,0x03,0x87,0x03,0xfe,0x01,0xfc,0x00,0x30,
+ 0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x3b,0x00,0x3b,0x00,
+ 0x3f,0x00,0x3f,0x00,0x37,0x00};
diff --git a/lib/tv/priv/more.xbm b/lib/tv/priv/more.xbm
new file mode 100644
index 0000000000..38ef738768
--- /dev/null
+++ b/lib/tv/priv/more.xbm
@@ -0,0 +1,8 @@
+#define more_width 16
+#define more_height 26
+static unsigned char more_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f,
+ 0xe0, 0x3f, 0xc0, 0x1f, 0x80, 0x0f, 0x00, 0x07, 0x00, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00};
diff --git a/lib/tv/priv/no_sort.xbm b/lib/tv/priv/no_sort.xbm
new file mode 100644
index 0000000000..90568dd828
--- /dev/null
+++ b/lib/tv/priv/no_sort.xbm
@@ -0,0 +1,8 @@
+#define no_sort_width 20
+#define no_sort_height 20
+static unsigned char no_sort_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02,
+ 0x20, 0x00, 0x02, 0x20, 0x00, 0x02, 0x20, 0x08, 0x02, 0x20, 0x08, 0x02,
+ 0x20, 0x48, 0x02, 0x20, 0x48, 0x02, 0x20, 0x49, 0x02, 0x20, 0x49, 0x02,
+ 0x20, 0x49, 0x02, 0x20, 0x49, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/lib/tv/priv/open.xbm b/lib/tv/priv/open.xbm
new file mode 100644
index 0000000000..fe77d2c38b
--- /dev/null
+++ b/lib/tv/priv/open.xbm
@@ -0,0 +1,8 @@
+#define open_width 20
+#define open_height 20
+static unsigned char open_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x05,
+ 0xe0, 0x00, 0x06, 0xf0, 0x1f, 0x07, 0xf0, 0x3f, 0x00, 0xf0, 0x3f, 0x00,
+ 0xf0, 0x3f, 0x00, 0xf0, 0xff, 0x03, 0xf0, 0x00, 0x01, 0x70, 0x80, 0x00,
+ 0x30, 0x40, 0x00, 0xf0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/lib/tv/priv/poll.xbm b/lib/tv/priv/poll.xbm
new file mode 100644
index 0000000000..6ec1dbeaf2
--- /dev/null
+++ b/lib/tv/priv/poll.xbm
@@ -0,0 +1,8 @@
+#define poll2_width 20
+#define poll2_height 20
+static unsigned char poll2_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0xc0, 0x7f, 0x00, 0xe0, 0xff, 0x00,
+ 0xe0, 0xf1, 0x00, 0xf0, 0xe0, 0x01, 0x70, 0xf8, 0x07, 0x70, 0xf0, 0x03,
+ 0x70, 0xe0, 0x01, 0xf0, 0xc0, 0x00, 0xe0, 0x01, 0x00, 0xe0, 0x7f, 0x00,
+ 0xc0, 0x3f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/lib/tv/priv/search.xbm b/lib/tv/priv/search.xbm
new file mode 100644
index 0000000000..3498e66b0d
--- /dev/null
+++ b/lib/tv/priv/search.xbm
@@ -0,0 +1,8 @@
+#define search2_width 20
+#define search2_height 20
+static unsigned char search2_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xc0, 0xe1, 0x00, 0xc0, 0xe1, 0x00, 0xe0, 0xf3, 0x01, 0x20, 0x93, 0x01,
+ 0xf0, 0xff, 0x03, 0xe8, 0xdd, 0x07, 0xe8, 0xdd, 0x07, 0xe8, 0xdd, 0x07,
+ 0xe8, 0xdd, 0x07, 0xe8, 0xdf, 0x07, 0xe8, 0xd3, 0x07, 0xf8, 0xf3, 0x07,
+ 0xe8, 0x40, 0x07, 0xe8, 0x40, 0x07, 0xf8, 0xc0, 0x07, 0x00, 0x00, 0x00};
diff --git a/lib/tv/priv/sort.xbm b/lib/tv/priv/sort.xbm
new file mode 100644
index 0000000000..576564b817
--- /dev/null
+++ b/lib/tv/priv/sort.xbm
@@ -0,0 +1,8 @@
+#define sort_width 20
+#define sort_height 20
+static unsigned char sort_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02,
+ 0x00, 0x40, 0x02, 0x00, 0x40, 0x02, 0x00, 0x48, 0x02, 0x00, 0x48, 0x02,
+ 0x00, 0x49, 0x02, 0x00, 0x49, 0x02, 0x20, 0x49, 0x02, 0x20, 0x49, 0x02,
+ 0x20, 0x49, 0x02, 0x20, 0x49, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/lib/tv/priv/sort_reverse.xbm b/lib/tv/priv/sort_reverse.xbm
new file mode 100644
index 0000000000..b58e6308f5
--- /dev/null
+++ b/lib/tv/priv/sort_reverse.xbm
@@ -0,0 +1,8 @@
+#define sort_reverse_width 20
+#define sort_reverse_height 20
+static unsigned char sort_reverse_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00,
+ 0x20, 0x01, 0x00, 0x20, 0x01, 0x00, 0x20, 0x09, 0x00, 0x20, 0x09, 0x00,
+ 0x20, 0x49, 0x00, 0x20, 0x49, 0x00, 0x20, 0x49, 0x02, 0x20, 0x49, 0x02,
+ 0x20, 0x49, 0x02, 0x20, 0x49, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/lib/tv/priv/tv.gif b/lib/tv/priv/tv.gif
new file mode 100644
index 0000000000..44daac2912
--- /dev/null
+++ b/lib/tv/priv/tv.gif
Binary files differ
diff --git a/lib/tv/priv/tv.tool b/lib/tv/priv/tv.tool
new file mode 100644
index 0000000000..770424d283
--- /dev/null
+++ b/lib/tv/priv/tv.tool
@@ -0,0 +1,23 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+{version,"0.1"}.
+{{tool,"Table Visualizer"},
+ {start,{tv,start,[]}},
+ {icon,"tv.gif"},
+ {message,"The Table Visualizer"},
+ {html,"../doc/html/index.html"}}.
diff --git a/lib/tv/src/Makefile b/lib/tv/src/Makefile
new file mode 100644
index 0000000000..457b9d38c4
--- /dev/null
+++ b/lib/tv/src/Makefile
@@ -0,0 +1,135 @@
+#
+# %CopyrightBegin%
+#
+# Copyright Ericsson AB 1997-2009. All Rights Reserved.
+#
+# The contents of this file are subject to the Erlang Public License,
+# Version 1.1, (the "License"); you may not use this file except in
+# compliance with the License. You should have received a copy of the
+# Erlang Public License along with this software. If not, it can be
+# retrieved online at http://www.erlang.org/.
+#
+# Software distributed under the License is distributed on an "AS IS"
+# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+# the License for the specific language governing rights and limitations
+# under the License.
+#
+# %CopyrightEnd%
+include $(ERL_TOP)/make/target.mk
+include $(ERL_TOP)/make/$(TARGET)/otp.mk
+
+# ----------------------------------------------------
+# Application version
+# ----------------------------------------------------
+include ../vsn.mk
+VSN=$(TV_VSN)
+
+# ----------------------------------------------------
+# Release directory specification
+# ----------------------------------------------------
+RELSYSDIR = $(RELEASE_PATH)/lib/tv-$(VSN)
+
+# ----------------------------------------------------
+# Common Macros
+# ----------------------------------------------------
+
+MODULES= \
+ tv \
+ tv_comm_func \
+ tv_db \
+ tv_db_search \
+ tv_db_sort \
+ tv_ets_rpc \
+ tv_etsread \
+ tv_info \
+ tv_io_lib \
+ tv_io_lib_format \
+ tv_io_lib_pretty \
+ tv_ip \
+ tv_main \
+ tv_mnesia_rpc \
+ tv_new_table \
+ tv_nodewin \
+ tv_pb \
+ tv_pb_funcs \
+ tv_pc \
+ tv_pc_graph_ctrl \
+ tv_pc_menu_handling \
+ tv_pd \
+ tv_pd_display \
+ tv_pd_frames \
+ tv_pd_scale \
+ tv_pg \
+ tv_pg_gridfcns \
+ tv_poll_dialog \
+ tv_pw \
+ tv_pw_window \
+ tv_rec_edit \
+ tv_table_owner \
+ tv_utils
+
+
+
+HRL_FILES= \
+ tv_db_int_def.hrl \
+ tv_int_def.hrl \
+ tv_int_msg.hrl \
+ tv_main.hrl \
+ tv_pb_int_def.hrl \
+ tv_pc_int_def.hrl \
+ tv_pd_int_def.hrl \
+ tv_pd_int_msg.hrl \
+ tv_pg_int_def.hrl \
+ tv_pw_int_def.hrl
+
+ERL_FILES= $(MODULES:%=%.erl)
+
+TARGET_FILES = $(MODULES:%=$(EBIN)/%.$(EMULATOR)) $(APP_TARGET) $(APPUP_TARGET)
+
+APP_FILE = tv.app
+APP_SRC = $(APP_FILE).src
+APP_TARGET = $(EBIN)/$(APP_FILE)
+
+APPUP_FILE = tv.appup
+APPUP_SRC = $(APPUP_FILE).src
+APPUP_TARGET = $(EBIN)/$(APPUP_FILE)
+# ----------------------------------------------------
+# FLAGS
+# ----------------------------------------------------
+ERL_COMPILE_FLAGS += +warn_obsolete_guard
+
+# ----------------------------------------------------
+# Targets
+# ----------------------------------------------------
+
+debug opt: $(TARGET_FILES)
+
+clean:
+ rm -f $(TARGET_FILES)
+ rm -f errs core *~
+
+$(APP_TARGET): $(APP_SRC) ../vsn.mk
+ sed -e 's;%VSN%;$(VSN);' $< > $@
+
+$(APPUP_TARGET): $(APPUP_SRC) ../vsn.mk
+ sed -e 's;%VSN%;$(VSN);' $< > $@
+
+docs:
+
+# ----------------------------------------------------
+# Special Targets
+# ----------------------------------------------------
+
+# ----------------------------------------------------
+# Release Target
+# ----------------------------------------------------
+include $(ERL_TOP)/make/otp_release_targets.mk
+
+release_spec: opt
+ $(INSTALL_DIR) $(RELSYSDIR)/src
+ $(INSTALL_DATA) $(HRL_FILES) $(ERL_FILES) $(RELSYSDIR)/src
+ $(INSTALL_DIR) $(RELSYSDIR)/ebin
+ $(INSTALL_DATA) $(TARGET_FILES) $(RELSYSDIR)/ebin
+
+release_docs_spec:
+
diff --git a/lib/tv/src/tv.app.src b/lib/tv/src/tv.app.src
new file mode 100644
index 0000000000..e76c587868
--- /dev/null
+++ b/lib/tv/src/tv.app.src
@@ -0,0 +1,56 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+{application, tv,
+ [{description, "tv Table Visualizer"},
+ {vsn, "%VSN%"},
+ {modules, [tv,
+ tv_comm_func,
+ tv_db,
+ tv_db_search,
+ tv_db_sort,
+ tv_ets_rpc,
+ tv_etsread,
+ tv_info,
+ tv_io_lib,
+ tv_io_lib_format,
+ tv_io_lib_pretty,
+ tv_ip,
+ tv_main,
+ tv_mnesia_rpc,
+ tv_new_table,
+ tv_nodewin,
+ tv_pb,
+ tv_pb_funcs,
+ tv_pc,
+ tv_pc_graph_ctrl,
+ tv_pc_menu_handling,
+ tv_pd,
+ tv_pd_display,
+ tv_pd_frames,
+ tv_pd_scale,
+ tv_pg,
+ tv_pg_gridfcns,
+ tv_poll_dialog,
+ tv_pw,
+ tv_pw_window,
+ tv_rec_edit,
+ tv_table_owner,
+ tv_utils
+ ]},
+ {registered,[tv_table_owner]},
+ {applications, [kernel, stdlib, gs]}]}.
diff --git a/lib/tv/src/tv.appup.src b/lib/tv/src/tv.appup.src
new file mode 100644
index 0000000000..0d918b6081
--- /dev/null
+++ b/lib/tv/src/tv.appup.src
@@ -0,0 +1,18 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+{"%VSN%",[],[]}.
diff --git a/lib/tv/src/tv.erl b/lib/tv/src/tv.erl
new file mode 100644
index 0000000000..70bc945c63
--- /dev/null
+++ b/lib/tv/src/tv.erl
@@ -0,0 +1,38 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(tv).
+
+-export([start/0,
+ start_browser/6]).
+
+
+%%%*********************************************************************
+%%% EXTERNAL FUNCTIONS
+%%%*********************************************************************
+
+start() ->
+ tv_main:start().
+
+
+start_browser(Node, LocalNode, TableId, KindOfTable, TableName, ErrMsgMode) ->
+ spawn_link(tv_pc, pc, [self(), Node, LocalNode, TableId, KindOfTable, TableName, ErrMsgMode]).
+
+
+
+
+
diff --git a/lib/tv/src/tv_comm_func.erl b/lib/tv/src/tv_comm_func.erl
new file mode 100644
index 0000000000..d57960e303
--- /dev/null
+++ b/lib/tv/src/tv_comm_func.erl
@@ -0,0 +1,77 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(tv_comm_func).
+
+
+
+
+-export([max/2,
+ min/2
+ ]).
+
+
+
+
+
+
+
+%%%*********************************************************************
+%%% EXTERNAL FUNCTIONS
+%%%*********************************************************************
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+max(X, Y) when X > Y ->
+ X;
+max(_X, Y) ->
+ Y.
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+min(X, Y) when X < Y ->
+ X;
+min(_X, Y) ->
+ Y.
+
+
+
diff --git a/lib/tv/src/tv_db.erl b/lib/tv/src/tv_db.erl
new file mode 100644
index 0000000000..201b4c0e6b
--- /dev/null
+++ b/lib/tv/src/tv_db.erl
@@ -0,0 +1,1267 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%%*********************************************************************
+%%%
+%%% Description: Module handling the internal database in the table tool.
+%%%
+%%%*********************************************************************
+
+-module(tv_db).
+
+
+
+-export([dbs/2]).
+
+
+
+-include("tv_int_def.hrl").
+-include("tv_int_msg.hrl").
+-include("tv_db_int_def.hrl").
+
+
+
+
+
+
+
+%%%*********************************************************************
+%%% EXTERNAL FUNCTIONS
+%%%*********************************************************************
+
+
+
+
+dbs(Master, ErrMsgMode) ->
+ process_flag(trap_exit, true),
+ put(error_msg_mode, ErrMsgMode),
+ ProcVars = #process_variables{master_pid = Master},
+ blocked(ProcVars).
+
+
+
+
+
+
+%%%********************************************************************
+%%% INTERNAL FUNCTIONS
+%%%********************************************************************
+
+
+
+blocked(ProcVars) ->
+ receive
+ Msg ->
+ case Msg of
+
+ #dbs_deblock{} ->
+ deblock(Msg, ProcVars, false);
+
+ {error_msg_mode, Mode} ->
+ put(error_msg_mode, Mode),
+ blocked(ProcVars);
+
+ {'EXIT', Pid, Reason} ->
+ MasterPid = ProcVars#process_variables.master_pid,
+ exit_signals({Pid, Reason}, MasterPid),
+ blocked(ProcVars);
+
+ _Other ->
+ blocked(ProcVars)
+ end
+ end.
+
+
+
+
+
+
+
+deblock(Msg, ProcVars, SearchWinCreated) ->
+ #dbs_deblock{sender = Sender,
+ etsread_pid = EtsreadPid,
+ type = Type,
+ keypos = KeyPos,
+ sublist_length = SublistLength} = Msg,
+
+ NewDbData = #db_data{subset_size = SublistLength,
+ subset_pos = 1,
+ key_no = KeyPos,
+ ets_type = Type
+ },
+ NewProcVars = ProcVars#process_variables{db_data = NewDbData,
+ etsread_pid = EtsreadPid},
+ Sender ! #dbs_deblock_cfm{sender = self()},
+ deblocked_loop(NewProcVars, SearchWinCreated, [], undefined).
+
+
+
+
+
+
+
+
+deblocked_loop(ProcVars, SearchWinCreated, SearchData, RegExp) ->
+ receive
+ Msg ->
+ case Msg of
+
+ {gs,entry,keypress,_Data,['Return' | _T]} ->
+ NewSearchData = search_object(ProcVars, RegExp),
+ deblocked_loop(ProcVars, SearchWinCreated, NewSearchData, RegExp);
+
+ {gs,entry,keypress,_Data,['Tab' | _T]} ->
+ gs:config(entry, [{select, {0,1000}}]),
+ deblocked_loop(ProcVars, SearchWinCreated, SearchData, RegExp);
+
+ {gs,entry,keypress,_Data,_Args} ->
+ deblocked_loop(ProcVars, SearchWinCreated, SearchData, RegExp);
+
+ {gs,expr_term,click,_Data,_Args} ->
+ deblocked_loop(ProcVars, SearchWinCreated, SearchData, false);
+
+ {gs,expr_regexp,click,_Data,_Args} ->
+ deblocked_loop(ProcVars, SearchWinCreated, SearchData, true);
+
+ {gs,search,click,_Data,_Args} ->
+ NewSearchData = search_object(ProcVars, RegExp),
+ deblocked_loop(ProcVars, SearchWinCreated, NewSearchData, RegExp);
+
+ {gs,cancel,click,cancel,_Args} ->
+ tv_db_search:destroy_window(SearchWinCreated),
+ deblocked_loop(ProcVars, false, [], RegExp);
+
+ {gs,listbox,click,_LbData,[Idx | _T]} when SearchData =/= [] ->
+ tv_db_search:mark_busy(SearchWinCreated),
+ {Row,_Obj} = lists:nth(Idx+1, SearchData),
+ DbData = ProcVars#process_variables.db_data,
+ %% Never allow 'subset_pos' to have zero as value!
+ %% No list can begin with the 0:th element!!!
+ %% Has to be at least 1!
+ NewDbData = DbData#db_data{subset_pos=?COMM_FUNC_FILE:max(1,
+ Row),
+ subset_size=?ITEMS_TO_DISPLAY},
+ NewProcVars = ProcVars#process_variables{db_data=NewDbData},
+ send_subset(NewProcVars, undefined, undefined),
+ tv_db_search:mark_nonbusy(SearchWinCreated),
+ deblocked_loop(NewProcVars, SearchWinCreated, SearchData, RegExp);
+
+ {gs,win,configure,_Data,_Args} ->
+ tv_db_search:resize_window(SearchWinCreated),
+ deblocked_loop(ProcVars, SearchWinCreated, SearchData, RegExp);
+
+ {gs,win,destroy,_Data,_Args} ->
+ deblocked_loop(ProcVars, false, [], RegExp);
+
+
+ #dbs_new_data{data = NewData, keys = ListOfKeys,
+ time_to_read_table = ElapsedTimeEtsread} ->
+ tv_db_search:reset_window(SearchWinCreated),
+ T1 = time(),
+ NewProcVars = update_db(NewData, ListOfKeys, ProcVars),
+ T2 = time(),
+ ElapsedTimeDbs = compute_elapsed_seconds(T1, T2),
+ send_subset(NewProcVars, ElapsedTimeEtsread, ElapsedTimeDbs),
+ deblocked_loop(NewProcVars, SearchWinCreated, [], RegExp);
+
+ #dbs_subset_req{subset_pos = Pos,subset_length = Length} ->
+ DbData = ProcVars#process_variables.db_data,
+ %% Never allow 'subset_pos' to have zero as value!
+ %% No list can begin with the 0:th element!!!
+ %% Has to be at least 1!
+ NewDbData = DbData#db_data{subset_pos=?COMM_FUNC_FILE:max(1,
+ Pos),
+ subset_size=Length},
+ NewProcVars = ProcVars#process_variables{db_data = NewDbData},
+ send_subset(NewProcVars, undefined, undefined),
+ deblocked_loop(NewProcVars, SearchWinCreated, SearchData, RegExp);
+
+ #dbs_marked_row{row_no = RowNo} ->
+ DbData = ProcVars#process_variables.db_data,
+ NewDbData = DbData#db_data{requested_row = RowNo},
+ NewProcVars = ProcVars#process_variables{db_data = NewDbData},
+ deblocked_loop(NewProcVars, SearchWinCreated, SearchData, RegExp);
+
+ #dbs_search_req{} ->
+ tv_db_search:create_window(SearchWinCreated),
+ deblocked_loop(ProcVars, true, SearchData, false);
+
+ #dbs_sorting_mode{} ->
+ {NewProcVars, NewSearchData} =
+ update_sorting_mode(Msg, ProcVars,
+ SearchWinCreated, SearchData, RegExp),
+ deblocked_loop(NewProcVars, SearchWinCreated, NewSearchData, RegExp);
+
+ #dbs_deblock{} ->
+ tv_db_search:reset_window(SearchWinCreated),
+ deblock(Msg, ProcVars, SearchWinCreated);
+
+ #dbs_updated_object{object=Obj,old_object=OldObj,old_color=Color,obj_no=ObjNo} ->
+ {Success, NewProcVars} = update_object(Obj, OldObj, Color, ObjNo, ProcVars),
+ case Success of
+ true ->
+ tv_db_search:reset_window(SearchWinCreated),
+ send_subset(NewProcVars, undefined, undefined);
+ false ->
+ done
+ end,
+ deblocked_loop(NewProcVars, SearchWinCreated, SearchData, RegExp);
+
+ #dbs_new_object{object=Obj} ->
+ {Success, NewProcVars} = new_object(Obj, ProcVars),
+ case Success of
+ true ->
+ tv_db_search:reset_window(SearchWinCreated),
+ send_subset(NewProcVars, undefined, undefined);
+ false ->
+ done
+ end,
+ deblocked_loop(NewProcVars, SearchWinCreated, SearchData, RegExp);
+
+ #dbs_delete_object{object=Obj, color=Color, obj_no=ObjNo} ->
+ {Success, NewProcVars} = delete_object(Obj, Color, ObjNo, ProcVars),
+ case Success of
+ true ->
+ tv_db_search:reset_window(SearchWinCreated),
+ send_subset(NewProcVars, undefined, undefined);
+ false ->
+ done
+ end,
+ deblocked_loop(NewProcVars, SearchWinCreated, SearchData, RegExp);
+
+ #pc_list_info{lists_as_strings=ListAsStr} ->
+ NewProcVars = ProcVars#process_variables{lists_as_strings=ListAsStr},
+ deblocked_loop(NewProcVars, SearchWinCreated, SearchData, RegExp);
+
+ {error_msg_mode, Mode} ->
+ put(error_msg_mode, Mode),
+ deblocked_loop(ProcVars, SearchWinCreated, SearchData, RegExp);
+
+ {'EXIT', Pid, Reason} ->
+ MasterPid = ProcVars#process_variables.master_pid,
+ exit_signals({Pid, Reason}, MasterPid),
+ deblocked_loop(ProcVars, SearchWinCreated, SearchData, RegExp);
+
+ _Other ->
+ %% io:format("Received message: ~w ~n", [_Other]),
+ deblocked_loop(ProcVars, SearchWinCreated, SearchData, RegExp)
+ end
+ end.
+
+
+
+
+
+
+
+search_object(ProcVars, RegExp) ->
+ DbData = ProcVars#process_variables.db_data,
+ DbList = dblist2list(DbData#db_data.db),
+ ListAsStr = ProcVars#process_variables.lists_as_strings,
+ case catch tv_db_search:get_input_and_search(DbList, RegExp, ListAsStr) of
+ {'EXIT', _Reason} ->
+ tv_db_search:reset_window(true),
+ [];
+ List ->
+ List
+ end.
+
+
+
+
+
+
+update_sorting_mode(Msg, ProcVars, SearchWinCreated, OldSearchData, RegExp) ->
+ #dbs_sorting_mode{sorting = Sorting,
+ reverse = Reverse,
+ sort_key_no = SortKeyNo} = Msg,
+
+ DbData = ProcVars#process_variables.db_data,
+
+ #db_data{db = DbList,
+ sorting = OldSorting,
+ rev_sorting = OldReverse,
+ sort_key_no = OldSortKeyNo} = DbData,
+
+
+ NewDbList = sort_db_list(DbList, Sorting, OldSorting, Reverse, OldReverse,
+ SortKeyNo, OldSortKeyNo),
+
+ NewDbData = DbData#db_data{db = NewDbList,
+ sorting = Sorting,
+ rev_sorting = Reverse,
+ sort_key_no = SortKeyNo
+ },
+
+ NewProcVars = ProcVars#process_variables{db_data = NewDbData},
+ send_subset(NewProcVars, undefined, undefined),
+
+ SearchData =
+ case Sorting of
+ false ->
+ OldSearchData;
+ OldSorting when Reverse =:= OldReverse,
+ SortKeyNo =:= OldSortKeyNo ->
+ [];
+ OldSorting when Reverse =:= OldReverse,
+ OldSortKeyNo =:= undefined->
+ [];
+ _Other ->
+ ListAsStr = ProcVars#process_variables.lists_as_strings,
+ case catch tv_db_search:update_search(SearchWinCreated,
+ NewDbList, RegExp,
+ ListAsStr) of
+ {'EXIT', _Reason} ->
+ tv_db_search:reset_window(true),
+ [];
+ List ->
+ List
+ end
+ end,
+
+ {NewProcVars, SearchData}.
+
+
+
+
+
+
+
+
+sort_db_list(DbList, Sort, Sort, Rev, Rev, KeyNo, KeyNo) ->
+ % Already sorted!
+ DbList;
+sort_db_list(DbList, false, _OldSort, _Rev, _OldRev, _KeyNo, _OldKeyNo) ->
+ % No sorting, i.e., the old list order suffices!
+ DbList;
+sort_db_list(DbList, _Sort, _OldSort, Rev, _OldRev, KeyNo, _OldKeyNo) ->
+ tv_db_sort:mergesort(KeyNo, DbList, Rev).
+
+
+
+
+
+
+
+send_subset(ProcVars, EtsreadTime, DbsTime) ->
+ #process_variables{master_pid = MasterPid,
+ db_data = DbData,
+ list_of_keys = ListOfKeys} = ProcVars,
+
+ #db_data{subset_size = SubsetSize,
+ subset_pos = SubsetPos,
+ requested_row = RowNo,
+ db_size = DbSize,
+ db = DbList,
+ max_elem_size = MaxElemSize} = DbData,
+
+
+ RowData = get_requested_row_data(RowNo, DbList),
+
+ if
+ DbSize > 0 ->
+ Pos = ?COMM_FUNC_FILE:min(SubsetPos, DbSize),
+ % Requested_data may be shorter than requested, but that's OK,
+ % pd handles that correctly!
+ Subset = lists:sublist(DbList, Pos, SubsetSize),
+ MasterPid ! #dbs_subset{sender = self(),
+ data = Subset,
+ subset_pos = Pos,
+ db_length = DbSize,
+ list_of_keys = ListOfKeys,
+ max_elem_size = MaxElemSize,
+ requested_row = RowData,
+ required_time_etsread = EtsreadTime,
+ required_time_dbs = DbsTime
+ };
+ true ->
+ MasterPid ! #dbs_subset{sender = self(),
+ data = [],
+ subset_pos = 1,
+ db_length = 0,
+ list_of_keys = ListOfKeys,
+ max_elem_size = MaxElemSize,
+ requested_row = RowData,
+ required_time_etsread = EtsreadTime,
+ required_time_dbs = DbsTime
+ }
+ end.
+
+
+
+
+
+get_requested_row_data(undefined, _DbList) ->
+ [];
+get_requested_row_data(_RowNo, []) ->
+ [];
+get_requested_row_data(RowNo, DbList) ->
+ case catch lists:nth(RowNo, DbList) of
+ {'EXIT', _Reason} ->
+ [];
+ RowData ->
+ [RowData]
+ end.
+
+
+
+
+exit_signals(ExitInfo, MasterPid) ->
+ case ExitInfo of
+ {MasterPid, _Reason} ->
+ % When from master, just quit!
+ exit(normal);
+ _Other ->
+ done
+ end.
+
+
+
+
+update_db(NewList, ListOfKeys, ProcVars) ->
+ DbData = ProcVars#process_variables.db_data,
+ #db_data{db = OldDbList,
+ max_elem_size = MaxElemSize,
+ deleted = DelList,
+ ets_type = EtsType,
+ sorting = Sorting,
+ rev_sorting = RevSorting,
+ sort_key_no = SortKeyNo,
+ key_no = KeyNo} = DbData,
+
+ DbList = update_colors(OldDbList -- DelList),
+ OldList = dblist2list(DbList),
+ InsOrUpd = (NewList -- OldList),
+ DelOrUpd = (OldList -- NewList),
+
+ {Inserted, Deleted, Updated} = group_difflists(basetype(EtsType), KeyNo,
+ InsOrUpd,
+ DelOrUpd),
+ DelMarked = mark_deleted(KeyNo, Deleted, DbList),
+ Replaced = replace_elements(KeyNo, Updated, DelMarked),
+ NewDbList = add_elements(KeyNo, Inserted, Replaced, Sorting, RevSorting,
+ SortKeyNo),
+
+ NewMaxSize = ?COMM_FUNC_FILE:max(MaxElemSize,
+ ?COMM_FUNC_FILE:max(max_size(Replaced),
+ max_size(Inserted))),
+
+ NewDbData = DbData#db_data{db = NewDbList,
+ db_size = length(NewDbList),
+ max_elem_size = NewMaxSize,
+ deleted = list2dblist(Deleted, ?BLACK)
+ },
+
+ ProcVars#process_variables{db_data = NewDbData,
+ list_of_keys = ListOfKeys
+ }.
+
+
+
+
+
+
+update_object(Obj, OldObj, OldColor, ObjNo, ProcVars) ->
+ #process_variables{db_data = DbData,
+ etsread_pid = EtsreadPid} = ProcVars,
+
+ #db_data{key_no = KeyNo} = DbData,
+
+ %% Don't update if there are no changes!
+ case OldObj of
+ Obj when OldColor =/= ?BLACK -> %% Allow deleted objects to be inserted!
+ gs:window(dbwin, gs:start(), []),
+ case get(error_msg_mode) of
+ normal ->
+ tv_utils:notify(dbwin, "TV Notification", ["The object is unchanged!"]);
+ haiku ->
+ tv_utils:notify(dbwin, "TV Notification",
+ ["Stay the patient course,",
+ "Of little worth is your ire:",
+ "The object's unchanged." ])
+ end,
+ gs:destroy(dbwin),
+ {false, ProcVars};
+ _Other ->
+ %% Before we try to update the internal database, we have to check to see
+ %% whether the ETS/Mnesia update is allowed!
+ Result =
+ case OldColor of
+ ?BLACK ->
+ EtsreadPid ! #etsread_new_object{sender = self(),
+ object = Obj},
+ receive
+ #etsread_new_object_cfm{success = Success} ->
+ Success
+ after
+ 60000 ->
+ exit(etsread_not_responding)
+ end;
+ _OtherColor ->
+ EtsreadPid ! #etsread_update_object{sender = self(),
+ key_no = KeyNo,
+ object = Obj,
+ old_object = OldObj},
+ receive
+ #etsread_update_object_cfm{success = Success} ->
+ Success
+ after
+ 60000 ->
+ exit(etsread_not_responding)
+ end
+ end,
+ case Result of
+ false ->
+ gs:window(dbwin, gs:start(), [beep]),
+ case get(error_msg_mode) of
+ normal ->
+ tv_utils:notify(dbwin, "TV Notification",
+ ["Couldn't update table!"]);
+ haiku ->
+ tv_utils:notify(dbwin, "TV Notification",
+ ["Three things are certain:",
+ "Death, taxes, and lost updates.",
+ "Guess which has occurred."])
+ end,
+ gs:destroy(dbwin),
+ {false, ProcVars};
+ true ->
+ {true, update_object2(Obj, OldObj, OldColor, ObjNo, ProcVars)}
+ end
+ end.
+
+
+
+
+
+update_object2(Obj, OldObj, OldColor, ObjNo, ProcVars) ->
+ #process_variables{db_data = DbData} = ProcVars,
+
+ #db_data{db = DbList,
+ ets_type = EtsType, %% 'bag', 'set', 'ordered_set' or
+ %% 'duplicate_bag'
+ max_elem_size = MaxElemSize,
+ sorting = Sorting,
+ rev_sorting = RevSorting,
+ sort_key_no = SortKeyNo,
+ key_no = KeyNo} = DbData,
+
+ %% Replace the old element...
+ Key = element(KeyNo, Obj),
+ OldKey = element(KeyNo, OldObj),
+ %% If Key == OldKey, the old object shall only be replaced!
+ %% Otherwise the updated object shall be treated as a new
+ %% object when inserting it in the list!
+ %% In that latter case, we also have to check for duplicates!
+
+ Fun =
+ case basetype(EtsType) of
+ set ->
+ case Key of
+ OldKey ->
+ fun({Data,Color}, {Replaced,AccDb}) when element(KeyNo,Data) =/= Key ->
+ {Replaced, [{Data,Color} | AccDb]};
+ ({_Data,Color}, {Replaced,AccDb}) when not Replaced,
+ OldColor =:= ?BLACK,
+ Color =:= ?BLACK ->
+ {true, [{Obj,?RED1} | AccDb]};
+ ({_Data,Color}, {Replaced,AccDb}) when not Replaced,
+ OldColor =/= ?BLACK,
+ Color =/= ?BLACK ->
+ {true, [{Obj,?GREEN1} | AccDb]};
+ ({_Data,_Color}, {Replaced,AccDb}) ->
+ {Replaced, AccDb}
+ end;
+ _NewKey ->
+ fun({Data,Color}, {Replaced,AccDb}) ->
+ ElemKey = element(KeyNo,Data),
+ case ElemKey of
+ OldKey when not Replaced,
+ OldColor =:= ?BLACK,
+ Color =:= ?BLACK ->
+ {true, [{Obj,?RED1} | AccDb]};
+ OldKey when not Replaced,
+ OldColor =/= ?BLACK,
+ Color =/= ?BLACK ->
+ {true, [{Obj,?GREEN1} | AccDb]};
+ OldKey ->
+ {Replaced, AccDb};
+ Key ->
+ {Replaced, AccDb};
+ _OtherKey ->
+ {Replaced, [{Data,Color} | AccDb]}
+ end
+ end
+ end;
+
+ bag ->
+ case Key of
+ OldKey ->
+ fun({Data,_Color}, {Replaced,AccDb}) when Data =:= Obj ->
+ {Replaced, AccDb};
+ ({Data,Color}, {Replaced,AccDb}) when Data =/= OldObj ->
+ {Replaced, [{Data,Color} | AccDb]};
+ %% Clauses when Data =:= OldObj.
+ ({_Data,Color}, {Replaced,AccDb}) when not Replaced,
+ OldColor =:= ?BLACK,
+ Color =:= ?BLACK ->
+ {true, [{Obj,?RED1} | AccDb]};
+ ({_Data,Color}, {Replaced,AccDb}) when not Replaced,
+ OldColor =/= ?BLACK,
+ Color =/= ?BLACK ->
+ {true, [{Obj,Color} | AccDb]};
+ ({_Data,_Color}, {Replaced,AccDb}) ->
+ {Replaced, AccDb}
+ end;
+ _NewKey ->
+ fun({Data,Color}, {Replaced,AccDb}) when Data =:= OldObj,
+ not Replaced,
+ OldColor =:= ?BLACK,
+ Color =:= ?BLACK ->
+ {true, [{Obj,?RED1} | AccDb]};
+ ({Data,Color}, {Replaced,AccDb}) when Data =:= OldObj,
+ not Replaced,
+ OldColor =/= ?BLACK,
+ Color =/= ?BLACK ->
+ {true, [{Obj,?GREEN1} | AccDb]};
+ ({Data,_Color}, {Replaced,AccDb}) when Data =:= OldObj ->
+ {Replaced, AccDb};
+ ({Data,_Color}, {Replaced,AccDb}) when Data =:= Obj ->
+ {Replaced, AccDb};
+ ({Data,Color}, {Replaced,AccDb}) ->
+ {Replaced, [{Data,Color} | AccDb]}
+ end
+ end;
+
+ duplicate_bag ->
+ %% Multiple identical objects allowed, meaning that we shall not
+ %% remove anything, just replace one element.
+ case Key of
+ OldKey ->
+ fun({Data,Color}, {Replaced,AccDb}) when Data =:= Obj ->
+ {Replaced, [{Data,Color} | AccDb]};
+ ({Data,Color}, {Replaced,AccDb}) when Data =/= OldObj ->
+ {Replaced, [{Data,Color} | AccDb]};
+ ({_Data,Color}, {Replaced,AccDb}) when not Replaced,
+ OldColor =:= ?BLACK,
+ Color =:= ?BLACK ->
+ {true, [{Obj,?RED1} | AccDb]};
+ ({_Data,Color}, {Replaced,AccDb}) when not Replaced,
+ OldColor =/= ?BLACK,
+ Color =/= ?BLACK ->
+ {true, [{Obj,Color} | AccDb]};
+ ({Data,Color}, {Replaced,AccDb}) ->
+ {Replaced, [{Data,Color} | AccDb]}
+ end;
+ _NewKey ->
+ fun({Data,Color}, {Replaced,AccDb}) when Data =:= OldObj,
+ not Replaced,
+ OldColor =:= ?BLACK,
+ Color =:= ?BLACK ->
+ {true, [{Obj,?RED1} | AccDb]};
+ ({Data,Color}, {Replaced,AccDb}) when Data =:= OldObj,
+ not Replaced,
+ OldColor =/= ?BLACK,
+ Color =/= ?BLACK ->
+ {true, [{Obj,?GREEN1} | AccDb]};
+ ({Data,Color}, {Replaced,AccDb}) when Data =:= OldObj ->
+ {Replaced, [{Data,Color} | AccDb]};
+ ({Data,Color}, {Replaced,AccDb}) when Data =:= Obj ->
+ {Replaced, [{Data,Color} | AccDb]};
+ ({Data,Color}, {Replaced,AccDb}) ->
+ {Replaced, [{Data,Color} | AccDb]}
+ end
+ end
+ end,
+
+ FilterFun = fun(Acc0, L) ->
+ lists:foldl(Fun, Acc0, L)
+ end,
+
+
+ {Repl, TmpList} =
+ case split(ObjNo, DbList) of
+ {L1, [{OldObj,OldColor} | T]} when OldColor =/= ?BLACK ->
+ {true,
+ lists:reverse(element(2, FilterFun({true,[]}, L1))) ++
+ [{Obj,?GREEN1} | lists:reverse(element(2, FilterFun({true,[]},T)))]};
+ {L1, [{OldObj,OldColor} | T]} ->
+ {true,
+ lists:reverse(element(2, FilterFun({true,[]}, L1))) ++
+ [{Obj,?RED1} | lists:reverse(element(2, FilterFun({true,[]}, T)))]};
+ {L1, L2} ->
+ {R1, NewL1} = FilterFun({false,[]}, L1),
+ {R2, NewL2} = FilterFun({false,[]}, L2),
+ {R1 or R2, lists:reverse(NewL1) ++ lists:reverse(NewL2)}
+ end,
+
+ NewDbList =
+ case Repl of
+ true when not Sorting ->
+ TmpList;
+ true ->
+ tv_db_sort:mergesort(SortKeyNo, TmpList, RevSorting);
+ false ->
+ TmpList2 =
+ case Key of
+ OldKey ->
+ lists:reverse(element(2, FilterFun({false,[]}, TmpList)));
+ _OtherKey ->
+ lists:reverse(element(2, FilterFun({true,[]}, TmpList))) ++
+ [{Obj,?RED1}]
+ end,
+ case Sorting of
+ false ->
+ TmpList2;
+ true ->
+ tv_db_sort:mergesort(SortKeyNo, TmpList2, RevSorting)
+ end
+ end,
+ NewMaxSize = ?COMM_FUNC_FILE:max(MaxElemSize, max_size([Obj])),
+ NewDbData = DbData#db_data{db = NewDbList,
+ db_size = length(NewDbList),
+ max_elem_size = NewMaxSize
+ },
+ ProcVars#process_variables{db_data = NewDbData}.
+
+
+
+
+
+delete_object(_Obj, ?BLACK, _ObjNo, ProcVars) ->
+ %% Don't delete already deleted objects!!!
+ {false, ProcVars};
+delete_object(undefined, undefined, _ObjNo, ProcVars) ->
+ {false, ProcVars};
+delete_object(Obj, _ObjColor, ObjNo, ProcVars) ->
+ #process_variables{db_data = DbData,
+ etsread_pid = EtsreadPid} = ProcVars,
+
+ #db_data{db = DbList,
+ deleted = OldDeleted} = DbData,
+
+ %% Before we try to update the internal database, we have to check to see
+ %% whether the ETS/Mnesia update is allowed!
+ EtsreadPid ! #etsread_delete_object{sender = self(),
+ object = Obj},
+ Result =
+ receive
+ #etsread_delete_object_cfm{success = Success} ->
+ Success
+ after
+ 60000 ->
+ exit(etsread_not_responding)
+ end,
+
+ case Result of
+ false ->
+ gs:window(dbwin, gs:start(), [beep]),
+ case get(error_msg_mode) of
+ normal ->
+ tv_utils:notify(dbwin, "TV Notification",
+ ["Couldn't update table!"]);
+ haiku ->
+ tv_utils:notify(dbwin, "TV Notification",
+ ["Three things are certain:",
+ "Death, taxes, and lost updates.",
+ "Guess which has occurred."])
+ end,
+ gs:destroy(dbwin),
+ {false, ProcVars};
+ true ->
+ %% Replace the old element...
+ %% Have to beware of duplicate_bag tables,
+ %% i.e., the same object may occur more than
+ %% once, but we only want to remove it once!
+ {Repl, TmpList} =
+ case split(ObjNo, DbList) of
+ {L1, [{Obj,_Color} | T]} ->
+ {true, L1 ++ [{Obj,?BLACK} | T]};
+ {L1, L2} ->
+ {false, L1 ++ L2}
+ end,
+ NewDbList =
+ case Repl of
+ true ->
+ TmpList;
+ false ->
+ Fun = fun({Data,TmpColor},
+ {Removed,AccDb}) when Data =/= Obj ->
+ {Removed, [{Data,TmpColor} | AccDb]};
+ ({_Data,TmpColor},
+ {Removed,AccDb}) when not Removed, TmpColor =/= ?BLACK ->
+ {true, [{Obj,?BLACK} | AccDb]};
+ ({Data,TmpColor},
+ {Removed,AccDb}) ->
+ {Removed, [{Data,TmpColor} | AccDb]}
+ end,
+ lists:reverse(element(2, lists:foldl(Fun, {false,[]}, DbList)))
+ end,
+ NewDbData = DbData#db_data{db = NewDbList,
+ db_size = length(NewDbList),
+ deleted = [{Obj,?BLACK} | OldDeleted]},
+ {true, ProcVars#process_variables{db_data = NewDbData}}
+ end.
+
+
+
+
+
+new_object(Obj, ProcVars) ->
+ #process_variables{db_data = DbData,
+ etsread_pid = EtsreadPid} = ProcVars,
+
+ #db_data{db = DbList,
+ max_elem_size = MaxElemSize,
+ ets_type = EtsType, %% 'bag', 'set' or 'duplicate_bag'
+ sorting = Sorting,
+ rev_sorting = RevSorting,
+ sort_key_no = SortKeyNo,
+ key_no = KeyNo} = DbData,
+
+ %% Before we try to update the internal database, we have to check to see
+ %% whether the ETS/Mnesia update is allowed!
+ EtsreadPid ! #etsread_new_object{sender = self(),
+ object = Obj},
+ Result =
+ receive
+ #etsread_new_object_cfm{success = Success} ->
+ Success
+ after
+ 60000 ->
+ exit(etsread_not_responding)
+ end,
+
+ case Result of
+ false ->
+ gs:window(dbwin, gs:start(), [beep]),
+ case get(error_msg_mode) of
+ normal ->
+ tv_utils:notify(dbwin, "TV Notification",
+ ["Couldn't update table!"]);
+ haiku ->
+ tv_utils:notify(dbwin, "TV Notification",
+ ["Three things are certain:",
+ "Death, taxes, and lost updates.",
+ "Guess which has occurred."])
+ end,
+ gs:destroy(dbwin),
+ {false, ProcVars};
+ true ->
+ Key = element(KeyNo, Obj),
+ NewDbList = insert_new_object(EtsType, Key, KeyNo, Obj, DbList, Sorting,
+ RevSorting, SortKeyNo),
+ NewMaxSize = ?COMM_FUNC_FILE:max(MaxElemSize, max_size([Obj])),
+ NewDbData = DbData#db_data{db = NewDbList,
+ db_size = length(NewDbList),
+ max_elem_size = NewMaxSize
+ },
+ {true, ProcVars#process_variables{db_data = NewDbData}}
+ end.
+
+
+
+
+
+insert_new_object(EtsType,Key,KeyNo,Obj,DbList,Sorting,RevSorting,SortKeyNo) ->
+ %% Remove elements from the list that ought not to be there,
+ %% according to the table type!
+
+ Fun =
+ case basetype(EtsType) of
+ set ->
+ fun({Data,Color}, {Replaced,AccDb}) when element(KeyNo,Data) =/= Key ->
+ {Replaced, [{Data,Color} | AccDb]};
+ ({Data,Color}, {Replaced,AccDb}) when not Replaced,
+ Color =/= ?BLACK,
+ Data =/= Obj->
+ {true, [{Obj,?GREEN1} | AccDb]};
+ ({_Data,Color}, {Replaced,AccDb}) when not Replaced,
+ Color =/= ?BLACK ->
+ {true, [{Obj,Color} | AccDb]};
+ ({_Data,Color}, {Replaced,AccDb}) when not Replaced,
+ Color =:= ?BLACK ->
+ {true, [{Obj, ?RED1} | AccDb]};
+ ({_Data,Color}, {Replaced,AccDb}) when Replaced,
+ Color =:= ?BLACK ->
+ {false, AccDb};
+ ({_Data,_Color}, {Replaced,AccDb}) ->
+ {Replaced, AccDb}
+ end;
+ bag ->
+ fun({Data,Color}, {Replaced,AccDb}) when Data =/= Obj ->
+ {Replaced, [{Data,Color} | AccDb]};
+ ({_Data,Color}, {Replaced,AccDb}) when not Replaced,
+ Color =/= ?BLACK ->
+ {true, [{Obj,Color} | AccDb]};
+ ({_Data,Color}, {Replaced,AccDb}) when Replaced,
+ Color =/= ?BLACK ->
+ {true, AccDb};
+ ({_Data,Color}, {Replaced,AccDb}) when Replaced,
+ Color =:= ?BLACK ->
+ {true, AccDb};
+ ({_Data,Color}, {Replaced,AccDb}) when not Replaced,
+ Color =:= ?BLACK ->
+ {true, [{Obj, ?RED1} | AccDb]};
+ ({_Data,_Color}, {Replaced,AccDb}) ->
+ {Replaced, AccDb}
+ end;
+ duplicate_bag ->
+ %% The fun is never called if the type is duplicate_bag,
+ %% because all we have to do with new elements is to insert
+ %% them (multiple identical objects allowed).
+ not_used
+ end,
+
+ FilterFun = fun(Acc0, L) ->
+ lists:foldl(Fun, Acc0, L)
+ end,
+
+ {_Replaced, TmpDbList} =
+ case EtsType of
+ duplicate_bag ->
+ {false, DbList};
+ _OtherType ->
+ {R,L} = FilterFun({false,[]}, DbList),
+ {R, lists:reverse(L)}
+ end,
+
+ case Sorting of
+ false ->
+ TmpDbList ++ [{Obj,?RED1}];
+ true ->
+ %% The original list is already sorted!
+ %% Just merge the two lists together!
+ tv_db_sort:merge(SortKeyNo, TmpDbList, [{Obj,?RED1}], RevSorting)
+ end.
+
+
+
+
+
+
+max_size([]) ->
+ 0;
+max_size(L) ->
+ max_size(L, 0).
+
+
+
+max_size([], CurrMax) ->
+ CurrMax;
+max_size([H | T], CurrMax) when is_tuple(H) ->
+ Size = size(H),
+ if
+ Size >= CurrMax ->
+ max_size(T, Size);
+ true ->
+ max_size(T, CurrMax)
+ end;
+max_size([_H | T], CurrMax) ->
+ Size = 1,
+ if
+ Size >= CurrMax ->
+ max_size(T, Size);
+ true ->
+ max_size(T, CurrMax)
+ end.
+
+
+
+
+
+add_elements(_KeyNo, Inserted, List, false, _RevSorting, _SortKeyNo) ->
+ % Remember that the order of the original list has to be preserved!
+ List ++ list2dblist(Inserted, ?RED1);
+add_elements(_KeyNo, Inserted, List, _Sorting, RevSorting, SortKeyNo) ->
+ % The original list is already sorted - sort the new elements, and
+ % just merge the two lists together!
+ SortedInsertedList = tv_db_sort:mergesort(SortKeyNo,
+ list2dblist(Inserted, ?RED1),
+ RevSorting),
+ tv_db_sort:merge(SortKeyNo, List, SortedInsertedList, RevSorting).
+
+
+
+
+
+ %% We assume the list already has been sorted, i.e., since the order won't
+ %% be changed by marking an element deleted, we DON'T have to sort the list
+ %% once again!
+
+mark_deleted(_KeyNo, [], List) ->
+ List;
+mark_deleted(KeyNo, [Data | T], List) ->
+ KeyValue = tv_db_sort:get_compare_value(KeyNo, Data),
+ NewList = mark_one_element_deleted(KeyNo, KeyValue, Data, List, []),
+ mark_deleted(KeyNo, T, NewList).
+
+
+
+
+
+
+
+
+mark_one_element_deleted(_KeyNo, _KeyValue, _Data, [], Acc) ->
+ Acc;
+mark_one_element_deleted(KeyNo, {tuple, KeyValue},
+ Data, [{DataTuple, Color} | Tail], Acc) ->
+ OldKeyValue = tv_db_sort:get_compare_value(KeyNo, DataTuple),
+ % Remember that the order of the original list has to be preserved!
+ if
+ OldKeyValue =:= {tuple, KeyValue} ->
+ Acc ++ [{Data, ?BLACK}] ++ Tail;
+ true ->
+ mark_one_element_deleted(KeyNo, {tuple, KeyValue}, Data, Tail,
+ Acc ++ [{DataTuple, Color}])
+ end;
+mark_one_element_deleted(KeyNo, _KeyValue, Data, [{DataTuple, Color} | Tail], Acc) ->
+ if
+ Data =:= DataTuple ->
+ Acc ++ [{Data, ?BLACK}] ++ Tail;
+ true ->
+ mark_one_element_deleted(KeyNo, _KeyValue, Data, Tail,
+ Acc ++ [{DataTuple, Color}])
+ end.
+
+
+
+
+
+
+
+ %% We assume the list already has been sorted, i.e., since the order won't
+ %% be changed by marking an element updated, we DON'T have to sort the list
+ %% once again!
+
+replace_elements(_KeyNo, [], List) ->
+ List;
+replace_elements(KeyNo, [Data | T], List) ->
+ KeyValue = tv_db_sort:get_compare_value(KeyNo, Data),
+ NewList = replace_one_element(KeyNo, KeyValue, Data, List, []),
+ replace_elements(KeyNo, T, NewList).
+
+
+
+
+
+
+
+replace_one_element(_KeyNo, _Key, _Data, [], Acc) ->
+ Acc;
+replace_one_element(KeyNo, {tuple, Key1}, Data, [{DataTuple, Color} | Tail], Acc) ->
+ Key2 = tv_db_sort:get_compare_value(KeyNo, DataTuple),
+ % Remember that the order of the original list has to be preserved!
+ if
+ Key2 =:= {tuple, Key1} ->
+ Acc ++ [{Data, ?GREEN1}] ++ Tail;
+ true ->
+ replace_one_element(KeyNo, {tuple, Key1}, Data, Tail,
+ Acc ++ [{DataTuple, Color}])
+ end;
+replace_one_element(_KeyNo, _KeyValue, _Data, [{DataTuple, Color} | Tail], Acc) ->
+ % Can't replace an element with no key!
+ Acc ++ [{DataTuple, Color} | Tail].
+
+
+
+
+
+
+
+
+group_difflists(bag, _KeyNo, Inserted, Deleted) ->
+ %% Since the ETS table is of bag type, no element can be updated, i.e.,
+ %% it can only be deleted and re-inserted, otherwise a new element will be added.
+ {Inserted, Deleted, []};
+group_difflists(duplicate_bag, _KeyNo, Inserted, Deleted) ->
+ %% Since the ETS table is of duplicate_bag type, no element can be updated, i.e.,
+ %% it can only be deleted and re-inserted, otherwise a new element will be added.
+ {Inserted, Deleted, []};
+group_difflists(set, _KeyNo, [], Deleted) ->
+ %% Updated elements have to be present in both lists, i.e., if one list is empty,
+ %% the other contains no updated elements - they are either inserted or deleted!
+ {[], Deleted, []};
+group_difflists(set, _KeyNo, Inserted, []) ->
+ {Inserted, [], []};
+group_difflists(set, KeyNo, InsOrUpd, DelOrUpd) ->
+ match_difflists(KeyNo, InsOrUpd, DelOrUpd, [], []).
+
+
+
+
+
+
+match_difflists(_KeyNo, [], Deleted, Inserted, Updated) ->
+ {Inserted, Deleted, Updated};
+match_difflists(KeyNo, [Data | T], DelOrUpd, InsAcc, UpdAcc) ->
+ % This function is only called in case of a 'set' ETS table.
+ % 'Set' type of ETS table means there are unique keys. If two elements in
+ % InsOrUpd and DelOrUpd have the same key, that element has been updated,
+ % and is added to the Updated list, and removed from the original two lists.
+ % After the two lists have been traversed in this way, the remaining elements
+ % in DelOrUpd forms the new Deleted list (analogous for InsOrUpd).
+ % If we want to improve the performance, we could check which list is the
+ % shortest, since the traversing time depends on this.
+ Key = element(KeyNo, Data),
+ case searchdelete(Key, KeyNo, DelOrUpd) of
+ {true, NewDelOrUpd} ->
+ match_difflists(KeyNo, T, NewDelOrUpd, InsAcc, [Data | UpdAcc]);
+ {false, SameDelOrUpd} ->
+ match_difflists(KeyNo, T, SameDelOrUpd, [Data | InsAcc], UpdAcc)
+ end.
+
+
+
+
+searchdelete(_Key, _ElemNo, []) ->
+ {false, []};
+searchdelete(Key, ElemNo, List) ->
+ searchdelete(Key, ElemNo, List, []).
+
+
+
+
+
+searchdelete(_Key, _ElemNo, [], Acc) ->
+ {false, Acc};
+searchdelete(Key, ElemNo, [Tuple | Tail], Acc) ->
+ % We don't use standard libraries, 'cause we want to make an 'atomic'
+ % operation, i.e., we will not search the list two times...
+ case (element(ElemNo, Tuple) =:= Key) of
+ true ->
+ {true, Acc ++ Tail}; % Return the list without the matching element
+ _Other ->
+ searchdelete(Key, ElemNo, Tail, [Tuple | Acc])
+ end.
+
+
+
+
+
+
+
+dblist2list([]) ->
+ [];
+dblist2list([{Data, _Color} | T]) ->
+ [Data | dblist2list(T)].
+
+
+
+
+
+
+
+list2dblist([], _Color) ->
+ [];
+list2dblist([Data | T], Color) ->
+ [{Data, Color} | list2dblist(T, Color)].
+
+
+
+
+
+
+
+
+update_colors([]) ->
+ [];
+update_colors([{Data, Color} | T]) ->
+ [{Data, new_color(Color)} | update_colors(T)].
+
+
+
+
+
+
+
+
+new_color(?GREEN1) ->
+ ?GREEN2;
+new_color(?GREEN2) ->
+ ?GREEN3;
+new_color(?GREEN3) ->
+ ?GREEN4;
+new_color(?GREEN4) ->
+ ?GREEN5;
+new_color(?GREEN5) ->
+ ?DEFAULT_BTN_COLOR;
+new_color(?RED1) ->
+ ?RED2;
+new_color(?RED2) ->
+ ?RED3;
+new_color(?RED3) ->
+ ?RED4;
+new_color(?RED4) ->
+ ?RED5;
+new_color(?RED5) ->
+ ?DEFAULT_BTN_COLOR;
+new_color(_Other) ->
+ ?DEFAULT_BTN_COLOR. % Default shall be gray.
+
+
+
+
+
+
+
+
+compute_elapsed_seconds({H1, M1, S1}, {H2, M2, S2}) ->
+ ElapsedHours = get_time_diff(hours, H1, H2),
+ ElapsedMinutes = get_time_diff(minutes, M1, M2),
+ ElapsedSeconds = get_time_diff(seconds, S1, S2),
+ (ElapsedHours * 3600) + (ElapsedMinutes * 60) + ElapsedSeconds + 1.
+
+
+
+
+
+
+
+get_time_diff(_Type, T1, T2) when T1 =< T2 ->
+ T2 - T1;
+get_time_diff(hours, T1, T2) ->
+ T2 + 24 - T1;
+get_time_diff(minutes, T1, T2) ->
+ T2 + 60 - T1;
+get_time_diff(seconds, T1, T2) ->
+ T2 + 60 - T1.
+
+
+
+
+split(_N, []) ->
+ {[], []};
+split(0, List) ->
+ {[], List};
+split(N, List) ->
+ split2(0, N - 1, [], List).
+
+
+
+split2(Ctr, N, Acc, [H | T]) when Ctr < N ->
+ split2(Ctr + 1, N, [H | Acc], T);
+split2(_Ctr, _N, Acc, []) ->
+ {lists:reverse(Acc), []};
+split2(_Ctr, _N, Acc, List) ->
+ {lists:reverse(Acc), List}.
+
+basetype(ordered_set) ->
+ set;
+basetype(Any) ->
+ Any.
diff --git a/lib/tv/src/tv_db_int_def.hrl b/lib/tv/src/tv_db_int_def.hrl
new file mode 100644
index 0000000000..d2cb8adee5
--- /dev/null
+++ b/lib/tv/src/tv_db_int_def.hrl
@@ -0,0 +1,80 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%%*********************************************************************
+%%%
+%%% Description: Internal definitions for the database part of the table
+%%% tool.
+%%%
+%%%*********************************************************************
+
+-define(WHITE, {255, 255, 255}).
+-define(MEDIUM_GRAY, {170, 170, 170}).
+
+
+-define(LIGHT_GREEN, { 0, 255, 0}).
+-define(GREEN, { 50, 215, 50}).
+-define(DARK_GREEN, { 50, 170, 50}).
+-define(FOREST_GREEN, { 34, 139, 34}).
+-define(DARK_FOREST_GREEN, { 15, 100, 15}).
+
+
+
+-define(RED, {255, 0, 0}).
+-define(PINK, {255, 130, 170}).
+-define(LIGHT_VIOLET, {220, 150, 225}).
+-define(VIOLET, {160, 70, 180}).
+-define(DARK_VIOLET, {100, 10, 130}).
+
+
+
+
+
+
+-record(db_data, {db = [], % List containing all elements
+ db_size = 0, % Number of elements in 'db'
+ max_elem_size = 0, % Size of largest element in db.
+ hidden = [], % Elements (i.e., keys) not to be shown
+ deleted = [], % Elements just deleted
+ subset_size, % Size of the subset to be extracted and
+ % shown
+ subset_pos, % Position in list where subset starts
+ sorting = false, % Tells whether sorting is used ('true'
+ % or 'false')
+ requested_row = 0,
+ rev_sorting = false, % Tells whether the sorting (if any) is
+ % in reversed order or not ('true' or
+ % 'false')
+ sort_key_no, % Element in each tuple to use as sorting
+ % element
+ key_no, % Element in each tuple to use as key
+ % (this element is used when updating the
+ % dblist, i.e., inserting, deleting a.s.o)
+ ets_type % 'bag' or 'set'
+ }).
+
+
+-record(process_variables, {master_pid,
+ etsread_pid,
+ db_data = #db_data{},
+ list_of_keys = [],
+ lists_as_strings = true
+ }).
+
+
+
+
diff --git a/lib/tv/src/tv_db_search.erl b/lib/tv/src/tv_db_search.erl
new file mode 100644
index 0000000000..edd3c188e2
--- /dev/null
+++ b/lib/tv/src/tv_db_search.erl
@@ -0,0 +1,485 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%%*********************************************************************
+%%%
+%%% Description: Code for the search window.
+%%%
+%%%*********************************************************************
+-module(tv_db_search).
+
+
+
+-export([create_window/1,
+ resize_window/1,
+ reset_window/1,
+ destroy_window/1,
+ mark_busy/1,
+ mark_nonbusy/1,
+ get_input_and_search/3,
+ update_search/4,
+ string_to_term/1
+ ]).
+
+
+
+
+-include("tv_int_def.hrl").
+-include("tv_int_msg.hrl").
+-include("tv_db_int_def.hrl").
+
+
+
+
+-define(WIN_WIDTH, 445).
+-define(SMALL_WIN_HEIGHT, 117).
+-define(BIG_WIN_HEIGHT, 335).
+-define(FRAME_WIDTH, 429). % 334
+-define(OLD_FRAME_WIDTH, 334).
+-define(FRAME_HEIGHT, 105).
+-define(FRAME_XPOS, (10-2)).
+-define(FRAME_YPOS, 10).
+-define(ENTRY_XPOS, 9).
+-define(ENTRY_YPOS, 31).
+-define(ENTRY_WIDTH, (?OLD_FRAME_WIDTH-10-2*?ENTRY_XPOS-5)).
+-define(LISTBOX_WIDTH, ?WIN_WIDTH-2*?FRAME_XPOS+1).
+-define(LISTBOX_HEIGHT, 162).
+-define(LISTBOX_XPOS, ?FRAME_XPOS-2).
+-define(LISTBOX_YPOS, ?SMALL_WIN_HEIGHT+8).
+-define(BTN_WIDTH, 80).
+-define(BTN_HEIGHT, 30).
+-define(BTN_XPOS, ?OLD_FRAME_WIDTH-6).
+-define(BG_COLOUR, {217,217,217}).
+
+
+
+
+
+
+create_window(true) ->
+ gs:config(win, [raise]);
+create_window(false) ->
+ gs:window(win, gs:start(), [{width,?WIN_WIDTH},
+ {height,?SMALL_WIN_HEIGHT},
+ {data,small},
+ {bg,?BG_COLOUR},
+ {title,"[TV] Search Object"},
+ {destroy,true},
+ {configure,true},
+ {cursor,arrow}
+ ]),
+
+ F = gs:frame(win, [{width,?FRAME_WIDTH},
+ {height,?FRAME_HEIGHT},
+ {x,?FRAME_XPOS},
+ {y,?FRAME_YPOS},
+ {bw,2},
+ {bg,?BG_COLOUR}
+ ]),
+
+ gs:label(F, [{width,80},
+ {height,25},
+ {x,?ENTRY_XPOS+2},
+ {y,8},
+ {align,w},
+ {bg,?BG_COLOUR},
+ {fg, {0,0,0}},
+ {label, {text,"Search for:"}}
+ ]),
+
+ gs:entry(entry, F, [{width,?ENTRY_WIDTH},
+ {height,30},
+ {x,?ENTRY_XPOS},
+ {y,?ENTRY_YPOS},
+ {insert, {0,"<Search expression>"}},
+ {bg, {255,255,255}},
+ {fg, {0,0,0}},
+ {cursor,text},
+ {justify,left},
+ {keypress,true},
+ {setfocus,true}
+ ]),
+
+ Group = list_to_atom("expr" ++ pid_to_list(self())),
+ RadioWidth = round(?ENTRY_WIDTH / 2),
+ gs:radiobutton(expr_term, F, [{width,RadioWidth - 45},
+ {height,25},
+ {x,?ENTRY_XPOS},
+ {y,?ENTRY_YPOS+40},
+ {group,Group},
+ {align, c},
+ {label,{text,"as term"}},
+ {select,true}
+ ]),
+ gs:radiobutton(expr_regexp, F, [{width,RadioWidth + 45},
+ {height,25},
+ {x,?ENTRY_XPOS+RadioWidth-20-26},
+ {y,?ENTRY_YPOS+40},
+ {group,Group},
+ {align,c},
+ {label,{text,"as regular expression"}}
+ ]),
+
+ gs:button(search, F, [{width,?BTN_WIDTH},
+ {height,?BTN_HEIGHT},
+ {x,?BTN_XPOS},
+ {y,11},
+ {label, {text,"Search"}},
+ {bg,?BG_COLOUR},
+ {fg, {0,0,0}}
+ ]),
+ gs:button(cancel, F, [{width,?BTN_WIDTH},
+ {height,?BTN_HEIGHT},
+ {x,?BTN_XPOS},
+ {y,?BTN_HEIGHT+11+10},
+ {label, {text,"Cancel"}},
+ {data,cancel},
+ {bg,?BG_COLOUR},
+ {fg, {0,0,0}}
+ ]),
+ expand_window(),
+ gs:config(entry, [{select, {0,1000}}]),
+ gs:config(win, [{map,true}]).
+
+
+
+
+resize_window(false) ->
+ done;
+resize_window(true) ->
+ gs:config(win, [{width,?WIN_WIDTH},
+ {height,?BIG_WIN_HEIGHT}
+ ]).
+
+
+
+
+reset_window(false) ->
+ done;
+reset_window(true) ->
+ gs:config(listbox, [clear]),
+ gs:config(objects_found, [{label, {text,""}}]).
+
+
+
+
+destroy_window(false) ->
+ done;
+destroy_window(true) ->
+ gs:destroy(win).
+
+
+
+mark_busy(false) ->
+ done;
+mark_busy(true) ->
+ gs:config(win, [{cursor,busy}]),
+ gs:config(entry, [{cursor,busy}]).
+
+
+
+
+mark_nonbusy(false) ->
+ done;
+mark_nonbusy(true) ->
+ gs:config(win, [{cursor,arrow}]),
+ gs:config(entry, [{cursor,text}]).
+
+
+
+
+get_input_and_search(DbList, IsRegExp, ListAsStr) ->
+ get_input_and_search(DbList, IsRegExp, true, ListAsStr).
+
+
+
+
+get_input_and_search(DbList, IsRegExp, Notify, ListAsStr) ->
+ Str = get_entry_text(),
+ StrConvRes = case IsRegExp of
+ true ->
+ string_to_regexp(Str);
+ false ->
+ string_to_term(Str)
+ end,
+
+ case StrConvRes of
+ {ok, TermOrRE} ->
+ search(IsRegExp, TermOrRE, DbList, ListAsStr);
+ {error, {_Reason, Msg}} when Notify ->
+ gs:config(win, [beep]),
+ tv_utils:notify(win, "TV Notification", Msg);
+ {error, {_Reason, _Msg}} ->
+ done
+ end.
+
+
+
+update_search(false, _DbList, _IsRegExp, _ListAsStr) ->
+ done;
+update_search(true, DbList, true, ListAsStr) ->
+ get_input_and_search(DbList, false, false, ListAsStr);
+update_search(true, DbList, false, ListAsStr) ->
+ get_input_and_search(DbList, true, false, ListAsStr).
+
+
+
+get_entry_text() ->
+ gs:read(entry,text).
+
+
+
+string_to_regexp(Str) ->
+ case regexp:parse(Str) of
+ {ok, RegExp} ->
+ {ok, RegExp};
+ _Error ->
+ case get(error_msg_mode) of
+ normal ->
+ {error, {not_a_regexp, "Please enter a regular expression!"}};
+ haiku ->
+ {error, {not_a_regexp, ["Being incorrect",
+ "The regular expression",
+ "Must now be retyped."]}}
+ end
+ end.
+
+
+
+string_to_term(Str) ->
+ case catch erl_scan:string(Str ++ ". ") of
+ {ok, ScannedStr, _No} ->
+ case erl_parse:parse_term(ScannedStr) of
+ {ok, Term} ->
+ {ok, Term};
+ _Other ->
+ %% May be a PID, have to check this, since erl_scan
+ %% currently cannot handle this case... :-(
+ case catch list_to_pid(Str) of
+ Pid when is_pid(Pid) ->
+ {ok, Pid};
+ _Error ->
+ case get(error_msg_mode) of
+ normal ->
+ {error, {not_a_term, "Please enter a valid term!"}};
+ haiku ->
+ {error, {not_a_term, ["Aborted effort.",
+ "Reflect, repent and retype:",
+ "Enter valid term."]}}
+ end
+ end
+ end;
+ _Error ->
+ case get(error_msg_mode) of
+ normal ->
+ {error, {not_a_term, "Please enter a valid term!"}};
+ haiku ->
+ {error, {not_a_term, ["Aborted effort.",
+ "Reflect, repent and retype:",
+ "Enter valid term."]}}
+ end
+ end.
+
+
+
+search(IsRegExp, SearchValue, DbList, ListAsStr) ->
+ gs:config(cancel, [{label, {text,"Stop"}}]),
+ mark_busy(true),
+ reset_window(true),
+ SearchRes = traverse(SearchValue, DbList, 1, length(DbList), [], IsRegExp, ListAsStr),
+ gs:config(cancel, [{label, {text,"Cancel"}}]),
+ mark_nonbusy(true),
+ SearchRes.
+
+
+
+
+
+expand_window() ->
+ gs:listbox(listbox, win, [{width,?LISTBOX_WIDTH},
+ {height,?LISTBOX_HEIGHT},
+ {x,?LISTBOX_XPOS},
+ {y,?LISTBOX_YPOS},
+ {bg, {255,255,255}},
+ {fg, {0,0,0}},
+ {scrollbg,?BG_COLOUR},
+ {scrollfg,?BG_COLOUR},
+ {hscroll,bottom},
+ {vscroll,right},
+ {click,true},
+ {doubleclick,false},
+ {selectmode,single}
+ ]),
+ gs:label(objects_found, win, [{width,?LISTBOX_WIDTH},
+ {height,25},
+ {x,?LISTBOX_XPOS},
+ {y,?LISTBOX_YPOS+?LISTBOX_HEIGHT+13},
+ {align,w},
+ {bg,?BG_COLOUR},
+ {fg, {0,0,0}}
+ ]),
+ gs:config(win, [{width,?WIN_WIDTH},
+ {height,?BIG_WIN_HEIGHT}
+ ]).
+
+
+
+
+
+
+
+traverse(Pattern, [Object | T], Row, Length, Acc, IsRegExp, ListAsStr) ->
+ SearchRes =
+ case IsRegExp of
+ true ->
+ search_for_regexp(Pattern, Object, ListAsStr);
+ false ->
+ compare_terms(Pattern, Object)
+ end,
+
+ NewAcc
+ = case SearchRes of
+ found ->
+ RowStr = integer_to_list(Row),
+ LengthStr = integer_to_list(Length),
+ ObjectStr = case ListAsStr of
+ true ->
+ lists:flatten(tv_io_lib:format("~p", [Object]));
+ false ->
+ lists:flatten(tv_io_lib:write(Object))
+ end,
+
+ gs:config(listbox,
+ [{add,
+ " Row " ++ RowStr ++ ":" ++
+ lists:duplicate(length(LengthStr)-length(RowStr), " ") ++
+ " " ++ ObjectStr}
+ ]),
+ gs:config(objects_found,
+ [{label,
+ {text,integer_to_list(length(Acc)+1) ++
+ " object(s) found"}}
+ ]),
+ [{Row,Object} | Acc];
+ not_found ->
+ Acc
+ end,
+ receive
+ {gs,cancel,click,_Data,_Args} ->
+ gs:config(objects_found,
+ [{label,
+ {text,integer_to_list(gs:read(listbox,size)) ++
+ " object(s) found"}}
+ ]),
+ lists:reverse(NewAcc)
+ after
+ 0 ->
+ traverse(Pattern, T, Row+1, Length, NewAcc, IsRegExp, ListAsStr)
+ end;
+traverse(_Pattern, [], _N, _Length, Acc, _IsRegExp, _ListAsStr) ->
+ gs:config(objects_found,
+ [{label,
+ {text,integer_to_list(gs:read(listbox,size)) ++
+ " object(s) found"}}
+ ]),
+ lists:reverse(Acc).
+
+
+
+
+search_for_regexp(Pattern, Elem, ListAsStr) ->
+ ListToSearch =
+ case ListAsStr of
+ true ->
+ lists:flatten(tv_io_lib:format("~p", [Elem]));
+ false ->
+ lists:flatten(tv_io_lib:write(Elem))
+ end,
+
+ case regexp:first_match(ListToSearch, Pattern) of
+ {match, _, _} ->
+ found;
+ _Other ->
+ not_found
+ %% The code below shall be used instead if it is desired to
+ %% compare each *element* in the tuples to the regular expression,
+ %% i.e., treat each element as a new line/string.
+ %% The difference is most easily explained through an example:
+ %% If we treat each tuple as a new line/string, the regular expression
+ %% "^{win" will match the string "{win, 1, 2, 3}", but not the string
+ %% "{1, {win,2}}".
+ %% If we treat each element as a new line/string, the RE "^{win" will match
+ %% both strings above.
+
+ %% SearchList = tuple_to_list(Elem),
+ %% case lists:dropwhile(
+ %% fun(H) ->
+ %% nomatch == regexp:first_match(lists:flatten(io_lib:write(H)),
+ %% Pattern)
+ %% end,
+ %% SearchList) of
+ %% [] ->
+ %% not_found;
+ %% _AnyList ->
+ %% found
+ %% end
+ end.
+
+
+
+
+
+compare_terms(Term, Elem) when not is_tuple(Elem), not is_list(Elem), Term =/= Elem ->
+ not_found;
+compare_terms(Term, Term) ->
+ %% Even the case Term = "{}" or "[]"!!!
+ found;
+compare_terms(Term, Elem) when is_list(Elem) ->
+ traverse_list(Term, Elem);
+compare_terms(Term, Elem) when is_tuple(Elem) ->
+ traverse_tuple(Term, Elem, 1, size(Elem)).
+
+
+
+
+
+traverse_tuple(Pattern, Tuple, N, Stop) when N =< Stop ->
+ Elem = element(N,Tuple),
+ case compare_terms(Pattern, Elem) of
+ found ->
+ found;
+ not_found ->
+ traverse_tuple(Pattern, Tuple, N+1, Stop)
+ end;
+traverse_tuple(_Pattern, _Tuple, N, Stop) when N > Stop ->
+ not_found.
+
+
+
+
+
+
+traverse_list(Pattern, [H | T]) ->
+ case compare_terms(Pattern, H) of
+ found ->
+ found;
+ not_found ->
+ traverse_list(Pattern, T)
+ end;
+traverse_list(_Pattern, []) ->
+ not_found.
+
diff --git a/lib/tv/src/tv_db_sort.erl b/lib/tv/src/tv_db_sort.erl
new file mode 100644
index 0000000000..3675c7b413
--- /dev/null
+++ b/lib/tv/src/tv_db_sort.erl
@@ -0,0 +1,141 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(tv_db_sort).
+
+
+
+-export([mergesort/3, merge/4, get_compare_value/2]).
+
+
+
+
+
+%%%*********************************************************************
+%%% EXTERNAL FUNCTIONS
+%%%*********************************************************************
+
+
+
+
+
+mergesort(_KeyNo, [X], _ReverseOrder) ->
+ [X];
+mergesort(_KeyNo, [], _ReverseOrder) ->
+ [];
+mergesort(KeyNo, X, ReverseOrder) ->
+ split(KeyNo, X, [], [], ReverseOrder).
+
+
+
+
+
+
+
+
+ %% If we want reverse order when just merging two lists,
+ %% each of them has to be in reverse order first!
+
+merge(KeyNo, [{E1, C1} | T1], [{E2, C2} | T2], Reverse) when not Reverse ->
+ K1 = get_compare_value(KeyNo, E1),
+ K2 = get_compare_value(KeyNo, E2),
+ case get_correct_order(K1, E1, K2, E2) of
+ {1, 2} ->
+ [{E1, C1} | merge(KeyNo, T1, [{E2, C2} | T2], Reverse)];
+ {2, 1} ->
+ [{E2, C2} | merge(KeyNo, [{E1, C1} | T1], T2, Reverse)]
+ end;
+merge(KeyNo, [{E1, C1} | T1], [{E2, C2} | T2], Reverse) ->
+ K1 = get_compare_value(KeyNo, E1),
+ K2 = get_compare_value(KeyNo, E2),
+ case get_correct_order(K1, E1, K2, E2) of
+ {1, 2} ->
+ [{E2, C2} | merge(KeyNo, [{E1, C1} | T1], T2, Reverse)];
+ {2, 1} ->
+ [{E1, C1} | merge(KeyNo, T1, [{E2, C2} | T2], Reverse)]
+ end;
+merge(_KeyNo, [], L2, _Reverse) -> % L2 may be the empty list also!
+ L2;
+merge(_KeyNo, L1, [], _Reverse) -> % L1 may be the empty list also!
+ L1.
+
+
+
+
+
+
+get_compare_value(KeyNo, E) when is_tuple(E) ->
+ case catch element(KeyNo, E) of
+ {'EXIT', {badarg, {?MODULE, get_compare_value, [KeyNo, E]}}} ->
+ short_tuple;
+ V ->
+ {tuple, V}
+ end;
+get_compare_value(_KeyNo, _E) ->
+ no_tuple.
+
+
+
+
+
+
+
+
+
+
+%%%********************************************************************
+%%% INTERNAL FUNCTIONS
+%%%********************************************************************
+
+
+
+
+split(KeyNo, [A,B|T], X, Y, Reverse) ->
+ split(KeyNo, T, [A|X], [B|Y], Reverse);
+split(KeyNo, [H], X, Y, Reverse) ->
+ split(KeyNo, [], [H|X], Y, Reverse);
+split(KeyNo, [], X, Y, Reverse) ->
+ merge(KeyNo,
+ mergesort(KeyNo, X, Reverse),
+ mergesort(KeyNo, Y, Reverse),
+ Reverse).
+
+
+
+
+
+
+get_correct_order({tuple, V1}, _E1, {tuple, V2}, _E2) when V1 < V2 ->
+ {1, 2};
+get_correct_order({tuple, _V1}, _E1, {tuple, _V2}, _E2) ->
+ {2, 1};
+get_correct_order(short_tuple, _E1, {tuple, _V2}, _E2) ->
+ {1, 2};
+get_correct_order({tuple, _V1}, _E1, short_tuple, _E2) ->
+ {2, 1};
+get_correct_order(short_tuple, E1, short_tuple, E2) when E1 < E2 ->
+ {1, 2};
+get_correct_order(short_tuple, _E1, short_tuple, _E2) ->
+ {2, 1};
+get_correct_order(no_tuple, E1, no_tuple, E2) when E1 < E2 ->
+ {1, 2};
+get_correct_order(no_tuple, _E1, no_tuple, _E2) ->
+ {2, 1};
+get_correct_order(_Anything, _E1, no_tuple, _E2) -> % Tuples first, then other
+ {1, 2}; % terms in correct order!
+get_correct_order(no_tuple, _E1, _Anything, _E2) ->
+ {2, 1}.
diff --git a/lib/tv/src/tv_ets_rpc.erl b/lib/tv/src/tv_ets_rpc.erl
new file mode 100644
index 0000000000..ec2fde30ac
--- /dev/null
+++ b/lib/tv/src/tv_ets_rpc.erl
@@ -0,0 +1,140 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(tv_ets_rpc).
+
+
+
+-export([all/2,
+ info/4,
+ new/4,
+ tab2list/3,
+ insert/4,
+ lookup/4,
+ delete/4
+ ]).
+
+
+
+
+all(_Node, true) ->
+ chk(catch ets:all());
+all(Node, false) ->
+ chk(catch rpc:block_call(Node, ets, all, [])).
+
+
+
+
+info(_Node, true, TabId, What) ->
+ chk(catch ets:info(TabId, What));
+info(Node, false, TabId, What) ->
+ chk(catch rpc:block_call(Node, ets, info, [TabId, What])).
+
+
+
+
+new(_Node, true, TabName, Options) ->
+ case catch ets:new(TabName, Options) of
+ {TabName, Pid} when is_pid(Pid) ->
+ {TabName,Pid};
+ {TabNo, Pid} when is_pid(Pid) ->
+ {TabNo,Pid};
+ OtherResult ->
+ chk(OtherResult)
+ end;
+new(Node, false, TabName, Options) ->
+ case catch rpc:block_call(Node, ets, new, [TabName, Options]) of
+ {TabName, Pid} when is_pid(Pid) ->
+ {TabName,Pid};
+ {TabNo, Pid} when is_pid(Pid) ->
+ {TabNo, Pid};
+ OtherResult ->
+ chk(OtherResult)
+ end.
+
+
+
+
+tab2list(_Node, true, TabId) ->
+ chk(catch ets:tab2list(TabId));
+tab2list(Node, false, TabId) ->
+ chk(catch rpc:call(Node, ets, tab2list, [TabId])).
+
+
+
+
+insert(_Node, true, TabId, Object) ->
+ chk(catch ets:insert(TabId, Object));
+insert(Node, false, TabId, Object) ->
+ chk(catch rpc:call(Node, ets, insert, [TabId, Object])).
+
+
+
+
+lookup(_Node, true, TabId, Key) ->
+ chk(catch ets:lookup(TabId, Key));
+lookup(Node, false, TabId, Key) ->
+ chk(catch rpc:call(Node, ets, lookup, [TabId, Key])).
+
+
+
+
+delete(_Node, true, TabId, Key) ->
+ chk(catch ets:delete(TabId, Key));
+delete(Node, false, TabId, Key) ->
+ chk(catch rpc:call(Node, ets, delete, [TabId, Key])).
+
+
+
+
+chk(Result) ->
+ case Result of
+ undefined ->
+ throw(no_table);
+ _Anything when is_list(Result) ->
+ Result;
+ _Anything when is_atom(Result) ->
+ Result;
+ _Anything when is_integer(Result) ->
+ Result;
+ _Anything when is_pid(Result) ->
+ Result;
+
+ %% Messages received when node is down.
+ {badrpc, nodedown} ->
+ throw(nodedown);
+ {'EXIT', nodedown} ->
+ throw(nodedown);
+ {'EXIT', {{badarg, {gen, set_monitor_node, _Args}}, _Reason}} ->
+ throw(nodedown);
+
+ %% Messages received when table doesn't exist.
+ {'EXIT', {badarg, {ets,local_info,_Args}}} ->
+ %% Due to inconsistencies in R2D and earlier versions:
+ %% ets:info/1 returned 'undefined' when table didn't
+ %% exist, while ets:info/2 returned the exit-signal
+ %% above. This was corrected in R3A - now both functions
+ %% return 'undefined' :-)
+ throw(no_table);
+ {badrpc, {'EXIT', {badarg,_Reason}}} ->
+ throw(no_table);
+ {'EXIT', {badarg,_Reason}} ->
+ throw(no_table);
+ Error when is_tuple(Error) ->
+ throw({unexpected_error,Error})
+ end.
+
diff --git a/lib/tv/src/tv_etsread.erl b/lib/tv/src/tv_etsread.erl
new file mode 100644
index 0000000000..d3240ef513
--- /dev/null
+++ b/lib/tv/src/tv_etsread.erl
@@ -0,0 +1,767 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%%*********************************************************************
+%%%
+%%% Description: Module containing the interface towards ETS tables,
+%%% i.e., handling the polling and thereafter sending the
+%%% result to the database part of the table tool.
+%%%
+%%%*********************************************************************
+
+
+-module(tv_etsread).
+
+
+
+-export([etsread/2]).
+
+
+
+-include("tv_int_def.hrl").
+-include("tv_int_msg.hrl").
+
+
+
+
+
+
+%%%*********************************************************************
+%%% EXTERNAL FUNCTIONS
+%%%*********************************************************************
+
+
+
+
+etsread(MasterPid, ErrorMsgMode) ->
+ process_flag(trap_exit, true),
+ put(error_msg_mode, ErrorMsgMode),
+ blocked(MasterPid).
+
+
+
+
+
+%%%*********************************************************************
+%%% INTERNAL FUNCTIONS
+%%%*********************************************************************
+
+
+
+blocked(MasterPid) ->
+ receive
+ Msg ->
+ case Msg of
+
+ #etsread_deblock{} ->
+ deblock(Msg, MasterPid);
+
+ {'EXIT', Pid, Reason} ->
+ exit_signals({Pid, Reason}, MasterPid),
+ blocked(MasterPid);
+
+ {error_msg_mode, Mode} ->
+ put(error_msg_mode, Mode),
+ blocked(MasterPid);
+
+ _Other ->
+ %% io:format("Received signal ~p~n", [_Other]),
+ blocked(MasterPid)
+ end
+ end.
+
+
+
+
+
+
+
+deblock(Msg, MasterPid) ->
+ #etsread_deblock{dbs_pid = DbsPid,
+ table_type = KindOfTable,
+ node = Node,
+ local_node = LocalNode,
+ table_id = TableId,
+ poll_interval = PollInt} = Msg,
+ PollInterval = case PollInt of
+ infinity ->
+ PollInt;
+ _Other ->
+ PollInt * 1000
+ end,
+ %% Get table info!
+ case catch get_table_info(Node, LocalNode, TableId, KindOfTable) of
+ nodedown ->
+ MasterPid ! #pc_nodedown{sender = self(),
+ automatic_polling = false},
+ blocked(MasterPid);
+ no_table ->
+ MasterPid ! #pc_dead_table{sender = self(),
+ automatic_polling = false},
+ blocked(MasterPid);
+ mnesia_not_started ->
+ MasterPid ! #pc_dead_table{sender = self(),
+ automatic_polling = false},
+ blocked(MasterPid);
+ {unexpected_error,_Reason} ->
+ MasterPid ! #pc_dead_table{sender = self(),
+ automatic_polling = false},
+ blocked(MasterPid);
+ {Type, Pos, Protection} ->
+ MasterPid ! #etsread_deblock_cfm{sender = self(),
+ type = Type,
+ keypos = Pos,
+ protection = Protection
+ },
+
+ timer:sleep(500),
+ case catch read_table(Node, LocalNode, TableId, KindOfTable, DbsPid) of
+ nodedown ->
+ MasterPid ! #pc_nodedown{sender = self(),
+ automatic_polling = false},
+ blocked(MasterPid);
+ no_table ->
+ MasterPid ! #pc_dead_table{sender = self(),
+ automatic_polling = false},
+ blocked(MasterPid);
+ mnesia_not_started ->
+ MasterPid ! #pc_dead_table{sender = self(),
+ automatic_polling = false},
+ blocked(MasterPid);
+ {unexpected_error,_Reason} ->
+ MasterPid ! #pc_dead_table{sender = self(),
+ automatic_polling = false},
+ blocked(MasterPid);
+ _ElapsedTime ->
+ deblocked_loop(MasterPid, DbsPid, Node, LocalNode, TableId,
+ KindOfTable, PollInterval)
+ end
+ end.
+
+
+
+
+
+
+get_table_info(Node, LocalNode, TableId, KindOfTable) ->
+ case KindOfTable of
+ ets ->
+ % Check whether table is 'bag' or 'set' type.
+ Type = tv_ets_rpc:info(Node, LocalNode, TableId, type),
+ % Get position for the key.
+ Pos = tv_ets_rpc:info(Node, LocalNode, TableId, keypos),
+ Protection = tv_ets_rpc:info(Node, LocalNode, TableId, protection),
+ {Type, Pos, Protection};
+ mnesia ->
+ Type = tv_mnesia_rpc:table_info(Node, LocalNode, TableId, type),
+ Pos = 2,
+ %% All Mnesia tables are regarded as being public!
+ {Type, Pos, public}
+ end.
+
+
+
+
+
+
+deblocked_loop(MasterPid,DbsPid,Node,LocalNode,TableId,KindOfTable,PollInterval) ->
+ receive
+ Msg ->
+
+ case Msg of
+
+ #etsread_poll_table{} ->
+ case catch read_table(Node, LocalNode, TableId, KindOfTable, DbsPid) of
+ %% No automatic polling here!
+ nodedown ->
+ MasterPid ! #pc_nodedown{sender = self(),
+ automatic_polling = false};
+ no_table ->
+ MasterPid ! #pc_dead_table{sender = self(),
+ automatic_polling = false};
+ mnesia_not_started ->
+ MasterPid ! #pc_dead_table{sender = self(),
+ automatic_polling = false};
+ {unexpected_error,_Reason} ->
+ MasterPid ! #pc_dead_table{sender = self(),
+ automatic_polling = false};
+ _ElapsedTime ->
+ done
+ end,
+ deblocked_loop(MasterPid, DbsPid, Node, LocalNode,
+ TableId, KindOfTable, PollInterval);
+
+
+ #etsread_set_poll_interval{interval = PollInt} ->
+ NewPollInterval = case PollInt of
+ infinity ->
+ PollInt;
+ _Other ->
+ PollInt * 1000
+ end,
+ deblocked_loop(MasterPid, DbsPid, Node, LocalNode,
+ TableId, KindOfTable, NewPollInterval);
+
+
+ #etsread_deblock{} ->
+ deblock(Msg, MasterPid);
+
+
+ #etsread_update_object{key_no=KeyNo, object=Obj, old_object=OldObj} ->
+ update_object(KindOfTable, Node, LocalNode, TableId, DbsPid,
+ KeyNo, Obj, OldObj, MasterPid, PollInterval),
+ deblocked_loop(MasterPid, DbsPid, Node, LocalNode, TableId, KindOfTable,
+ PollInterval);
+
+
+ #etsread_new_object{object=Obj} ->
+ new_object(KindOfTable, Node, LocalNode, TableId, DbsPid,
+ Obj, MasterPid, PollInterval),
+ deblocked_loop(MasterPid, DbsPid, Node, LocalNode, TableId, KindOfTable,
+ PollInterval);
+
+
+ #etsread_delete_object{object=Obj} ->
+ delete_object(KindOfTable, Node, LocalNode, TableId, DbsPid,
+ Obj, MasterPid, PollInterval),
+ deblocked_loop(MasterPid, DbsPid, Node, LocalNode, TableId, KindOfTable,
+ PollInterval);
+
+
+ #ip_dead_table{} ->
+ AutoPoll = case PollInterval of
+ infinity ->
+ false;
+ _Other ->
+ true
+ end,
+ MasterPid ! #pc_dead_table{sender = self(),
+ automatic_polling = AutoPoll},
+ deblocked_loop(MasterPid, DbsPid, Node, LocalNode, TableId,
+ KindOfTable, infinity);
+
+
+ #etsread_nodedown{} ->
+ AutoPoll = case PollInterval of
+ infinity ->
+ false;
+ _Other ->
+ true
+ end,
+ MasterPid ! #pc_nodedown{sender = self(),
+ automatic_polling = AutoPoll},
+ deblocked_loop(MasterPid, DbsPid, Node, LocalNode, TableId,
+ KindOfTable, infinity);
+
+
+ {error_msg_mode, Mode} ->
+ put(error_msg_mode, Mode),
+ deblocked_loop(MasterPid, DbsPid, Node, LocalNode, TableId, KindOfTable,
+ PollInterval);
+
+
+ {'EXIT', Pid, Reason} ->
+ exit_signals({Pid, Reason}, MasterPid),
+ deblocked_loop(MasterPid, DbsPid, Node, LocalNode,
+ TableId, KindOfTable, PollInterval)
+ end
+
+ after PollInterval ->
+ %% Automatic polling must be on, otherwise these
+ %% lines would never be executed!
+ NewPollInterval =
+ case catch read_table(Node,LocalNode,TableId,KindOfTable,DbsPid) of
+ nodedown ->
+ MasterPid ! #pc_nodedown{sender = self(),
+ automatic_polling = true},
+ infinity;
+ no_table ->
+ MasterPid ! #pc_dead_table{sender = self(),
+ automatic_polling = true},
+ infinity;
+ mnesia_not_started ->
+ MasterPid ! #pc_dead_table{sender = self(),
+ automatic_polling = true},
+ infinity;
+ {unexpected_error,_Reason} ->
+ MasterPid ! #pc_dead_table{sender = self(),
+ automatic_polling = true},
+ infinity;
+ ElapsedMilliseconds ->
+ if
+ (ElapsedMilliseconds * 1000) >= PollInterval ->
+ infinity;
+ true ->
+ PollInterval
+ end
+ end,
+ deblocked_loop(MasterPid, DbsPid, Node, LocalNode,
+ TableId, KindOfTable, NewPollInterval)
+ end.
+
+
+
+
+
+exit_signals(ExitInfo, MasterPid) ->
+ case ExitInfo of
+ {MasterPid, _Reason} ->
+ exit(normal);
+ _Other ->
+ done
+ end.
+
+
+
+
+update_object(KindOfTable, Node, LocalNode, TableId, DbsPid, KeyNo, Obj, OldObj, MasterPid, PollInterval) ->
+ AutoPoll =
+ case PollInterval of
+ infinity ->
+ false;
+ _Other ->
+ true
+ end,
+ case check_record_format(KindOfTable, Node, LocalNode, TableId, Obj) of
+ bad_format ->
+ DbsPid ! #etsread_update_object_cfm{sender = self(),
+ success = false};
+ ok ->
+ %% Check that we are allowed to edit the table!
+ case catch update_object2(KindOfTable, Node, LocalNode, TableId, DbsPid, KeyNo,
+ Obj, OldObj) of
+
+ nodedown ->
+ DbsPid ! #etsread_update_object_cfm{sender = self(),
+ success = false},
+ MasterPid ! #pc_nodedown{sender = self(),
+ automatic_polling = AutoPoll};
+
+ no_table ->
+ DbsPid ! #etsread_update_object_cfm{sender = self(),
+ success = false},
+ MasterPid ! #pc_dead_table{sender = self(),
+ automatic_polling = AutoPoll};
+
+ mnesia_not_started ->
+ DbsPid ! #etsread_update_object_cfm{sender = self(),
+ success = false},
+ MasterPid ! #pc_dead_table{sender = self(),
+ automatic_polling = AutoPoll};
+
+
+ {unexpected_error,_Reason} ->
+ DbsPid ! #etsread_update_object_cfm{sender = self(),
+ success = false},
+ MasterPid ! #pc_dead_table{sender = self(),
+ automatic_polling = AutoPoll};
+
+ ok ->
+ DbsPid ! #etsread_update_object_cfm{sender = self(),
+ success = true}
+ end
+ end.
+
+
+
+
+
+update_object2(ets, Node, LocalNode, Tab, _DbsPid, KeyNo, Obj, OldObj) ->
+ %% We shall update a specific object! If the table is a 'set' table,
+ %% it is just to insert the altered object. However, if the table
+ %% is a 'bag', or a 'duplicate_bag', we first have to remove the
+ %% old object, and then insert the altered one.
+ %% But, we aren't finished with that... we also want to preserve
+ %% the time order, meaning we have to delete *ALL* objects having the
+ %% very same key, and then insert them again! (Actually we would have
+ %% to do this anyhow, due to limitations in the interface functions,
+ %% but this remark has to be noted!)
+ OldKey = element(KeyNo, OldObj),
+ InsertList =
+ case tv_ets_rpc:info(Node, LocalNode, Tab, type) of
+ set ->
+ %% Have to remove old object, because the key may be what's changed.
+ tv_ets_rpc:delete(Node, LocalNode, Tab, OldKey),
+ [Obj];
+ ordered_set ->
+ %% Have to remove old object, because the key may be what's changed.
+ tv_ets_rpc:delete(Node, LocalNode, Tab, OldKey),
+ [Obj];
+ _Other -> %% 'bag' or 'duplicate_bag'
+ OldList = tv_ets_rpc:lookup(Node, LocalNode, Tab, OldKey),
+ tv_ets_rpc:delete(Node, LocalNode, Tab, OldKey),
+ %% Have to beware of duplicate_bag tables,
+ %% i.e., the same object may occur more than
+ %% once, but we only want to replace it once!
+ {_Replaced, TmpList} =
+ lists:foldl(
+ fun(Data, {Replaced,Acc}) when Data =/= OldObj ->
+ {Replaced, [Data | Acc]};
+ (_Data, {Replaced,Acc}) when not Replaced ->
+ {true, [Obj | Acc]};
+ (Data, {Replaced,Acc}) ->
+ {Replaced, [Data | Acc]}
+ end,
+ {false, []},
+ OldList),
+ lists:reverse(TmpList)
+ end,
+ lists:foreach(fun(H) ->
+ tv_ets_rpc:insert(Node, LocalNode, Tab, H)
+ end,
+ InsertList),
+ ok;
+update_object2(mnesia, Node, LocalNode, Tab, _DbsPid, KeyNo, Obj, OldObj) ->
+ OldKey = element(KeyNo, OldObj),
+ InsertList =
+ case tv_mnesia_rpc:table_info(Node, LocalNode, Tab, type) of
+ set ->
+ tv_mnesia_rpc:transaction(
+ Node,
+ LocalNode,
+ fun() ->
+ mnesia:delete(Tab,OldKey,write)
+ end),
+ [Obj];
+ ordered_set ->
+ tv_mnesia_rpc:transaction(
+ Node,
+ LocalNode,
+ fun() ->
+ mnesia:delete(Tab,OldKey,write)
+ end),
+ [Obj];
+ _Other -> %% 'bag' or 'duplicate_bag'
+ {atomic, OldList} =
+ tv_mnesia_rpc:transaction(
+ Node,
+ LocalNode,
+ fun() ->
+ mnesia:read(Tab,OldKey,read)
+ end),
+ %% We can't use mnesia:delete_object here, because
+ %% time order wouldn't be preserved then!!!
+ tv_mnesia_rpc:transaction(
+ Node,
+ LocalNode,
+ fun() ->
+ mnesia:delete(Tab,OldKey,write)
+ end),
+ ChangeFun =
+ fun(H) when H =:= OldObj ->
+ Obj;
+ (H) ->
+ H
+ end,
+ [ChangeFun(X) || X <- OldList]
+ end,
+ lists:foreach(fun(H) ->
+ tv_mnesia_rpc:transaction(
+ Node,
+ LocalNode,
+ fun() ->
+ %% This mnesia call shall not be distributed,
+ %% since the transaction sees to that it is
+ %% executed on the right node!!!
+ mnesia:write(Tab,H,write)
+ end)
+ end,
+ InsertList),
+ ok.
+
+
+
+
+
+
+delete_object(KindOfTable, Node, LocalNode, TableId, DbsPid, Obj, MasterPid, PollInterval) ->
+ AutoPoll =
+ case PollInterval of
+ infinity ->
+ false;
+ _Other ->
+ true
+ end,
+ case catch delete_object2(KindOfTable, Node, LocalNode, TableId, DbsPid, Obj) of
+
+ nodedown ->
+ DbsPid ! #etsread_delete_object_cfm{sender = self(),
+ success = false},
+ MasterPid ! #pc_nodedown{sender = self(),
+ automatic_polling = AutoPoll};
+
+ no_table ->
+ DbsPid ! #etsread_delete_object_cfm{sender = self(),
+ success = false},
+ MasterPid ! #pc_dead_table{sender = self(),
+ automatic_polling = AutoPoll};
+
+ mnesia_not_started ->
+ DbsPid ! #etsread_delete_object_cfm{sender = self(),
+ success = false},
+ MasterPid ! #pc_dead_table{sender = self(),
+ automatic_polling = AutoPoll};
+
+ {unexpected_error,_Reason} ->
+ DbsPid ! #etsread_delete_object_cfm{sender = self(),
+ success = false},
+ MasterPid ! #pc_dead_table{sender = self(),
+ automatic_polling = AutoPoll};
+
+ ok ->
+ DbsPid ! #etsread_delete_object_cfm{sender = self(),
+ success = true}
+ end.
+
+
+
+
+delete_object2(ets, Node, LocalNode, Tab, _DbsPid, Obj) ->
+ KeyNo = tv_ets_rpc:info(Node, LocalNode, Tab, keypos),
+ Key = element(KeyNo, Obj),
+ InsertList =
+ case tv_ets_rpc:info(Node, LocalNode, Tab, type) of
+ set ->
+ %% Have to remove old object, because the key may be what's changed.
+ tv_ets_rpc:delete(Node, LocalNode, Tab, Key),
+ [];
+ ordered_set ->
+ %% Have to remove old object, because the key may be what's changed.
+ tv_ets_rpc:delete(Node, LocalNode, Tab, Key),
+ [];
+ _Other -> %% 'bag' or 'duplicate_bag'
+ OldList = tv_ets_rpc:lookup(Node, LocalNode, Tab, Key),
+ tv_ets_rpc:delete(Node, LocalNode, Tab, Key),
+ OldList -- [Obj]
+ end,
+
+ lists:foreach(fun(H) ->
+ tv_ets_rpc:insert(Node, LocalNode, Tab, H)
+ end,
+ InsertList),
+ ok;
+delete_object2(mnesia, Node, LocalNode, Tab, _DbsPid, Obj) ->
+ tv_mnesia_rpc:transaction(
+ Node,
+ LocalNode,
+ fun() ->
+ %% This mnesia call shall not be distributed,
+ %% since the transaction sees to that it is
+ %% executed on the right node!!!
+ mnesia:delete_object(Tab,Obj,write)
+ end),
+ ok.
+
+
+
+
+
+new_object(KindOfTable, Node, LocalNode, TableId, DbsPid, Obj, MasterPid, PollInterval) ->
+ AutoPoll =
+ case PollInterval of
+ infinity ->
+ false;
+ _Other ->
+ true
+ end,
+ case check_record_format(KindOfTable, Node, LocalNode, TableId, Obj) of
+ bad_format ->
+ DbsPid ! #etsread_new_object_cfm{sender = self(),
+ success = false};
+ ok ->
+ %% Check that we are allowed to edit the table!
+ case catch new_object2(KindOfTable, Node, LocalNode, TableId, DbsPid, Obj) of
+
+ nodedown ->
+ DbsPid ! #etsread_new_object_cfm{sender = self(),
+ success = false},
+ MasterPid ! #pc_nodedown{sender = self(),
+ automatic_polling = AutoPoll};
+
+ no_table ->
+ DbsPid ! #etsread_new_object_cfm{sender = self(),
+ success = false},
+ MasterPid ! #pc_dead_table{sender = self(),
+ automatic_polling = AutoPoll};
+
+ mnesia_not_started ->
+ DbsPid ! #etsread_new_object_cfm{sender = self(),
+ success = false},
+ MasterPid ! #pc_dead_table{sender = self(),
+ automatic_polling = AutoPoll};
+
+ {unexpected_error,_Reason} ->
+ DbsPid ! #etsread_new_object_cfm{sender = self(),
+ success = false},
+ MasterPid ! #pc_dead_table{sender = self(),
+ automatic_polling = AutoPoll};
+
+ ok ->
+ DbsPid ! #etsread_new_object_cfm{sender = self(),
+ success = true}
+ end
+ end.
+
+
+
+
+
+new_object2(ets, Node, LocalNode, Tab, _DbsPid, Obj) ->
+ tv_ets_rpc:insert(Node, LocalNode, Tab, Obj),
+ ok;
+new_object2(mnesia, Node, LocalNode, Tab, _DbsPid, Obj) ->
+ tv_mnesia_rpc:transaction(
+ Node,
+ LocalNode,
+ fun() ->
+ %% This mnesia call shall not be distributed,
+ %% since the transaction sees to that it is
+ %% executed on the right node!!!
+ mnesia:write(Tab,Obj,write)
+ end),
+ ok.
+
+
+
+
+
+check_record_format(mnesia, Node, LocalNode, Tab, Obj) ->
+ Arity = tv_mnesia_rpc:table_info(Node, LocalNode, Tab, arity),
+ case size(Obj) of
+ Arity ->
+ ok;
+ _Other ->
+ gs:window(etsreadwin, gs:start(), []),
+ case get(error_msg_mode) of
+ normal ->
+ tv_utils:notify(etsreadwin, "TV Notification",
+ ["The record is not complete,",
+ "too few fields are specified!"]);
+ haiku ->
+ tv_utils:notify(etsreadwin, "TV Notification",
+ ["The attempt to change",
+ "The specified record size",
+ "Is simply ignored."])
+ end,
+ gs:destroy(etsreadwin),
+ bad_format
+ end;
+check_record_format(ets, _Node, _LocalNode, _Tab, _Obj) ->
+ ok.
+
+
+
+
+
+
+
+read_table(Node, LocalNode, Tab, KindOfTable, DbsPid) ->
+ T1 = time(),
+
+ {TableContent, ListOfKeys} =
+ case KindOfTable of
+ ets ->
+ {tv_ets_rpc:tab2list(Node, LocalNode, Tab),
+ [tv_ets_rpc:info(Node, LocalNode, Tab, keypos)]
+ };
+ mnesia ->
+ %% It may be tempting to use Mnesia event subscription,
+ %% but will this really save the day? The main drawback
+ %% is that we will then have to update the table copy we
+ %% store internally in two different ways: one for the
+ %% Mnesia tables, and one for the ETS tables. Also, if
+ %% the Mnesia tables are frequently updated, this will
+ %% cause TV to work all the time too (either updating the
+ %% table copy for each inserted/deleted object, or storing
+ %% these objects until polling is ordered). To make this
+ %% work smoothly requires a bit of work...
+ %% The second drawback is that it doesn't seem clear in all
+ %% circumstances how the subscription actually works - i.e.,
+ %% if we only use subscriptions, can we actually be sure that
+ %% the *real* state of the table is the same as the one kept
+ %% in TV? For example, imagine the scenario that Mnesia is
+ %% stopped, all Mnesia directories are removed (from the UNIX
+ %% shell), and then Mnesia once again is started. The first
+ %% problem is that we have to check for start/stop of Mnesia,
+ %% the second is that we then have to rescan the actual table.
+ %% The logic for this may require som effort to write!
+ %% Also, what will happen if the table is killed/dies?
+ %% Will we get messages for each element in the table?
+ %% (I havent't checked this last issue, this is just som thoughts.)
+ %% And generally, there is always a risk that a message is lost,
+ %% which will result in TV showing an erroneous table content.
+ %%
+ %% All in all, using Mnesia subscriptions *may* be a sub-optimization.
+ %% The current solution works fine, is also easy to control, and is
+ %% mainly the same for both ETS and Mnesia tables.
+ %% My suggestion is that it is used until someone actually complains
+ %% about the polling time being too long for huge tables! :-)
+ %% (However, it shall be emphasized that it is this module that
+ %% actually polls the Mnesia/ETS tables, meaning that it is
+ %% mainly this module that has to be modified, should the usage of
+ %% subscriptions be desired. The other module that has to be modified
+ %% is the one maintaining the internal copy of the table.)
+ WildPattern = tv_mnesia_rpc:table_info(Node,LocalNode,Tab,wild_pattern),
+ {atomic, Content} =
+ tv_mnesia_rpc:transaction(
+ Node,
+ LocalNode,
+ fun() ->
+ %% This mnesia call shall not be distributed,
+ %% since the transaction sees to that it is
+ %% executed on the right node!!!
+ mnesia:match_object(Tab, WildPattern, read)
+ end),
+ {Content, [2 | tv_mnesia_rpc:table_info(Node, LocalNode,Tab, index)]}
+ end,
+
+ T2 = time(),
+
+ ElapsedTime = compute_elapsed_seconds(T1, T2),
+
+ DbsPid ! #dbs_new_data{sender = self(),
+ data = TableContent,
+ keys = ListOfKeys,
+ time_to_read_table = ElapsedTime
+ },
+
+ ElapsedTime.
+
+
+
+
+
+
+
+compute_elapsed_seconds({H1, M1, S1}, {H2, M2, S2}) ->
+ ElapsedHours = get_time_diff(hours, H1, H2),
+ ElapsedMinutes = get_time_diff(minutes, M1, M2),
+ ElapsedSeconds = get_time_diff(seconds, S1, S2),
+ (ElapsedHours * 3600) + (ElapsedMinutes * 60) + ElapsedSeconds + 1.
+
+
+
+
+
+get_time_diff(_Type, T1, T2) when T1 =< T2 ->
+ T2 - T1;
+get_time_diff(hours, T1, T2) ->
+ T2 + 24 - T1;
+get_time_diff(minutes, T1, T2) ->
+ T2 + 60 - T1;
+get_time_diff(seconds, T1, T2) ->
+ T2 + 60 - T1.
diff --git a/lib/tv/src/tv_info.erl b/lib/tv/src/tv_info.erl
new file mode 100644
index 0000000000..7bc31e35cd
--- /dev/null
+++ b/lib/tv/src/tv_info.erl
@@ -0,0 +1,876 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(tv_info).
+
+
+
+-export([info/6
+ ]).
+
+
+-include("tv_int_def.hrl").
+-include("tv_int_msg.hrl").
+
+
+
+
+-define(DEFAULT_BG_COLOR, {217, 217, 217}).
+
+
+-record(card_field_ids, {parent_pid,
+ window_id,
+ window_frame,
+ table_id,
+ table_type,
+ table_name,
+ named_table,
+ owner_pid,
+ owner_name,
+ bag_or_set,
+ arity,
+ attributes,
+ wild_pattern,
+ keypos,
+ index,
+ snmp,
+ protection,
+ size,
+ memory,
+ storage_type,
+ disc_copies,
+ where_to_read,
+ ram_copies,
+ disc_only_copies,
+ where_to_write,
+ checkpoints,
+ node
+ }).
+
+
+
+-define(WINDOW_WIDTH, 580).
+-define(WINDOW_HEIGHT, 430).
+
+
+
+-define(MNESIA_INFO_ITEMS, [type,
+ arity,
+ attributes,
+ index,
+ size,
+ memory,
+ storage_type,
+ where_to_read,
+ disc_copies,
+ disc_only_copies,
+ ram_copies,
+ where_to_write,
+ checkpoints
+ ]).
+
+
+
+
+info(Master, Node, LocalNode, TabId, TabType, ErrMsgMode) ->
+ process_flag(trap_exit,true),
+ WinId = create_window(),
+ {CardIds, MaskLabel} = init(Master, Node, LocalNode, TabId, TabType, WinId),
+ put(error_msg_mode, ErrMsgMode),
+ gs:config(WinId, [{map, true}]),
+ loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType).
+
+
+
+
+
+
+create_window() ->
+ WinWidth = ?WINDOW_WIDTH,
+ WinHeight = ?WINDOW_HEIGHT,
+ Win = gs:window(win, gs:start(), [{width, WinWidth},
+ {height, WinHeight},
+ {bg, ?DEFAULT_BG_COLOR},
+ {destroy, true},
+ {configure, true},
+ {keypress, true}
+ ]),
+
+ MenubarId = gs:create(menubar, Win, [{bg, ?DEFAULT_BG_COLOR}
+ ]),
+ Mbutt = gs:create(menubutton, MenubarId, [{bg, ?DEFAULT_BG_COLOR},
+ {fg, {178, 34, 34}}, % firebrick
+ {label, {text, " File "}},
+ {underline, 1}
+ ]),
+ Obutt = gs:create(menubutton, MenubarId, [{bg, ?DEFAULT_BG_COLOR},
+ {fg, {178, 34, 34}}, % firebrick
+ {label, {text, " Options "}},
+ {underline, 1}
+ ]),
+
+ % Create the actual menu!
+ FMenu = gs:create(menu, Mbutt, [{bg, ?DEFAULT_BG_COLOR},
+ {fg, {178, 34, 34}}]),
+ OMenu = gs:create(menu, Obutt, [{bg, ?DEFAULT_BG_COLOR},
+ {fg, {178, 34, 34}}]),
+ gs:create(menuitem, FMenu, [{bg, ?DEFAULT_BG_COLOR},
+ {fg, {178, 34, 34}},
+ {label, {text, " Close Ctrl-C "}},
+ {data, close_menu},
+ {underline, 1}
+ ]),
+ gs:create(menuitem, OMenu, [{bg, ?DEFAULT_BG_COLOR},
+ {fg, {178, 34, 34}},
+ {label, {text, " Refresh Ctrl-R "}},
+ {data, update},
+ {underline, 1}
+ ]),
+ Win.
+
+
+
+
+
+
+
+
+init(Master, Node, LocalNode, TabId, TabType, WinId) ->
+ WinWidth = ?WINDOW_WIDTH,
+ WinHeight = ?WINDOW_HEIGHT,
+
+ WinFrame = gs:frame(WinId, [{width, WinWidth},
+ {height, WinHeight},
+ {x, 0},
+ {y, 30},
+ {bg, ?DEFAULT_BG_COLOR},
+ {bw, 0}
+ ]),
+
+ TableIdFlap = create_flap(1, "Table Id", WinFrame),
+ BasicSettingsFlap = create_flap(2, "Basic Settings", WinFrame),
+ SizeFlap = create_flap(3, "Size", WinFrame),
+ StorageFlap = create_flap(4, "Storage", WinFrame),
+
+ TableIdCard = create_card(WinFrame, TableIdFlap),
+ BasicSettingsCard = create_card(WinFrame, BasicSettingsFlap),
+ SizeCard = create_card(WinFrame, SizeFlap),
+ StorageCard = create_card(WinFrame, StorageFlap),
+
+
+ set_flap_label(TableIdFlap, "Table Id"),
+ set_flap_label(BasicSettingsFlap, "Basic Settings"),
+ set_flap_label(SizeFlap, "Size"),
+ set_flap_label(StorageFlap, "Storage"),
+
+
+ gs:config(TableIdCard, [raise]),
+
+ CardIds = print_cards(TabType, TableIdCard, BasicSettingsCard, SizeCard, StorageCard),
+
+ {_CardId, FirstMaskXpos} = gs:read(TableIdFlap, data),
+ Mask = gs:label(WinFrame, [{width, gs:read(TableIdFlap, width) - 2 * gs:read(TableIdFlap, bw) + 1},
+ {height, gs:read(TableIdCard, bw)},
+ {x, FirstMaskXpos},
+ {y, gs:read(TableIdCard, y)},
+ {bg, ?DEFAULT_BG_COLOR}
+ ]),
+
+ update_info_flaps(TabType, Node, LocalNode, TabId, CardIds, Master),
+ {CardIds#card_field_ids{parent_pid = Master,
+ window_id = WinId,
+ window_frame = WinFrame}, Mask}.
+
+
+
+
+
+check_node(OldNode, LocalNode) ->
+ HomeNode = node(),
+ case net_adm:ping(OldNode) of
+ pong ->
+ OldNode;
+ pang when LocalNode ->
+ %% The system has gone either distributed or undistributed.
+ %% No matter which, HomeNode tells the current correct node.
+ HomeNode;
+ pang ->
+ OldNode
+ end.
+
+
+
+
+
+
+update_data_field(notext, {label, Id}) ->
+ gs:config(Id, [{label, {text, "" }}]);
+update_data_field(notext, {listbox, Id}) ->
+ gs:config(Id, [{items, []}]);
+update_data_field({Data}, {label, Id}) ->
+ gs:config(Id, [{label, {text, " " ++ lists:flatten(io_lib:write(Data))}}]);
+update_data_field({Data}, {listbox, Id}) ->
+ gs:config(Id, [{items, lists:map(fun(E) -> " " ++ lists:flatten(io_lib:write(E))
+ end, Data)}]).
+
+
+
+
+print_info(mnesia, Node, LocalNode, TabId, CardIds) ->
+ update_data_field({mnesia},
+ CardIds#card_field_ids.table_type),
+ update_data_field({TabId},
+ CardIds#card_field_ids.table_name),
+ update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, type)},
+ CardIds#card_field_ids.bag_or_set),
+ update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, arity) - 1},
+ CardIds#card_field_ids.arity),
+
+ AttributesList = tv_mnesia_rpc:table_info(Node, LocalNode, TabId, attributes),
+ update_data_field({AttributesList},
+ CardIds#card_field_ids.attributes),
+ update_data_field({lists:map(fun(N) ->
+ lists:nth(N - 1, AttributesList)
+ end,
+ [2] ++ tv_mnesia_rpc:table_info(Node,
+ LocalNode,
+ TabId,
+ index)
+ )
+ },
+ CardIds#card_field_ids.index),
+
+ update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, size)},
+ CardIds#card_field_ids.size),
+ update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, memory)},
+ CardIds#card_field_ids.memory),
+ update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, storage_type)},
+ CardIds#card_field_ids.storage_type),
+ update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, where_to_read)},
+ CardIds#card_field_ids.where_to_read),
+ update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, disc_copies)},
+ CardIds#card_field_ids.disc_copies),
+ update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, disc_only_copies)},
+ CardIds#card_field_ids.disc_only_copies),
+ update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, ram_copies)},
+ CardIds#card_field_ids.ram_copies),
+ update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, where_to_write)},
+ CardIds#card_field_ids.where_to_write),
+ update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, checkpoints)},
+ CardIds#card_field_ids.checkpoints),
+ {ok, TabId};
+print_info(ets, Node, LocalNode, TabId, CardIds) ->
+ update_data_field({ets},
+ CardIds#card_field_ids.table_type),
+ update_data_field({TabId},
+ CardIds#card_field_ids.table_id),
+ TabName = tv_ets_rpc:info(Node, LocalNode, TabId, name),
+ update_data_field({TabName},
+ CardIds#card_field_ids.table_name),
+ update_data_field({tv_ets_rpc:info(Node, LocalNode, TabId, named_table)},
+ CardIds#card_field_ids.named_table),
+
+ OwnerPid = tv_ets_rpc:info(Node, LocalNode, TabId, owner),
+ OwnerNameSearchResult = lists:keysearch(registered_name,
+ 1,
+ rpc:block_call(Node,
+ erlang,
+ process_info,
+ [OwnerPid])),
+ OwnerName = case OwnerNameSearchResult of
+ false ->
+ notext;
+ {value, {registered_name, WantedName}} ->
+ {WantedName}
+ end,
+ update_data_field({OwnerPid},
+ CardIds#card_field_ids.owner_pid),
+ update_data_field(OwnerName,
+ CardIds#card_field_ids.owner_name),
+
+ update_data_field({tv_ets_rpc:info(Node, LocalNode, TabId, keypos)},
+ CardIds#card_field_ids.keypos),
+ update_data_field({tv_ets_rpc:info(Node, LocalNode, TabId, type)},
+ CardIds#card_field_ids.bag_or_set),
+ update_data_field({tv_ets_rpc:info(Node, LocalNode, TabId, protection)},
+ CardIds#card_field_ids.protection),
+ update_data_field({tv_ets_rpc:info(Node, LocalNode, TabId, size)},
+ CardIds#card_field_ids.size),
+ update_data_field({tv_ets_rpc:info(Node, LocalNode, TabId, memory)},
+ CardIds#card_field_ids.memory),
+ update_data_field({tv_ets_rpc:info(Node, LocalNode, TabId, node)},
+ CardIds#card_field_ids.node),
+ {ok, TabName}.
+
+
+
+
+
+
+print_cards(mnesia, Card1, Card2, Card3, Card4) ->
+ create_card_text(1, "Table Type:", Card1),
+ create_card_text(2, "Table Name:", Card1),
+
+ create_card_text(1, "Table Type:", Card2),
+ create_card_text(2, "Number of Attributes:", Card2),
+% create_card_text(3, "Attribute Names:", Card2),
+% create_card_text(4, "Index Positions:", Card2),
+
+ create_card_text(1, "Number of Elements Stored:", Card3),
+ create_card_text(2, "Number of Words Allocated:", Card3),
+
+ create_card_text(1, "Local Storage Type:", Card4),
+ create_card_text(2, "Table Readable at Node:", Card4),
+% create_card_text(3, "Disc Copy Nodes:", Card4),
+% create_card_text(4, "Disc Copy Only Nodes:", Card4),
+% create_card_text(5, "RAM Copy Nodes:", Card4),
+% create_card_text(6, "Active Table Replica Nodes:", Card4),
+% create_card_text(7, "Active Checkpoints:", Card4),
+
+ {AttributesId, IndexId} = create_special_fields(mnesia, size_card, Card2),
+
+
+ {DiscCopiesId, DiscOnlyCopiesId, RamCopiesId, WhereToWriteId, CheckpointsId} =
+ create_special_fields(mnesia, storage_card, Card4),
+
+ #card_field_ids{table_name = {label, create_card_data_field(2, Card1)},
+ table_type = {label, create_card_data_field(1, Card1)},
+ bag_or_set = {label, create_card_data_field(1, Card2)},
+ arity = {label, create_card_data_field(2, Card2)},
+ attributes = AttributesId,
+ index = IndexId,
+ size = {label, create_card_data_field(1, Card3)},
+ memory = {label, create_card_data_field(2, Card3)},
+ storage_type = {label, create_card_data_field(1, Card4)},
+ where_to_read = {label, create_card_data_field(2, Card4)},
+ disc_copies = DiscCopiesId,
+ disc_only_copies = DiscOnlyCopiesId,
+ ram_copies = RamCopiesId,
+ where_to_write = WhereToWriteId,
+ checkpoints = CheckpointsId
+ };
+print_cards(ets, Card1, Card2, Card3, Card4) ->
+ create_card_text(1, "Table Type:", Card1),
+ create_card_text(2, "Table Id:", Card1),
+ create_card_text(3, "Table Name:", Card1),
+ create_card_text(4, "Table Name Registered:", Card1),
+ create_card_text(5, "Process Owning the Table:", Card1),
+ create_card_text(6, "Name of Owning Process:", Card1),
+
+ create_card_text(1, "Index Position:", Card2),
+ create_card_text(2, "Table Type:", Card2),
+ create_card_text(3, "Protection Mode:", Card2),
+
+ create_card_text(1, "Number of Elements Stored:", Card3),
+ create_card_text(2, "Number of Words Allocated:", Card3),
+
+ create_card_text(1, "Table Stored at Node:", Card4),
+
+ #card_field_ids{table_id = {label, create_card_data_field(2, Card1)},
+ table_type = {label, create_card_data_field(1, Card1)},
+ table_name = {label, create_card_data_field(3, Card1)},
+ named_table = {label, create_card_data_field(4, Card1)},
+ owner_pid = {label, create_card_data_field(5, Card1)},
+ owner_name = {label, create_card_data_field(6, Card1)},
+
+ keypos = {label, create_card_data_field(1, Card2)},
+ bag_or_set = {label, create_card_data_field(2, Card2)},
+ protection = {label, create_card_data_field(3, Card2)},
+
+ size = {label, create_card_data_field(1, Card3)},
+ memory = {label, create_card_data_field(2, Card3)},
+
+ node = {label, create_card_data_field(1, Card4)}
+ }.
+
+
+
+
+
+
+create_special_fields(mnesia, size_card, CardId) ->
+ LabelWidth = 195,
+ LabelHeight = 24,
+ ListboxWidth = 210,
+ ListboxHeight = 160,
+ VerticalSpacing = 20,
+ LXpos = 30,
+ RXpos = 330,
+ Ypos = 40 + (LabelHeight + VerticalSpacing) * 2 + 25,
+ gs:label(CardId, [{width, LabelWidth},
+ {height, LabelHeight},
+ {x, LXpos},
+ {y, Ypos},
+ {bg, ?DEFAULT_BG_COLOR},
+ {fg, {0, 0, 0}},
+ {align, center},
+ {label, {text, "Attribute Names:"}}
+ ]),
+
+ gs:label(CardId, [{width, LabelWidth},
+ {height, LabelHeight},
+ {x, RXpos},
+ {y, Ypos},
+ {bg, ?DEFAULT_BG_COLOR},
+ {fg, {0, 0, 0}},
+ {align, center},
+ {label, {text, "Attributes Used as Indices:"}}
+ ]),
+
+ AttributesId = gs:listbox(CardId, [{width, ListboxWidth},
+ {height, ListboxHeight},
+ {x, LXpos},
+ {y, Ypos + LabelHeight - 3},
+ {bg, {255, 255, 255}},
+ {fg, {0, 0, 0}},
+ {hscroll, bottom},
+ {vscroll, right},
+ {selectmode, single},
+ {click, true},
+ {doubleclick, true},
+ {data, listbox}
+ ]),
+
+ IndexId = gs:listbox(CardId, [{width, ListboxWidth},
+ {height, ListboxHeight},
+ {x, RXpos},
+ {y, Ypos + LabelHeight - 3},
+ {bg, {255, 255, 255}},
+ {fg, {0, 0, 0}},
+ {hscroll, bottom},
+ {vscroll, right},
+ {selectmode, single},
+ {click, true},
+ {doubleclick, true},
+ {data, listbox}
+ ]),
+
+ {{listbox, AttributesId},
+ {listbox, IndexId}
+ };
+create_special_fields(mnesia, storage_card, CardId) ->
+ LabelWidth = 155,
+ LabelHeight = 24,
+ ListboxHeight = 80,
+ ListboxWidth = 170,
+ VerticalSpacing = 20,
+ LXpos = 10,
+ MXpos = 197,
+ RXpos = 385,
+ % Y-positions for upper and lower row.
+ UYpos = 40 + (LabelHeight + VerticalSpacing) * 2,
+ LYpos = UYpos + ListboxHeight + 37,
+ gs:label(CardId, [{width, LabelWidth},
+ {height, LabelHeight},
+ {x, LXpos},
+ {y, UYpos},
+ {bg, ?DEFAULT_BG_COLOR},
+ {fg, {0, 0, 0}},
+ {align, center},
+ {label, {text, "Disc Copy Nodes:"}}
+ ]),
+
+ gs:label(CardId, [{width, LabelWidth},
+ {height, LabelHeight},
+ {x, MXpos},
+ {y, UYpos},
+ {bg, ?DEFAULT_BG_COLOR},
+ {fg, {0, 0, 0}},
+ {align, center},
+ {label, {text, "Disc Only Copy Nodes:"}}
+ ]),
+
+ gs:label(CardId, [{width, LabelWidth},
+ {height, LabelHeight},
+ {x, RXpos},
+ {y, UYpos},
+ {bg, ?DEFAULT_BG_COLOR},
+ {fg, {0, 0, 0}},
+ {align, center},
+ {label, {text, "RAM Copy Nodes:"}}
+ ]),
+
+
+ gs:label(CardId, [{width, LabelWidth},
+ {height, LabelHeight},
+ {x, LXpos},
+ {y, LYpos},
+ {bg, ?DEFAULT_BG_COLOR},
+ {fg, {0, 0, 0}},
+ {align, center},
+ {label, {text, "Table Replica Nodes:"}}
+ ]),
+
+ gs:label(CardId, [{width, LabelWidth},
+ {height, LabelHeight},
+ {x, MXpos},
+ {y, LYpos},
+ {bg, ?DEFAULT_BG_COLOR},
+ {fg, {0, 0, 0}},
+ {align, center},
+ {label, {text, "Active Checkpoints:"}}
+ ]),
+
+
+ DiscCopiesId = gs:listbox(CardId, [{width, ListboxWidth},
+ {height, ListboxHeight},
+ {x, LXpos},
+ {y, UYpos + LabelHeight - 3},
+ {bg, {255, 255, 255}},
+ {fg, {0, 0, 0}},
+ {hscroll, bottom},
+ {vscroll, right},
+ {selectmode, single},
+ {click, true},
+ {doubleclick, true},
+ {data, listbox}
+ ]),
+
+ DiscCopiesOnlyId = gs:listbox(CardId, [{width, ListboxWidth},
+ {height, ListboxHeight},
+ {x, MXpos},
+ {y, UYpos + LabelHeight - 3},
+ {bg, {255, 255, 255}},
+ {fg, {0, 0, 0}},
+ {hscroll, bottom},
+ {vscroll, right},
+ {selectmode, single},
+ {click, true},
+ {doubleclick, true},
+ {data, listbox}
+ ]),
+
+ RamCopiesId = gs:listbox(CardId, [{width, ListboxWidth},
+ {height, ListboxHeight},
+ {x, RXpos},
+ {y, UYpos + LabelHeight - 3},
+ {bg, {255, 255, 255}},
+ {fg, {0, 0, 0}},
+ {hscroll, bottom},
+ {vscroll, right},
+ {selectmode, single},
+ {click, true},
+ {doubleclick, true},
+ {data, listbox}
+ ]),
+
+
+
+ WhereToWriteId = gs:listbox(CardId, [{width, ListboxWidth},
+ {height, ListboxHeight},
+ {x, LXpos},
+ {y, LYpos + LabelHeight - 3},
+ {bg, {255, 255, 255}},
+ {fg, {0, 0, 0}},
+ {hscroll, bottom},
+ {vscroll, right},
+ {selectmode, single},
+ {click, true},
+ {doubleclick, true},
+ {data, listbox}
+ ]),
+
+ CheckpointsId = gs:listbox(CardId, [{width, ListboxWidth},
+ {height, ListboxHeight},
+ {x, MXpos},
+ {y, LYpos + LabelHeight - 3},
+ {bg, {255, 255, 255}},
+ {fg, {0, 0, 0}},
+ {hscroll, bottom},
+ {vscroll, right},
+ {selectmode, single},
+ {click, true},
+ {doubleclick, true},
+ {data, listbox}
+ ]),
+
+ {{listbox, DiscCopiesId},
+ {listbox, DiscCopiesOnlyId},
+ {listbox, RamCopiesId},
+ {listbox, WhereToWriteId},
+ {listbox, CheckpointsId}
+ }.
+
+
+
+
+
+
+
+create_card_data_field(N, ParentId) ->
+ Width = 345,
+ Height = 24,
+ VerticalSpacing = 20,
+ Xpos = 210,
+ Ypos = 40 + (Height + VerticalSpacing) * (N - 1),
+
+ BgFrame = gs:frame(ParentId, [{width, Width},
+ {height, Height},
+ {x, Xpos},
+ {y, Ypos},
+ {bg, {0, 0, 0}},
+ {bw, 0}
+ ]),
+ gs:label(BgFrame, [{width, Width - 2},
+ {height, Height - 2},
+ {x, 1},
+ {y, 1},
+ {bg, {255, 255, 255}},
+ {fg, {0, 0, 0}},
+ {align, w}
+ ]).
+
+
+
+
+
+
+create_card_text(N, Text, ParentId) ->
+ LabelWidth = 205,
+ LabelHeight = 24,
+ VerticalSpacing = 20,
+ Xpos = 10,
+ Ypos = 40 + (LabelHeight + VerticalSpacing) * (N - 1),
+ gs:label(ParentId, [{width, LabelWidth},
+ {height, LabelHeight},
+ {x, Xpos},
+ {y, Ypos},
+ {bg, ?DEFAULT_BG_COLOR},
+ {fg, {0, 0, 0}},
+ {align, w},
+ {label, {text, Text}}
+ ]).
+
+
+
+
+create_card(ParentId, FlapId) ->
+ CardId = gs:frame(ParentId, [{width, 570},
+ {height, 360},
+ {x, 5},
+ {y, 35},
+ {bg, ?DEFAULT_BG_COLOR},
+ {bw, 2}
+ ]),
+ FlapXpos = gs:read(FlapId, data),
+ gs:config(FlapId, [{data, {CardId, FlapXpos}}
+ ]),
+ CardId.
+
+
+
+
+
+set_flap_label(ParentId, Text) ->
+ Bw = gs:read(ParentId, bw), % It is assumed that the parent is a frame! :-)
+ Width = gs:read(ParentId, width) - 2 * Bw - 2,
+ Height = gs:read(ParentId, height) - 2 * Bw - 6,
+ Xpos = 0,
+ Ypos = 0,
+ Data = gs:read(ParentId, data),
+
+ gs:label(ParentId, [{width, Width},
+ {height, Height},
+ {x, Xpos},
+ {y, Ypos},
+ % {fg, {178, 34, 34}},
+ {bg, ?DEFAULT_BG_COLOR},
+ {fg, {0, 0, 0}},
+ {label, {text, Text}},
+ {align, center},
+ {buttonpress, true},
+ {data, Data}
+ ]).
+
+
+
+create_flap(N, _Text, ParentId) ->
+ Width = 120,
+ Height = 40,
+ Spacing = 2,
+ FirstXpos = 5,
+ Xpos = FirstXpos + ((Width + Spacing) * (N - 1)),
+ Ypos = 5,
+ BorderWidth = 2,
+
+ gs:frame(ParentId, [{width, Width},
+ {height, Height},
+ {x, Xpos},
+ {y, Ypos},
+ {bg, ?DEFAULT_BG_COLOR},
+ {bw, BorderWidth},
+ {cursor, hand},
+ {buttonpress, true},
+ {data, Xpos + BorderWidth}
+ ]).
+
+
+
+update_info_flaps(TabType, Node, LocalNode, TabId, CardIds, MasterPid) ->
+ case catch print_info(TabType, Node, LocalNode, TabId, CardIds) of
+ {ok, TabName} ->
+ WinTitle = tv_pc_menu_handling:get_window_title(TabType,Node,TabId,TabName),
+ gs:config(win, [{title, "[TV] " ++ WinTitle}]),
+ done;
+ nodedown ->
+ nodedown;
+ no_table ->
+ gs:config(win, [beep]),
+ case get(error_msg_mode) of
+ normal ->
+ Msg = ["The table " ++ lists:flatten(io_lib:write(TabId)) ++ " on node",
+ lists:flatten(io_lib:write(Node)) ++ " no longer exists!"],
+ tv_utils:notify(win, "TV Notification", Msg);
+ haiku ->
+ Msg = ["Three things are certain:",
+ "Death, taxes, and lost tables.",
+ "Guess which has occurred."],
+ tv_utils:notify(win, "TV Notification", Msg)
+ end,
+ MasterPid ! #ip_dead_table{sender = self()};
+ mnesia_not_started ->
+ gs:config(win, [beep]),
+ case get(error_msg_mode) of
+ normal ->
+ Msg = ["The table " ++ lists:flatten(io_lib:write(TabId)) ++ " on node",
+ lists:flatten(io_lib:write(Node)) ++ " no longer exists!"],
+ tv_utils:notify(win, "TV Notification", Msg);
+ haiku ->
+ Msg = ["A table that big?",
+ "It might be very useful.",
+ "But now it is gone."],
+ tv_utils:notify(win, "TV Notification", Msg)
+ end,
+ MasterPid ! #ip_dead_table{sender = self()};
+ {unexpected_error,Reason} ->
+ io:format("Unexpected error: ~p~n", [Reason]);
+ _Other ->
+ io:format("Unexpected return value: ~p~n", [_Other]),
+ done
+ end.
+
+
+
+
+loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType) ->
+ receive
+ #info_update_table_info{sender = Sender} ->
+ NewNode = check_node(Node, LocalNode),
+ update_info_flaps(TabType, NewNode, LocalNode, TabId, CardIds, Sender),
+ loop(CardIds, MaskLabel, NewNode, LocalNode, TabId, TabType);
+
+
+ #info_raise_window{sender = Sender} ->
+ gs:config(CardIds#card_field_ids.window_id, [raise]),
+ NewNode = check_node(Node, LocalNode),
+ chk(update_info_flaps(TabType, NewNode, LocalNode, TabId, CardIds, Sender)),
+ loop(CardIds, MaskLabel, NewNode, LocalNode, TabId, TabType);
+
+
+ #info_quit{} ->
+ exit(normal);
+
+ {gs, _FlapId, buttonpress, {CardId, Xpos}, [1 | _]} ->
+ gs:config(CardId, [raise
+ ]),
+ gs:config(MaskLabel, [raise,
+ {x, Xpos}
+ ]),
+ loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType);
+
+ {gs, _Id, buttonpress, {_CardId, _Xpos}, _Args} ->
+ loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType);
+
+ {gs, _LblId, enter, _Data, _Args} ->
+ loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType);
+
+ {gs, WinId, configure, _Data, _Args} ->
+ gs:config(WinId, [{width, ?WINDOW_WIDTH},
+ {height, ?WINDOW_HEIGHT}
+ ]),
+ loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType);
+
+ {gs, ListboxId, click, listbox, _Args} ->
+ gs:config(ListboxId, [{selection, clear}]),
+ loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType);
+
+ {gs, ListboxId, doubleclick, listbox, _Args} ->
+ gs:config(ListboxId, [{selection, clear}]),
+ loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType);
+
+ {gs, _Id, click, update, _Args} ->
+ NewNode = check_node(Node, LocalNode),
+ chk(update_info_flaps(TabType,NewNode,LocalNode,TabId,CardIds,
+ CardIds#card_field_ids.parent_pid)),
+ loop(CardIds, MaskLabel, NewNode, LocalNode, TabId, TabType);
+
+ {gs, _Id, keypress, _, [r, _, 0, 1 | _]} ->
+ NewNode = check_node(Node, LocalNode),
+ chk(update_info_flaps(TabType,NewNode,LocalNode,TabId,CardIds,
+ CardIds#card_field_ids.parent_pid)),
+ loop(CardIds, MaskLabel, NewNode, LocalNode, TabId, TabType);
+
+ {gs, _Id, keypress, _, ['R', _, 1, 1 | _]} ->
+ NewNode = check_node(Node, LocalNode),
+ chk(update_info_flaps(TabType,NewNode,LocalNode,TabId,CardIds,
+ CardIds#card_field_ids.parent_pid)),
+ loop(CardIds, MaskLabel, NewNode, LocalNode, TabId, TabType);
+
+ {gs, _Id, click, close_menu, _Args} ->
+ exit(normal);
+
+ {gs, _Id, keypress, _, [c, _, 0, 1 | _]} ->
+ exit(normal);
+
+ {gs, _Id, keypress, _, ['C', _, 1, 1 | _]} ->
+ exit(normal);
+
+ {gs, _Id, destroy, _Data, _Args} ->
+ exit(normal);
+
+ {'EXIT', _Pid, _Reason} ->
+ exit(normal);
+
+ {error_msg_mode, Mode} ->
+ put(error_msg_mode, Mode),
+ loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType);
+
+ _Other ->
+ loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType)
+ end.
+
+
+
+
+
+
+chk(nodedown) ->
+ gs:config(win, [beep]),
+ case get(error_msg_mode) of
+ normal ->
+ tv_utils:notify(win, "TV Notification",
+ ["The node is down, and the",
+ "table cannot be reached."]);
+ haiku ->
+ ErrMsg1 = ["With searching comes loss",
+ "And the presence of absence:",
+ "Node is down."],
+ tv_utils:notify(win, "TV Notification", ErrMsg1)
+ end;
+chk(_Other) ->
+ done.
+
diff --git a/lib/tv/src/tv_int_def.hrl b/lib/tv/src/tv_int_def.hrl
new file mode 100644
index 0000000000..6d4263c51b
--- /dev/null
+++ b/lib/tv/src/tv_int_def.hrl
@@ -0,0 +1,56 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%%*********************************************************************
+%%%
+%%% Description: Internal definitions for the table tool as a whole.
+%%%
+%%%*********************************************************************
+
+-define(COMM_FUNC_FILE, tv_comm_func).
+
+-define(ITEMS_TO_DISPLAY, 35).
+
+
+-define(DEFAULT_BACKGROUND_COLOR, {255, 255, 255}). % white
+
+
+% Colors used for marking updates.
+
+-define(BLACK, { 0, 0, 0}).
+
+-define(RED1, {255, 0, 0}).
+-define(RED2, {255, 100, 100}).
+-define(RED3, {255, 150, 150}).
+-define(RED4, {255, 200, 200}).
+-define(RED5, {235, 217, 217}).
+
+
+-define(GREEN1, { 0, 255, 0}).
+-define(GREEN2, {115, 255, 135}).
+-define(GREEN3, {125, 225, 150}).
+-define(GREEN4, {170, 225, 185}).
+-define(GREEN5, {195, 219, 202}).
+
+-define(DEFAULT_BTN_COLOR, {217, 217, 217}).
+
+
+
+
+
+
+
diff --git a/lib/tv/src/tv_int_msg.hrl b/lib/tv/src/tv_int_msg.hrl
new file mode 100644
index 0000000000..75ce8eca3b
--- /dev/null
+++ b/lib/tv/src/tv_int_msg.hrl
@@ -0,0 +1,504 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%%*********************************************************************
+%%%
+%%% Description: File containing all messages used internally
+%%% between the various table tool components.
+%%%
+%%%*********************************************************************
+
+
+%%%*********************************************************************
+%%% MESSAGES OWNED BY PC
+%%%*********************************************************************
+
+
+
+-record(pc_raise_window, {sender}).
+
+
+
+-record(pc_menu_msg, {sender,
+ data}).
+
+
+
+-record(pc_win_conf, {sender,
+ width,
+ height}).
+
+
+
+-record(pc_show_table_info, {sender}).
+
+
+
+-record(pc_poll_table, {sender}).
+
+
+
+-record(pc_select, {sender}).
+
+
+
+-record(pc_help, {sender}).
+
+
+
+-record(pc_set_sorting_mode, {sender,
+ sorting, % 'true' or 'false'
+ reverse, % 'true' or 'false',
+ sort_key_no = 1
+ }).
+
+
+
+-record(pc_set_sorting_mode_cfm, {sender,
+ sort_key_no
+ }).
+
+
+
+-record(pc_marked_row, {sender,
+ row_no,
+ object,
+ color
+ }).
+
+
+
+-record(pc_data_req, {sender,
+ element,
+ nof_elements
+ }).
+
+
+
+-record(pc_resend_data, {sender}).
+
+
+
+
+-record(pc_data, {sender,
+ scale_pos, % vertical scale
+ scale_range, % vertical scale
+ max_elem_size,
+ list_range,
+ elementlist,
+ marked_row,
+ list_of_keys,
+ color}).
+
+
+
+
+-record(pc_list_info, {sender,
+ lists_as_strings}).
+
+
+
+-record(pc_dead_table, {sender,
+ automatic_polling}).
+
+
+
+-record(pc_nodedown, {sender,
+ automatic_polling}).
+
+
+
+-record(pc_search_req, {sender
+ }).
+
+
+
+
+%%%*********************************************************************
+%%% MESSAGES OWNED BY PD
+%%%*********************************************************************
+
+
+
+-record(pd_win_conf, {sender,
+ width,
+ height}).
+
+
+
+%%======================================================================
+%% Message:
+%%
+%% Function:
+%%
+%% Data: sender: Pid of the sender of the message.
+%% win: Id of window to create canvas and scale in.
+%% win_width: width of the window to create the canvas in.
+%% win_height: height of the window to create the canvas in.
+%% scale: whether a scale shall be shown or not.
+%% Possible values: true -- scale is shown.
+%% false -- scale is not shown.
+%%======================================================================
+
+-record(pd_deblock, {sender,
+ win,
+ win_width,
+ win_height,
+ scale = false,
+ range}).
+
+
+
+
+-record(pd_deblock_cfm, {sender}).
+
+
+
+-record(pd_new_table, {sender,
+ table_type,
+ table_name,
+ record_name, %% Only valid for Mnesia tables.
+ writable
+ }).
+
+
+
+-record(pd_get_sort_settings, {sender,
+ sorting,
+ reverse
+ }).
+
+
+
+-record(pd_no_sorting, {sender
+ }).
+
+
+
+
+-record(pd_ignore, {sender
+ }).
+
+
+
+
+-record(pd_updated_object, {sender,
+ object,
+ old_object,
+ old_color, %% Tells status of the object, if deleted or present.
+ obj_no
+ }).
+
+
+
+-record(pd_new_object, {sender, %% Used when no row is marked.
+ object %% Note: may still be an updated object!
+ }).
+
+
+
+-record(pd_delete_object, {sender,
+ object,
+ color
+ }).
+
+
+
+-record(pd_rec_edit, {sender,
+ attributes
+ }).
+
+
+
+%%%*********************************************************************
+%%% MESSAGES OWNED BY PW
+%%%*********************************************************************
+
+
+
+
+-record(pw_deblock, {sender,
+ win_title,
+ win_width,
+ win_height,
+ min_win_width,
+ min_win_height}).
+
+
+
+-record(pw_set_window_title, {sender,
+ win_title}).
+
+
+
+-record(pw_deblock_cfm, {sender,
+ win_id}).
+
+
+
+
+%%======================================================================
+%% Message: pw_create_menu.
+%%
+%% Function: Order to pw to create a menu according to the content of the message.
+%%
+%% Data: menutitle: string containing the name of the menu, e.g., "File".
+%% menulist: list of tuples having the following format:
+%% {Text, Data}, where Text is the string that shall be
+%% written in each menulist item, and Data is optional data,
+%% presumably the name of a function that is to be called
+%% when the corresponding menulist message is received.
+%%======================================================================
+
+-record(pw_create_menu, {sender,
+ menutitle,
+ title_acc_pos,
+ menulist}).
+
+
+
+-record(pw_create_menu_cfm, {sender}).
+
+
+
+-record(pw_select_menu, {sender,
+ menu,
+ old_menus}).
+
+
+
+
+
+%%%*********************************************************************
+%%% MESSAGES OWNED BY DBS
+%%%*********************************************************************
+
+
+
+-record(dbs_deblock, {sender,
+ etsread_pid,
+ type,
+ keypos,
+ sublist_length}).
+
+
+
+-record(dbs_deblock_cfm, {sender}).
+
+
+
+
+-record(dbs_new_data, {sender,
+ data,
+ keys,
+ time_to_read_table
+ }).
+
+
+
+-record(dbs_new_mnesia_data, {sender,
+ new_or_changed,
+ deleted,
+ keys
+ }).
+
+
+
+-record(dbs_subset, {sender,
+ data,
+ requested_row,
+ subset_pos,
+ db_length,
+ max_elem_size,
+ list_of_keys,
+ required_time_etsread,
+ required_time_dbs}).
+
+
+
+
+
+-record(dbs_subset_req, {sender,
+ subset_pos,
+ subset_length
+ }).
+
+
+
+
+-record(dbs_sorting_mode, {sender,
+ sorting, % 'true' or 'false'
+ reverse, % 'true' or 'false'
+ sort_key_no
+ }).
+
+
+
+-record(dbs_marked_row, {sender,
+ row_no
+ }).
+
+
+
+
+-record(dbs_search_req, {sender
+ }).
+
+
+
+-record(dbs_updated_object, {sender,
+ object,
+ old_object,
+ old_color,
+ obj_no
+ }).
+
+
+-record(dbs_new_object, {sender,
+ object
+ }).
+
+
+-record(dbs_delete_object, {sender,
+ object,
+ color,
+ obj_no
+ }).
+
+
+
+%%%*********************************************************************
+%%% MESSAGES OWNED BY ETSREAD
+%%%*********************************************************************
+
+
+
+-record(etsread_update_object, {sender,
+ object,
+ old_object,
+ key_no
+ }).
+
+-record(etsread_update_object_cfm, {sender,
+ success
+ }).
+
+
+
+-record(etsread_new_object, {sender,
+ object
+ }).
+
+
+-record(etsread_new_object_cfm, {sender,
+ success
+ }).
+
+
+
+-record(etsread_delete_object, {sender,
+ object,
+ key_no
+ }).
+
+
+-record(etsread_delete_object_cfm, {sender,
+ success
+ }).
+
+
+
+-record(etsread_deblock, {sender,
+ dbs_pid,
+ node,
+ local_node,
+ table_id,
+ table_type, % One of 'ets' or 'mnesia'
+ poll_interval
+ }).
+
+
+
+-record(etsread_deblock_cfm, {sender,
+ type,
+ keypos,
+ protection
+ }).
+
+
+
+-record(etsread_set_poll_interval, {sender,
+ interval}).
+
+
+
+-record(etsread_poll_table, {sender}).
+
+
+
+-record(etsread_nodedown, {sender}).
+
+
+
+%%%*********************************************************************
+%%% MESSAGES OWNED BY IP
+%%%*********************************************************************
+
+
+
+
+-record(ip_dead_table, {sender}).
+
+
+-record(ip_register_parent, {sender}).
+
+
+
+-record(ip_update, {sender,
+ nof_elements_to_mark,
+ text}).
+
+
+
+-record(ip_quit, {sender}).
+
+
+
+
+%%%*********************************************************************
+%%% MESSAGES OWNED BY INFO
+%%%*********************************************************************
+
+
+-record(info_update_table_info, {sender}).
+
+
+
+-record(info_raise_window, {sender}).
+
+
+
+-record(info_restart, {sender,
+ node,
+ table_id,
+ table_type}).
+
+
+
+-record(info_quit, {sender}).
+
+
diff --git a/lib/tv/src/tv_io_lib.erl b/lib/tv/src/tv_io_lib.erl
new file mode 100644
index 0000000000..f693ff796d
--- /dev/null
+++ b/lib/tv/src/tv_io_lib.erl
@@ -0,0 +1,222 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%%*********************************************************************
+%%%
+%%% Description: This file contains io functions adapted to the
+%%% TV requirements.
+%%%
+%%%*********************************************************************
+
+-module(tv_io_lib).
+
+
+-export([format/2]).
+
+-export([write/1,write/2]).
+-export([write_atom/1,write_string/2]).
+
+-export([char_list/1,deep_char_list/1,printable_list/1]).
+
+
+
+%% Interface calls to sub-modules.
+
+format(Format, Args) ->
+ tv_io_lib_format:fwrite(Format, Args).
+
+
+%% write(Term)
+%% write(Term, Depth)
+%% write(Term, Depth, Pretty)
+%% Return a (non-flattened) list of characters giving a printed
+%% representation of the term.
+
+write(Term) -> write(Term, -1).
+
+write(_Term, 0) -> "...";
+write(Term, _D) when is_integer(Term) -> integer_to_list(Term);
+write(Term, _D) when is_float(Term) -> tv_io_lib_format:fwrite_g(Term);
+write(Atom, _D) when is_atom(Atom) -> write_atom(Atom);
+write(Term, _D) when is_port(Term) -> "#Port";
+write(Term, _D) when is_pid(Term) -> pid_to_list(Term);
+write(Term, _D) when is_reference(Term) -> "#Ref";
+write(Term, _D) when is_binary(Term) -> "#Bin";
+write(Term, _D) when is_bitstring(Term) -> "#Bitstr";
+write([], _D) -> "[]";
+write({}, _D) -> "{}";
+write([H|T], D) ->
+ if
+ D =:= 1 -> "[...]";
+ true ->
+ [$[,[write(H, D-1)|write_tail(T, D-1)],$]]
+ end;
+write(F, _D) when is_function(F) ->
+ {module,M} = erlang:fun_info(F, module),
+ ["#Fun<",atom_to_list(M),">"];
+write(T, D) when is_tuple(T) ->
+ if
+ D =:= 1 -> "{...}";
+ true ->
+ [${,
+ [write(element(1, T), D-1)|write_tail(tl(tuple_to_list(T)), D-1)],
+ $}]
+ end.
+
+%% write_tail(List, Depth)
+%% Test the terminating case first as this looks better with depth.
+
+write_tail([], _D) -> "";
+write_tail(_List, 1) -> "|...";
+write_tail([H|T], D) ->
+ [$,,write(H, D-1)|write_tail(T, D-1)];
+write_tail(Other, D) ->
+ [$|,write(Other, D-1)].
+
+%% write_atom(Atom) -> [Char]
+%% Generate the list of characters needed to print an atom.
+
+write_atom(Atom) ->
+ Chars = atom_to_list(Atom),
+ case quote_atom(Atom, Chars) of
+ true ->
+ write_string(Chars, $');
+ false ->
+ Chars
+ end.
+
+
+write_string(S, Q) ->
+ [Q|write_string1(S, Q)].
+
+write_string1([], Q) ->
+ [Q];
+write_string1([C|Cs], Q) ->
+ write_char(C, Q, write_string1(Cs, Q)).
+
+
+write_char(Q, Q, Tail) -> %Must check this first
+ [$\\,Q|Tail];
+write_char($\\, _, Tail) -> %In printable character range
+ [$\\,$\\|Tail];
+write_char(C, _, Tail) when C >= $ , C =< $~ ->
+ [C|Tail];
+write_char(C, _, Tail) when C >= 128+$ , C =< 255 ->
+ [C|Tail];
+write_char($\n, _Q, Tail) -> %\n = LF
+ [$\\,$n|Tail];
+write_char($\r, _, Tail) -> %\r = CR
+ [$\\,$r|Tail];
+write_char($\t, _, Tail) -> %\t = TAB
+ [$\\,$t|Tail];
+write_char($\v, _, Tail) -> %\v = VT
+ [$\\,$v|Tail];
+write_char($\b, _, Tail) -> %\b = BS
+ [$\\,$b|Tail];
+write_char($\f, _, Tail) -> %\f = FF
+ [$\\,$f|Tail];
+write_char($\e, _, Tail) -> %\e = ESC
+ [$\\,$e|Tail];
+write_char($\d, _, Tail) -> %\d = DEL
+ [$\\,$d|Tail];
+write_char(C, _, Tail) when C < $ ->
+ C1 = (C bsr 3) + $0,
+ C2 = (C band 7) + $0,
+ [$\\,$0,C1,C2|Tail];
+write_char(C, _, Tail) when C > $~ ->
+ C1 = (C bsr 6) + $0,
+ C2 = ((C bsr 3) band 7) + $0,
+ C3 = (C band 7) + $0,
+ [$\\,C1,C2,C3|Tail].
+
+%% quote_atom(Atom, CharList)
+%% Return 'true' if atom with chars in CharList needs to be quoted, else
+%% return 'false'.
+
+quote_atom(Atom, Cs0) ->
+ case erl_scan:reserved_word(Atom) of
+ true -> true;
+ false ->
+ case Cs0 of
+ [C|Cs] when C >= $a, C =< $z ->
+ quote_atom(Cs);
+ _ -> true
+ end
+ end.
+
+quote_atom([C|Cs]) when C >= $a, C =< $z ->
+ quote_atom(Cs);
+quote_atom([C|Cs]) when C >= $A, C =< $Z ->
+ quote_atom(Cs);
+quote_atom([C|Cs]) when C >= $0, C =< $9 ->
+ quote_atom(Cs);
+quote_atom([$_|Cs]) ->
+ quote_atom(Cs);
+quote_atom([$@|Cs]) ->
+ quote_atom(Cs);
+quote_atom([_|_]) ->
+ true;
+quote_atom([]) ->
+ false.
+
+%% char_list(CharList)
+%% deep_char_list(CharList)
+%% Return true if CharList is a (possibly deep) list of characters, else
+%% false.
+
+char_list([C|Cs]) when is_integer(C), C >= 0, C =< 255 ->
+ char_list(Cs);
+char_list([]) -> true;
+char_list(_Other) -> false. %Everything else is false
+
+deep_char_list(Cs) ->
+ deep_char_list(Cs, []).
+
+deep_char_list([C|Cs], More) when is_list(C) ->
+ deep_char_list(C, [Cs|More]);
+deep_char_list([C|Cs], More) when is_integer(C), C >= 0, C =< 255 ->
+ deep_char_list(Cs, More);
+deep_char_list([], [Cs|More]) ->
+ deep_char_list(Cs, More);
+deep_char_list([], []) -> true;
+deep_char_list(_Other, _More) -> %Everything else is false
+ false.
+
+%% printable_list([Char]) -> bool()
+%% Return true if CharList is a list of printable characters, else
+%% false.
+
+printable_list([C|Cs]) when is_integer(C), C >= $ , C =< 255 ->
+ printable_list(Cs);
+printable_list([$\n|Cs]) ->
+ printable_list(Cs);
+printable_list([$\r|Cs]) ->
+ printable_list(Cs);
+printable_list([$\t|Cs]) ->
+ printable_list(Cs);
+printable_list([$\v|Cs]) ->
+ printable_list(Cs);
+printable_list([$\b|Cs]) ->
+ printable_list(Cs);
+printable_list([$\f|Cs]) ->
+ printable_list(Cs);
+printable_list([$\e|Cs]) ->
+ printable_list(Cs);
+printable_list([]) -> true;
+printable_list(_Other) -> false. %Everything else is false
+
+
diff --git a/lib/tv/src/tv_io_lib_format.erl b/lib/tv/src/tv_io_lib_format.erl
new file mode 100644
index 0000000000..5042fd3f9d
--- /dev/null
+++ b/lib/tv/src/tv_io_lib_format.erl
@@ -0,0 +1,389 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(tv_io_lib_format).
+
+
+-export([fwrite/2,fwrite_g/1,indentation/2]).
+
+
+%% fwrite(Format, ArgList) -> [Char].
+%% Format the arguments in ArgList after string Format. Just generate
+%% an error if there is an error in the arguments.
+%%
+%% To do the printing command correctly we need to calculate the
+%% current indentation for everything before it. This may be very
+%% expensive, especially when it is not needed, so we first determine
+%% if, and for how long, we need to calculate the indentations. We do
+%% this by first collecting all the control sequences and
+%% corresponding arguments, then counting the print sequences and
+%% then building the output. This method has some drawbacks, it does
+%% two passes over the format string and creates more temporary data,
+%% and it also splits the handling of the control characters into two
+%% parts.
+
+fwrite(Format, Args) when is_atom(Format) ->
+ fwrite(atom_to_list(Format), Args);
+fwrite(Format, Args) ->
+ Cs = collect(Format, Args),
+ Pc = pcount(Cs),
+ build(Cs, Pc, 0).
+
+collect([$~|Fmt0], Args0) ->
+ {C,Fmt1,Args1} = collect_cseq(Fmt0, Args0),
+ [C|collect(Fmt1, Args1)];
+collect([C|Fmt], Args) ->
+ [C|collect(Fmt, Args)];
+collect([], []) -> [].
+
+collect_cseq(Fmt0, Args0) ->
+ {F,Ad,Fmt1,Args1} = field_width(Fmt0, Args0),
+ {P,Fmt2,Args2} = precision(Fmt1, Args1),
+ {Pad,Fmt3,Args3} = pad_char(Fmt2, Args2),
+ {C,As,Fmt4,Args4} = collect_cc(Fmt3, Args3),
+ {{C,As,F,Ad,P,Pad},Fmt4,Args4}.
+
+field_width([$-|Fmt0], Args0) ->
+ {F,Fmt,Args} = field_value(Fmt0, Args0),
+ field_width(-F, Fmt, Args);
+field_width(Fmt0, Args0) ->
+ {F,Fmt,Args} = field_value(Fmt0, Args0),
+ field_width(F, Fmt, Args).
+
+field_width(F, Fmt, Args) when F < 0 ->
+ {-F,left,Fmt,Args};
+field_width(F, Fmt, Args) when F >= 0 ->
+ {F,right,Fmt,Args}.
+
+precision([$.|Fmt], Args) ->
+ field_value(Fmt, Args);
+precision(Fmt, Args) ->
+ {none,Fmt,Args}.
+
+field_value([$*|Fmt], [A|Args]) when is_integer(A) ->
+ {A,Fmt,Args};
+field_value([C|Fmt], Args) when C >= $0, C =< $9 ->
+ field_value([C|Fmt], Args, 0);
+field_value(Fmt, Args) ->
+ {none,Fmt,Args}.
+
+field_value([C|Fmt], Args, F) when C >= $0, C =< $9 ->
+ field_value(Fmt, Args, 10*F + (C - $0));
+field_value(Fmt, Args, F) -> %Default case
+ {F,Fmt,Args}.
+
+pad_char([$.,$*|Fmt], [Pad|Args]) -> {Pad,Fmt,Args};
+pad_char([$.,Pad|Fmt], Args) -> {Pad,Fmt,Args};
+pad_char(Fmt, Args) -> {$ ,Fmt,Args}.
+
+%% collect_cc([FormatChar], [Argument]) ->
+%% {Control,[ControlArg],[FormatChar],[Arg]}.
+%% Here we collect the argments for each control character.
+%% Be explicit to cause failure early.
+
+collect_cc([$w|Fmt], [A|Args]) -> {$w,[A],Fmt,Args};
+collect_cc([$p|Fmt], [A|Args]) -> {$p,[A],Fmt,Args};
+collect_cc([$W|Fmt], [A,Depth|Args]) -> {$W,[A,Depth],Fmt,Args};
+collect_cc([$P|Fmt], [A,Depth|Args]) -> {$P,[A,Depth],Fmt,Args};
+collect_cc([$s|Fmt], [A|Args]) -> {$s,[A],Fmt,Args};
+collect_cc([$e|Fmt], [A|Args]) -> {$e,[A],Fmt,Args};
+collect_cc([$f|Fmt], [A|Args]) -> {$f,[A],Fmt,Args};
+collect_cc([$g|Fmt], [A|Args]) -> {$g,[A],Fmt,Args};
+collect_cc([$c|Fmt], [A|Args]) -> {$c,[A],Fmt,Args};
+collect_cc([$~|Fmt], Args) -> {$~,[],Fmt,Args};
+collect_cc([$n|Fmt], Args) -> {$n,[],Fmt,Args};
+collect_cc([$i|Fmt], [A|Args]) -> {$i,[A],Fmt,Args}.
+
+%% pcount([ControlC]) -> Count.
+%% Count the number of print requests.
+
+pcount(Cs) -> pcount(Cs, 0).
+
+pcount([{$p,_As,_F,_Ad,_P,_Pad}|Cs], Acc) -> pcount(Cs, Acc+1);
+pcount([{$P,_As,_F,_Ad,_P,_Pad}|Cs], Acc) -> pcount(Cs, Acc+1);
+pcount([_|Cs], Acc) -> pcount(Cs, Acc);
+pcount([], Acc) -> Acc.
+
+%% build([Control], Pc, Indentation) -> [Char].
+%% Interpret the control structures. Count the number of print
+%% remaining and only calculate indentation when necessary. Must also
+%% be smart when calculating indentation for characters in format.
+
+build([{C,As,F,Ad,P,Pad}|Cs], Pc0, I) ->
+ S = control(C, As, F, Ad, P, Pad, I),
+ Pc1 = decr_pc(C, Pc0),
+ if
+ Pc1 > 0 -> [S|build(Cs, Pc1, indentation(S, I))];
+ true -> [S|build(Cs, Pc1, I)]
+ end;
+build([$\n|Cs], Pc, _I) -> [$\n|build(Cs, Pc, 0)];
+build([$\t|Cs], Pc, I) -> [$\t|build(Cs, Pc, ((I + 8) div 8) * 8)];
+build([C|Cs], Pc, I) -> [C|build(Cs, Pc, I+1)];
+build([], _, _) -> [].
+
+decr_pc($p, Pc) -> Pc - 1;
+decr_pc($P, Pc) -> Pc - 1;
+decr_pc(_C, Pc) -> Pc.
+
+%% control(FormatChar, [Argument], FieldWidth, Adjust, Precision, PadChar,
+
+%% Indentation) ->
+%% [Char]
+%% This is the main dispatch function for the various formatting commands.
+%% Field widths and precisions have already been calculated.
+
+control($w, [A], F, Adj, P, Pad, _I) ->
+ term(tv_io_lib:write(A, -1), F, Adj, P, Pad);
+control($p, [A], F, Adj, P, Pad, I) ->
+ print(A, -1, F, Adj, P, Pad, I);
+control($W, [A,Depth], F, Adj, P, Pad, _I) when is_integer(Depth) ->
+ term(tv_io_lib:write(A, Depth), F, Adj, P, Pad);
+control($P, [A,Depth], F, Adj, P, Pad, I) when is_integer(Depth) ->
+ print(A, Depth, F, Adj, P, Pad, I);
+control($s, [A], F, Adj, P, Pad, _I) when is_atom(A) ->
+ string(atom_to_list(A), F, Adj, P, Pad);
+control($s, [L], F, Adj, P, Pad, _I) ->
+ true = tv_io_lib:deep_char_list(L), %Check if L a character list
+ string(L, F, Adj, P, Pad);
+control($e, [A], F, Adj, P, Pad, _I) when is_float(A) ->
+ fwrite_e(A, F, Adj, P, Pad);
+control($f, [A], F, Adj, P, Pad, _I) when is_float(A) ->
+ fwrite_f(A, F, Adj, P, Pad);
+control($g, [A], F, Adj, P, Pad, _I) when is_float(A) ->
+ fwrite_g(A, F, Adj, P, Pad);
+control($c, [A], F, Adj, P, Pad, _I) when is_integer(A) ->
+ char(A band 255, F, Adj, P, Pad);
+control($~, [], F, Adj, P, Pad, _I) -> char($~, F, Adj, P, Pad);
+control($n, [], F, Adj, P, Pad, _I) -> newline(F, Adj, P, Pad);
+control($i, [_A], _F, _Adj, _P, _Pad, _I) -> [].
+
+%% indentation([Char], Indentation) -> Indentation.
+%% Calculate the indentation of the end of a string given its start
+%% indentation. We assume tabs at 8 cols.
+
+indentation([$\n|Cs], _I) -> indentation(Cs, 0);
+indentation([$\t|Cs], I) -> indentation(Cs, ((I + 8) div 8) * 8);
+indentation([C|Cs], I) when is_integer(C) ->
+ indentation(Cs, I+1);
+indentation([C|Cs], I) ->
+ indentation(Cs, indentation(C, I));
+indentation([], I) -> I.
+
+%% term(TermList, Field, Adjust, Precision, PadChar)
+%% Output the characters in a term.
+
+term(T, none, _Adj, none, _Pad) -> T;
+term(T, none, Adj, P, Pad) -> term(T, P, Adj, P, Pad);
+term(T, F, Adj, none, Pad) -> term(T, F, Adj, min(flat_length(T), F), Pad);
+term(T, F, Adj, P, Pad) when F >= P ->
+ adjust_error(T, F, Adj, P, Pad).
+
+%% print(Term, Depth, Field, Adjust, Precision, PadChar, Indentation)
+%% Print a term.
+
+print(T, D, none, Adj, P, Pad, I) -> print(T, D, 80, Adj, P, Pad, I);
+print(T, D, F, Adj, none, Pad, I) -> print(T, D, F, Adj, I+1, Pad, I);
+print(T, D, F, right, P, _Pad, _I) ->
+ tv_io_lib_pretty:pretty_print(T, P, F, D).
+
+%% fwrite_e(Float, Field, Adjust, Precision, PadChar)
+
+fwrite_e(Fl, none, Adj, none, Pad) -> %Default values
+ fwrite_e(Fl, none, Adj, 6, Pad);
+fwrite_e(Fl, none, _Adj, P, _Pad) when P >= 2 ->
+ float_e(Fl, float_data(Fl), P);
+fwrite_e(Fl, F, Adj, none, Pad) ->
+ fwrite_e(Fl, F, Adj, 6, Pad);
+fwrite_e(Fl, F, Adj, P, Pad) when P >= 2 ->
+ adjust_error(float_e(Fl, float_data(Fl), P), F, Adj, F, Pad).
+
+float_e(Fl, Fd, P) when Fl < 0.0 -> %Negative numbers
+ [$-|float_e(-Fl, Fd, P)];
+float_e(_Fl, {Ds,E}, P) ->
+ case float_man(Ds, 1, P-1) of
+ {[$0|Fs],true} -> [[$1|Fs]|float_exp(E)];
+ {Fs,false} -> [Fs|float_exp(E-1)]
+ end.
+
+%% float_man([Digit], Icount, Dcount) -> {[Chars],CarryFlag}.
+%% Generate the characters in the mantissa from the digits with Icount
+%% characters before the '.' and Dcount decimals. Handle carry and let
+%% caller decide what to do at top.
+
+float_man(Ds, 0, Dc) ->
+ {Cs,C} = float_man(Ds, Dc),
+ {[$.|Cs],C};
+float_man([D|Ds], I, Dc) ->
+ case float_man(Ds, I-1, Dc) of
+ {Cs,true} when D =:= $9 -> {[$0|Cs],true};
+ {Cs,true} -> {[D+1|Cs],false};
+ {Cs,false} -> {[D|Cs],false}
+ end;
+float_man([], I, Dc) -> %Pad with 0's
+ {string:chars($0, I, [$.|string:chars($0, Dc)]),false}.
+
+float_man([D|_Ds], 0) when D >= $5 -> {[],true};
+float_man([_|_], 0) -> {[],false};
+float_man([D|Ds], Dc) ->
+ case float_man(Ds, Dc-1) of
+ {Cs,true} when D =:= $9 -> {[$0|Cs],true};
+ {Cs,true} -> {[D+1|Cs],false};
+ {Cs,false} -> {[D|Cs],false}
+ end;
+float_man([], Dc) -> {string:chars($0, Dc),false}. %Pad with 0's
+
+%% float_exp(Exponent) -> [Char].
+%% Generate the exponent of a floating point number. Alwayd include sign.
+
+float_exp(E) when E >= 0 ->
+ [$e,$+|integer_to_list(E)];
+float_exp(E) ->
+ [$e|integer_to_list(E)].
+
+%% fwrite_f(FloatData, Field, Adjust, Precision, PadChar)
+
+fwrite_f(Fl, none, Adj, none, Pad) -> %Default values
+ fwrite_f(Fl, none, Adj, 6, Pad);
+fwrite_f(Fl, none, _Adj, P, _Pad) when P >= 1 ->
+ float_f(Fl, float_data(Fl), P);
+fwrite_f(Fl, F, Adj, none, Pad) ->
+ fwrite_f(Fl, F, Adj, 6, Pad);
+fwrite_f(Fl, F, Adj, P, Pad) when P >= 1 ->
+ adjust_error(float_f(Fl, float_data(Fl), P), F, Adj, F, Pad).
+
+float_f(Fl, Fd, P) when Fl < 0.0 ->
+ [$-|float_f(-Fl, Fd, P)];
+float_f(Fl, {Ds,E}, P) when E =< 0 ->
+ float_f(Fl, {string:chars($0, -E+1, Ds),1}, P); %Prepend enough 0's
+float_f(_Fl, {Ds,E}, P) ->
+ case float_man(Ds, E, P) of
+ {Fs,true} -> "1" ++ Fs; %Handle carry
+ {Fs,false} -> Fs
+ end.
+
+%% float_data([FloatChar]) -> {[Digit],Exponent}
+
+float_data(Fl) ->
+ float_data(float_to_list(Fl), []).
+
+float_data([$e|E], Ds) ->
+ {reverse(Ds),list_to_integer(E)+1};
+float_data([D|Cs], Ds) when D >= $0, D =< $9 ->
+ float_data(Cs, [D|Ds]);
+float_data([_D|Cs], Ds) ->
+ float_data(Cs, Ds).
+
+
+%% fwrite_g(Float, Field, Adjust, Precision, PadChar)
+%% Use the f form if Float is > 0.1 and < 10^4, else the e form.
+%% Precision always means the # of significant digits.
+
+fwrite_g(Fl) ->
+ fwrite_g(Fl, none, right, none, $\s).
+
+fwrite_g(Fl, F, Adj, none, Pad) ->
+ fwrite_g(Fl, F, Adj, 6, Pad);
+fwrite_g(Fl, F, Adj, P, Pad) when abs(Fl) < 0.1 ->
+ fwrite_e(Fl, F, Adj, P, Pad);
+fwrite_g(Fl, F, Adj, P, Pad) when abs(Fl) < 1.0 ->
+ fwrite_f(Fl, F, Adj, P, Pad);
+fwrite_g(Fl, F, Adj, P, Pad) when abs(Fl) < 10.0 ->
+ fwrite_f(Fl, F, Adj, P-1, Pad);
+fwrite_g(Fl, F, Adj, P, Pad) when abs(Fl) < 100.0 ->
+ fwrite_f(Fl, F, Adj, P-2, Pad);
+fwrite_g(Fl, F, Adj, P, Pad) when abs(Fl) < 1000.0 ->
+ fwrite_f(Fl, F, Adj, P-3, Pad);
+fwrite_g(Fl, F, Adj, P, Pad) when abs(Fl) < 10000.0 ->
+ fwrite_f(Fl, F, Adj, P-4, Pad);
+fwrite_g(Fl, F, Adj, P, Pad) ->
+ fwrite_e(Fl, F, Adj, P, Pad).
+
+%% string(String, Field, Adjust, Precision, PadChar)
+
+string(S, none, _Adj, none, _Pad) -> S;
+string(S, F, Adj, none, Pad) ->
+ string(S, F, Adj, min(flat_length(S), F), Pad);
+string(S, none, _Adj, P, Pad) ->
+ string:left(flatten(S), P, Pad);
+string(S, F, Adj, P, Pad) when F >= P ->
+ adjust(string:left(flatten(S), P, Pad), string:chars(Pad, F - P), Adj).
+
+%% char(Char, Field, Adjust, Precision, PadChar) -> [Char].
+
+char(C, none, _Adj, none, _Pad) -> [C];
+char(C, F, _Adj, none, _Pad) -> string:chars(C, F);
+char(C, none, _Adj, P, _Pad) -> string:chars(C, P);
+char(C, F, Adj, P, Pad) when F >= P ->
+ adjust(string:chars(C, P), string:chars(Pad, F - P), Adj).
+
+%% newline(Field, Adjust, Precision, PadChar) -> [Char].
+
+newline(none, _Adj, _P, _Pad) -> "\n";
+newline(F, right, _P, _Pad) -> string:chars($\n, F).
+
+%% adjust_error([Char], Field, Adjust, Max, PadChar) -> [Char].
+%% Adjust the characters within the field if length less than Max padding
+%% with PadChar.
+
+adjust_error(Cs, F, Adj, M, Pad) ->
+ L = flat_length(Cs),
+ if
+ L > M ->
+ adjust(string:chars($*, M), string:chars(Pad, F - M), Adj);
+ true ->
+ adjust(Cs, string:chars(Pad, F - L), Adj)
+ end.
+
+adjust(Data, Pad, left) -> [Data,Pad];
+adjust(Data, Pad, right) -> [Pad,Data].
+
+%%
+%% Utilities
+%%
+
+reverse(List) ->
+ reverse(List, []).
+
+reverse([H|T], Stack) ->
+ reverse(T, [H|Stack]);
+reverse([], Stack) -> Stack.
+
+min(L, R) when L < R -> L;
+min(_, R) -> R.
+
+%% flatten(List)
+%% Flatten a list.
+
+flatten(List) -> flatten(List, []).
+
+flatten([H|T], Cont) when is_list(H) ->
+ flatten(H, [T|Cont]);
+flatten([H|T], Cont) ->
+ [H|flatten(T, Cont)];
+flatten([], [H|Cont]) -> flatten(H, Cont);
+flatten([], []) -> [].
+
+%% flat_length(List)
+%% Calculate the length of a list of lists.
+
+flat_length(List) -> flat_length(List, 0).
+
+flat_length([H|T], L) when is_list(H) ->
+ flat_length(H, flat_length(T, L));
+flat_length([_|T], L) ->
+ flat_length(T, L + 1);
+flat_length([], L) -> L.
diff --git a/lib/tv/src/tv_io_lib_pretty.erl b/lib/tv/src/tv_io_lib_pretty.erl
new file mode 100644
index 0000000000..c19277d006
--- /dev/null
+++ b/lib/tv/src/tv_io_lib_pretty.erl
@@ -0,0 +1,171 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(tv_io_lib_pretty).
+
+
+
+-export([pretty_print/4]).
+
+%% pretty_print(Term, Column, LineLength, Depth) -> [Chars]
+%% Depth = -1 gives unlimited print depth. Use tv_io_lib:write for atomic terms.
+
+pretty_print(_, _, _, 0) -> "...";
+pretty_print([], _, _, _) -> "[]";
+pretty_print({}, _, _, _) -> "{}";
+pretty_print(List, Col, Ll, D) when is_list(List) ->
+ case tv_io_lib:printable_list(List) of
+ true ->
+ tv_io_lib:write_string(List, $");
+ false ->
+ Len = write_length(List, D, 0, Ll - Col),
+ if
+ D =:= 1 -> "[...]";
+ Len + Col < Ll ->
+ write(List, D);
+ true ->
+ [$[,
+ [pretty_print(hd(List), Col + 1, Ll, D - 1)|
+ pretty_print_tail(tl(List), Col + 1, Ll, D - 1)],
+ $]]
+ end
+ end;
+pretty_print(Fun, _Col, _Ll, _D) when is_function(Fun) ->
+ tv_io_lib:write(Fun);
+pretty_print(Tuple, Col, Ll, D) when is_tuple(Tuple) ->
+ Len = write_length(Tuple, D, 0, Ll - Col),
+ if
+ D =:= 1 -> "{...}";
+ Len + Col < Ll ->
+ write(Tuple, D);
+ is_atom(element(1, Tuple)), size(Tuple) > 1 ->
+ print_tag_tuple(Tuple, Col, Ll, D);
+ true ->
+ [${,
+ [pretty_print(element(1, Tuple), Col + 1, Ll, D - 1)|
+ pretty_print_tail(tl(tuple_to_list(Tuple)), Col + 1, Ll, D - 1)],
+ $}]
+ end;
+pretty_print(Term, _Col, _Ll, D) -> tv_io_lib:write(Term, D).
+
+%% print_tag_tuple(Tuple, Column, LineLength, Depth) -> [Char]
+%% Print a tagged tuple by indenting the rest of the elements differently
+%% to the tag. Start beside the tag if start column not too far to
+%% the right. Tuple has size >= 2.
+
+print_tag_tuple(Tuple, Col, Ll, D) ->
+ Tag = tv_io_lib:write_atom(element(1, Tuple)),
+ Tlen = length(Tag),
+ Tcol = Col + Tlen + 2,
+ if
+ Tcol >= Ll div 2, Tlen > 2 ->
+ [${,Tag,
+ pretty_print_tail(tl(tuple_to_list(Tuple)), Col + 4, Ll, D - 2),
+ $}];
+ true ->
+ [${,Tag,$,,
+ [pretty_print(element(2, Tuple), Col + Tlen + 2, Ll, D - 2)|
+ pretty_print_tail(tl(tl(tuple_to_list(Tuple))), Tcol, Ll, D - 3)],
+ $}]
+ end.
+
+%% pretty_print_tail([Element], Column, LineLength, D) -> [Char]
+%% Pretty print the elements of a list or tuple.
+
+pretty_print_tail([], _Col, _Ll, _D) -> "";
+pretty_print_tail(_Es, _Col, _Ll, 1) -> "|...";
+pretty_print_tail([E|Es], Col, Ll, D) ->
+ [$,,nl_indent(Col-1),
+ pretty_print(E, Col, Ll, D-1)|
+ pretty_print_tail(Es, Col, Ll, D-1)];
+pretty_print_tail(E, Col, Ll, D) ->
+ [$|,nl_indent(Col-1),pretty_print(E, Col, Ll, D-1)].
+
+%% write(Term, Depth) -> [Char]
+%% Write a term down to Depth on one line. Use tv_io_lib:write/2 for
+%% atomic terms.
+
+write(_, 0) -> "...";
+write([], _) -> "[]";
+write({}, _) -> "{}";
+write(List, D) when is_list(List) ->
+ case tv_io_lib:printable_list(List) of
+ true ->
+ tv_io_lib:write_string(List, $");
+ false ->
+ if
+ D =:= 1 -> "[...]";
+ true ->
+ [$[,
+ [write(hd(List), D-1)|write_tail(tl(List), D-1)],
+ $]]
+ end
+ end;
+write(Fun, _D) when is_function(Fun) -> tv_io_lib:write(Fun); %Must catch this first
+write(T, D) when is_tuple(T) ->
+ if
+ D =:= 1 -> "{...}";
+ true ->
+ [${,
+ [write(element(1, T), D-1)|write_tail(tl(tuple_to_list(T)), D-1)],
+ $}]
+ end;
+write(Term, D) -> tv_io_lib:write(Term, D).
+
+write_tail([], _D) -> "";
+write_tail(_Es, 1) -> "|...";
+write_tail([E|Es], D) ->
+ [$,,write(E, D - 1)|write_tail(Es, D - 1)];
+write_tail(E, D) ->
+ [$|,write(E, D - 1)].
+
+%% write_length(Term, Depth, Accumulator, MaxLength) -> integer()
+%% Calculate the print length of a term, but exit when length becomes
+%% greater than MaxLength.
+
+write_length(_T, _D, Acc, Max) when Acc > Max -> Acc;
+write_length(_T, 0, Acc, _Max) -> Acc + 3;
+write_length([], _, Acc, _) -> Acc + 2;
+write_length({}, _, Acc, _) -> Acc + 2;
+write_length(List, D, Acc, Max) when is_list(List) ->
+ case tv_io_lib:printable_list(List) of
+ true ->
+ Acc + length(tv_io_lib:write_string(List, $"));
+ false ->
+ write_length_list(List, D, Acc, Max)
+ end;
+write_length(Fun, _D, Acc, _Max) when is_function(Fun) ->
+ Acc + length(tv_io_lib:write(Fun));
+write_length(Tuple, D, Acc, Max) when is_tuple(Tuple) ->
+ write_length_list(tuple_to_list(Tuple), D, Acc, Max);
+write_length(Term, _D, Acc, _Max) ->
+ Acc + length(tv_io_lib:write(Term)).
+
+write_length_list(_, _, Acc, Max) when Acc > Max -> Acc;
+write_length_list([], _, Acc, _) -> Acc + 1; %]
+write_length_list(_Es, 1, Acc, _) -> Acc + 5; %|...]
+write_length_list([E|Es], D, Acc, Max) ->
+ write_length_list(Es,
+ D - 1,
+ write_length(E, D - 1, Acc + 1, Max),
+ Max);
+write_length_list(E, D, Acc, Max) ->
+ write_length(E, D - 1, Acc + 2, Max). %| ]
+
+
+
+nl_indent(_) -> "".
diff --git a/lib/tv/src/tv_ip.erl b/lib/tv/src/tv_ip.erl
new file mode 100644
index 0000000000..aeec4e8f6d
--- /dev/null
+++ b/lib/tv/src/tv_ip.erl
@@ -0,0 +1,236 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(tv_ip).
+
+
+
+-export([ip/1]).
+
+
+
+-include("tv_int_msg.hrl").
+
+
+-define(NOF_LABELS, 25).
+
+-define(DEFAULT_BG_COLOR, {217, 217, 217}).
+
+
+
+
+
+
+
+%%%*********************************************************************
+%%% EXTERNAL FUNCTIONS
+%%%*********************************************************************
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+ip(_Master) ->
+ W = gs:window(win, gs:start(), [{width, 302},
+ {height, 38},
+ {bg, ?DEFAULT_BG_COLOR},
+ {title, "Launching..."}
+ ]),
+ C = gs:canvas(W, [{width, 40},
+ {height, 35},
+ {x, 0},
+ {bg, {255, 255, 255}}
+ ]),
+ gs:create(image, C, [{load_gif, code:priv_dir(tv) ++ "/erlang.gif"}]),
+ gs:label(W, [{width, 252},
+ {height, 12},
+ {x, 47},
+ {y, 23},
+ {bg, {0, 0, 0}},
+ {cursor, arrow}
+ ]),
+
+ LabelList = create_labels(?NOF_LABELS, W, 48),
+
+ L = gs:label(W, [{width, 250},
+ {height, 18},
+ {x, 47},
+ {y, 0},
+ {bg, ?DEFAULT_BG_COLOR},
+ {fg, {0, 0, 0}},
+ {align, w}
+ ]),
+ gs:config(win, [{map, true}]),
+ loop(1, LabelList, L).
+
+
+
+
+
+
+
+
+
+%%%*********************************************************************
+%%% INTERNAL FUNCTIONS
+%%%*********************************************************************
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+create_labels(0, _WinId, _Xpos) ->
+ [];
+create_labels(N, WinId, Xpos) ->
+ Width = 10,
+ Xdiff = Width,
+ LabelId = gs:label(WinId, [{width, Width},
+ {height, 10},
+ {x, Xpos},
+ {y, 24},
+ {bg, {235, 235, 235}},
+ {cursor, arrow}
+ ]),
+
+ [LabelId | create_labels(N - 1, WinId, Xpos + Xdiff)].
+
+
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+loop(N, LabelList, L) ->
+ receive
+ Msg ->
+ case Msg of
+
+ #ip_update{nof_elements_to_mark = X, text = Text} ->
+ update_window(LabelList, N, N + X, L, Text),
+ loop(N + X, LabelList, L);
+
+ #ip_quit{} ->
+ update_labels(LabelList, N, ?NOF_LABELS),
+ receive
+ after 1000 ->
+ done
+ end,
+ done;
+
+ _Other ->
+ loop(N, LabelList, L)
+ end
+ end.
+
+
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+update_window(LabelList, N, Hi, LblId, Text) ->
+ gs:config(win, [raise]),
+ gs:config(LblId, [{label, {text, Text}}]),
+ update_labels(LabelList, N, Hi).
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+update_labels(_LabelList, N, _Hi) when N > ?NOF_LABELS ->
+ done;
+update_labels(_LabelList, N, Hi) when N >= Hi ->
+ done;
+update_labels(LabelList, N, Hi) ->
+ LabelId = lists:nth(N, LabelList),
+ gs:config(LabelId, [{bg, {0, 0, 255}}]),
+ update_labels(LabelList, N + 1, Hi).
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/tv/src/tv_main.erl b/lib/tv/src/tv_main.erl
new file mode 100644
index 0000000000..2f743c2397
--- /dev/null
+++ b/lib/tv/src/tv_main.erl
@@ -0,0 +1,1807 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(tv_main).
+
+
+
+-export([start/0,
+ init/0
+ ]).
+
+
+-export([get_ets_tables/1,
+ get_mnesia_tables/1
+ ]).
+
+
+
+-include("tv_main.hrl").
+-include("tv_int_msg.hrl").
+-include("tv_pd_int_msg.hrl").
+-include("tv_pd_int_def.hrl").
+
+
+
+
+%%%*********************************************************************
+%%% EXTERNAL FUNCTIONS
+%%%*********************************************************************
+
+
+start() ->
+ spawn(?MODULE, init, []).
+
+
+
+init() ->
+ process_flag(trap_exit,true),
+ %% OK, so it's *BAD* to use the process dictionary...
+ %% So why have I used it? Because it is simple to remove the haiku-functionality,
+ %% if that is desired. Otherwise a lot of functions (the parameters) would have
+ %% to be changed.
+ put(error_msg_mode, ?ERROR_MSG_MODE),
+ KindOfTable = ets,
+ SysTabHidden = true,
+ UnreadHidden = true,
+ SortKey = ?NAME_COL,
+ CurrNode = node(),
+ Children = start_tv_nodewin(CurrNode),
+ {MarkedCell, TempGridLines, WinSize, ShortcutList} = create_window([]),
+ Tables = get_tables(CurrNode, KindOfTable, UnreadHidden, SysTabHidden,SortKey),
+ gs:config(grid, [{rows, {1, get_nof_rows(length(Tables),
+ gs:read(grid, height))}}]),
+ GridLines = update_gridlines(Tables, TempGridLines, 1),
+ gs:config(win, [{map, true}, {cursor,arrow}]),
+ %% To avoid unpleasant error/exit messages, we surround the loop with a catch.
+ catch loop(KindOfTable, CurrNode, MarkedCell, GridLines, WinSize, Tables, ShortcutList,
+ UnreadHidden, SysTabHidden, SortKey, Children).
+
+
+
+start_tv_nodewin(CurrNode) ->
+ NodewinPid = tv_nodewin:start(CurrNode, get(error_msg_mode)),
+ [{NodewinPid, tv_nodewin, CurrNode}].
+
+
+
+
+
+get_ets_tables(SysTabHidden) ->
+ Tables = ets:all(),
+ get_ets_table_info(Tables,
+ hidden_tables(ets, SysTabHidden) ++
+ current_mnesia_tables(SysTabHidden),
+ owners_to_hide(ets, SysTabHidden),
+ []).
+
+
+
+get_mnesia_tables(SysTabHidden) ->
+ Tables = mnesia:system_info(tables),
+ get_mnesia_table_info(Tables -- hidden_tables(mnesia, SysTabHidden),
+ owners_to_hide(mnesia, SysTabHidden),
+ []).
+
+
+
+
+
+owners_to_hide(ets, true) ->
+ ?SYSTEM_OWNERS;
+owners_to_hide(ets, false) ->
+ [];
+owners_to_hide(mnesia, true) ->
+ [];
+owners_to_hide(mnesia, false) ->
+ [].
+
+
+
+
+get_mnesia_table_info([], _OwnersToHide, Acc) ->
+ lists:keysort(?NAME_ELEM, Acc);
+get_mnesia_table_info([TabId | Tail], OwnersToHide, Acc) ->
+ case catch get_mnesia_owner_size(TabId) of
+ {'EXIT', _Reason} ->
+ %% Ignore tables ceasing to exist.
+ %% Nodedown errors caught above!
+ get_mnesia_table_info(Tail, OwnersToHide, Acc);
+ {OwnerPid, OwnerName, Size} ->
+ case lists:member(OwnerName, OwnersToHide) of
+ true ->
+ get_mnesia_table_info(Tail, OwnersToHide, Acc);
+ false ->
+ Readable = not(lists:member(TabId, ?UNREADABLE_MNESIA_TABLES)),
+ get_mnesia_table_info(Tail,
+ OwnersToHide,
+ [{TabId, {notext}, {notext}, Readable,
+ OwnerPid, OwnerName, Size} | Acc])
+ end
+ end.
+
+
+
+
+get_mnesia_owner_size(TabId) ->
+ {OwnerPid, OwnerName} =
+ case catch mnesia:table_info(TabId, owner) of
+ Pid when is_pid(Pid) ->
+ case lists:keysearch(registered_name, 1, process_info(Pid)) of
+ false ->
+ {Pid, {notext}};
+ {value, {registered_name, ProcName}} ->
+ {Pid, ProcName}
+ end;
+ _Other ->
+ {{notext}, {notext}}
+ end,
+ Size = mnesia:table_info(TabId, size),
+ {OwnerPid, OwnerName, Size}.
+
+
+
+
+
+
+
+hidden_tables(_Any, true) ->
+ ?SYSTEM_TABLES ++ ?MNESIA_TABLES;
+hidden_tables(ets, _SysTabHidden) ->
+ ?MNESIA_TABLES;
+hidden_tables(mnesia, _SysTabHidden) ->
+ [].
+
+
+
+
+get_tables(Node, KindOfTable, UnreadHidden, SysTabHidden,SortKey) ->
+ LocalNode = (Node =:= node()),
+ Tables =
+ case catch get_table_list(Node,LocalNode,KindOfTable,SysTabHidden) of
+ Result when is_list(Result) ->
+ case UnreadHidden of
+ true ->
+ lists:filter(fun(H) ->
+ element(?READABLE_ELEM, H)
+ end,
+ Result);
+ _Other ->
+ Result
+ end;
+ Error ->
+ analyze_error(Error, Node, undefined),
+ []
+ end,
+ case SortKey of
+ ?PROCNAME_ELEM ->
+ lists:keysort(SortKey,
+ lists:keysort(?PID_ELEM, Tables));
+ _OtherCol ->
+ lists:keysort(SortKey,
+ lists:keysort(?NAME_ELEM, Tables))
+ end.
+
+
+
+
+
+get_ets_table_info([], _TablesToHide, _OwnersToHide, Acc) ->
+ lists:keysort(?ID_ELEM, Acc);
+get_ets_table_info([TabId | Tail], TablesToHide, OwnersToHide, Acc) ->
+ case catch get_ets_name_owner_protection(TabId) of
+ {'EXIT', _Reason} ->
+ %% Ignore tables ceasing to exist.
+ %% Nodedown errors caught above!
+ get_ets_table_info(Tail, TablesToHide, OwnersToHide, Acc);
+ {Name, NamedTable, Id, Readable, OwnerPid, OwnerName, Size} ->
+ case lists:member(Name, TablesToHide) of
+ true ->
+ get_ets_table_info(Tail, TablesToHide, OwnersToHide, Acc);
+ false ->
+ case lists:member(OwnerName, OwnersToHide) of
+ true ->
+ get_ets_table_info(Tail, TablesToHide, OwnersToHide, Acc);
+ false ->
+ get_ets_table_info(Tail, TablesToHide, OwnersToHide,
+ [{Name,NamedTable,Id,Readable,
+ OwnerPid,OwnerName,Size} | Acc])
+ end
+ end
+ end.
+
+
+
+get_ets_name_owner_protection(TabId) ->
+ Name = ets:info(TabId, name),
+ OwnerPid = ets:info(TabId, owner),
+ Readable = case ets:info(TabId, protection) of
+ private ->
+ false;
+ _Other ->
+ true
+ end,
+ Size = ets:info(TabId, size),
+ {NamedTable,Id} = case ets:info(TabId, named_table) of
+ true ->
+ {true,{notext}};
+ false ->
+ {false, TabId}
+ end,
+ PName = case lists:keysearch(registered_name, 1, process_info(OwnerPid)) of
+ false ->
+ {notext};
+ {value, {registered_name, ProcName}} ->
+ ProcName
+ end,
+ {Name, NamedTable, Id, Readable, OwnerPid, PName, Size}.
+
+
+
+
+
+
+current_mnesia_tables(SysTabHidden) ->
+ case catch get_table_list(node(), true, mnesia, SysTabHidden) of
+ Result when is_list(Result) ->
+ lists:map(fun(H) ->
+ element(?NAME_ELEM, H)
+ end,
+ Result);
+ nodedown ->
+ handle_error(nodedown, node(), undefined),
+ [];
+ _Other ->
+ []
+ end.
+
+
+
+
+get_table_list(_Node, true, ets, SysTabHidden) ->
+ get_ets_tables(SysTabHidden);
+get_table_list(Node, false, ets, SysTabHidden) ->
+ case rpc:block_call(Node, ?MODULE, get_ets_tables, [SysTabHidden]) of
+ {badrpc, Reason} ->
+ throw({badrpc,Reason});
+ Result ->
+ Result
+ end;
+get_table_list(_Node, true, mnesia, SysTabHidden) ->
+ get_mnesia_tables(SysTabHidden);
+get_table_list(Node, false, mnesia, SysTabHidden) ->
+ case rpc:block_call(Node, ?MODULE, get_mnesia_tables, [SysTabHidden]) of
+ {badrpc,Reason} ->
+ throw({badrpc,Reason});
+ Result ->
+ Result
+ end.
+
+
+
+
+analyze_error(Cause, Node, Table) ->
+ case Cause of
+ {badrpc, {'EXIT', {badarg,_Reason}}} ->
+ done; %% Table has ceased to exist.
+ {'EXIT', {badarg, {ets,local_info,_Args}}} ->
+ done;
+
+ {badrpc, nodedown} ->
+ handle_error(nodedown, Node, Table);
+ {'EXIT', nodedown} ->
+ handle_error(nodedown, Node, Table);
+
+ {'EXIT', {aborted, {node_not_running,_ErrNode}}} ->
+ handle_error(mnesia_not_started, Node, Table);
+ {'EXIT', {'EXIT', {aborted, {node_not_running,_ErrNode}}}} ->
+ handle_error(mnesia_not_started, Node, Table);
+ {badrpc, {'EXIT', {aborted, {node_not_running,_ErrNode}}}} ->
+ handle_error(mnesia_not_started, Node, Table);
+ {'EXIT', {undef, {mnesia,_Fcn,_Args}}} ->
+ handle_error(mnesia_not_started, Node, Table);
+
+ {'EXIT', Reason} ->
+ handle_error({unexpected_error,Reason}, Node, Table);
+ Error when is_tuple(Error) ->
+ handle_error({unexpected_error,Error}, Node, Table)
+ end.
+
+
+
+handle_error(mnesia_not_started, _Node, _Table) ->
+ gs:config(win, [beep]),
+ case get(error_msg_mode) of
+ normal ->
+ tv_utils:notify(win, "TV Notification", ["Mnesia not started!"]);
+ haiku ->
+ tv_utils:notify(win, "TV Notification", ["Mnesia is stopped.",
+ "We wish to reach all data",
+ "But we never will."])
+ end;
+handle_error(nodedown, _Node, _Table) ->
+ gs:config(win, [beep]),
+ case get(error_msg_mode) of
+ normal ->
+ tv_utils:notify(win, "TV Notification", ["The selected node is down!"]);
+ haiku ->
+ Msg = ["With searching comes loss",
+ "And the presence of absence:",
+ "Node is down."],
+ tv_utils:notify(win, "TV Notification", Msg)
+ end,
+ self() ! nodedown;
+handle_error({unexpected_error,Cause}, _Node, _Table) ->
+ io:format("Unexpected error: ~p~n", [Cause]),
+ gs:config(win, [beep]).
+
+
+
+
+loop(KindOfTable,CurrNode,MarkedCell,GridLines,
+ WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) ->
+ receive
+
+ {gs, Gridline, click, {grid,Readable}, [Col,Row,Text | _]} when Text =/= "" ->
+ unmark_cell(MarkedCell, Tables),
+ NewMarkedCell = mark_cell({Gridline, Col, Row}, MarkedCell, Readable),
+ loop(KindOfTable,CurrNode,NewMarkedCell,GridLines,WinSize,Tables,Shortcuts,
+ UnreadHidden,SysTabHidden,SortKey,Children);
+
+
+ {gs, _Gridline, click, {grid,_Readable}, [_Col,_Row,"" | _]} ->
+ NewMarkedCell = unmark_cell(MarkedCell, Tables),
+ loop(KindOfTable,CurrNode,NewMarkedCell,GridLines,WinSize,Tables,Shortcuts,
+ UnreadHidden,SysTabHidden,SortKey,Children);
+
+
+ {gs, Gridline, doubleclick, {grid,Data}, [?NAME_COL,Row,Text | _]} when Text =/= "" ->
+ unmark_cell(MarkedCell, Tables),
+ NewMarkedCell = mark_cell({Gridline, ?NAME_COL, Row}, undefined, Data),
+ {Table, Name, Readable} = get_table_id(KindOfTable, Row, Tables),
+ case start_tv_browser(Table,CurrNode,Name,KindOfTable,Readable,Children) of
+ Children ->
+ {FinalMarkedCell, NewTables, NewGridLines} =
+ refresh_window(NewMarkedCell,Tables,KindOfTable,CurrNode,GridLines,
+ UnreadHidden,SysTabHidden,SortKey, Children),
+ loop(KindOfTable,CurrNode,FinalMarkedCell,NewGridLines,WinSize,NewTables,
+ Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children);
+ NewChildren ->
+ loop(KindOfTable,CurrNode,NewMarkedCell,GridLines,WinSize,Tables,Shortcuts,
+ UnreadHidden,SysTabHidden,SortKey,NewChildren)
+ end;
+
+
+ {gs, Gridline, doubleclick, {grid,Data}, [?ID_COL,Row,Text | _]} when Text =/= "" ->
+ unmark_cell(MarkedCell, Tables),
+ NewMarkedCell = mark_cell({Gridline, ?ID_COL, Row}, undefined, Data),
+ {Table, Name, Readable} = get_table_id(KindOfTable, Row, Tables),
+ case start_tv_browser(Table,CurrNode,Name,KindOfTable,Readable,Children) of
+ Children ->
+ {FinalMarkedCell, NewTables, NewGridLines} =
+ refresh_window(NewMarkedCell,Tables,KindOfTable,CurrNode,GridLines,
+ UnreadHidden,SysTabHidden,SortKey, Children),
+ loop(KindOfTable,CurrNode,FinalMarkedCell,NewGridLines,WinSize,NewTables,
+ Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children);
+ NewChildren ->
+ loop(KindOfTable,CurrNode,NewMarkedCell,GridLines,WinSize,Tables,Shortcuts,
+ UnreadHidden,SysTabHidden,SortKey,NewChildren)
+ end;
+
+
+ {gs, Gridline, doubleclick, {grid,Data}, [?INFO_COL,Row,Text | _]} when Text =/= "" ->
+ unmark_cell(MarkedCell, Tables),
+ NewMarkedCell = mark_cell({Gridline, ?INFO_COL, Row}, undefined, Data),
+ {Table, _Name, _Readable} = get_table_id(KindOfTable, Row, Tables),
+ case start_tv_info(Table, CurrNode, CurrNode =:= node(), KindOfTable, Children) of
+ Children ->
+ {FinalMarkedCell, NewTables, NewGridLines} =
+ refresh_window(NewMarkedCell,Tables,KindOfTable,CurrNode,GridLines,
+ UnreadHidden,SysTabHidden,SortKey, Children),
+ loop(KindOfTable,CurrNode,FinalMarkedCell,NewGridLines,WinSize,NewTables,
+ Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children);
+ NewChildren ->
+ loop(KindOfTable,CurrNode,NewMarkedCell,GridLines,WinSize,Tables,Shortcuts,
+ UnreadHidden,SysTabHidden,SortKey,NewChildren)
+ end;
+
+
+ {gs, Gridline, doubleclick, {grid,Data}, [?PID_COL,Row,Text | _]} when Text =/= "" ->
+ unmark_cell(MarkedCell, Tables),
+ NewMarkedCell = mark_cell({Gridline, ?PID_COL, Row}, undefined, Data),
+ OwnerPid = element(?PID_ELEM, lists:nth(Row, Tables)),
+ NewChildren = start_pman(OwnerPid, Children),
+ loop(KindOfTable,CurrNode,NewMarkedCell,GridLines,WinSize,Tables,Shortcuts,
+ UnreadHidden,SysTabHidden,SortKey, NewChildren);
+
+
+ {gs, Gridline, doubleclick, {grid,Data}, [?PROCNAME_COL,Row,Text | _]} when Text =/= "" ->
+ unmark_cell(MarkedCell, Tables),
+ NewMarkedCell = mark_cell({Gridline, ?PROCNAME_COL, Row}, undefined, Data),
+ OwnerPid = element(?PID_ELEM, lists:nth(Row, Tables)),
+ NewChildren = start_pman(OwnerPid, Children),
+ loop(KindOfTable,CurrNode,NewMarkedCell,GridLines,WinSize,Tables,Shortcuts,
+ UnreadHidden,SysTabHidden,SortKey, NewChildren);
+
+
+%% {gs, win, configure, _Data, [Width, Height | _]} when {Width,Height} /= WinSize ->
+ Msg0 = {gs, win, configure, _Data, [Width0, Height0 | _]}
+ when {Width0,Height0} =/= WinSize ->
+ {gs, win, configure, _, [Width,Height|_]} = flush_msgs(Msg0),
+
+ NewSize = resize_window(Width, Height, length(Tables)),
+ loop(KindOfTable,CurrNode,MarkedCell,GridLines,NewSize,Tables,Shortcuts,
+ UnreadHidden,SysTabHidden,SortKey,Children);
+
+
+ {gs, _Id, click, update, _Args} ->
+ gs:config(win, [{cursor,busy}]),
+ NewMarkedCell = unmark_cell(MarkedCell, Tables),
+ {NewTables, NewGridLines} =
+ update_grid(KindOfTable,CurrNode,GridLines,UnreadHidden,SysTabHidden,SortKey),
+ update_tv_info(Children),
+ gs:config(win, [{cursor,arrow}]),
+ loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts,
+ UnreadHidden,SysTabHidden,SortKey,Children);
+
+
+ {gs, _Id, click, open_table, _Args} ->
+ {Table, Name, Readable} = get_table_id(KindOfTable, element(3, MarkedCell),
+ Tables),
+ case start_tv_browser(Table,CurrNode,Name,KindOfTable,Readable,Children) of
+ Children ->
+ {NewMarkedCell, NewTables, NewGridLines} =
+ refresh_window(MarkedCell,Tables,KindOfTable,CurrNode,GridLines,
+ UnreadHidden,SysTabHidden,SortKey, Children),
+ loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,
+ Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children);
+ NewChildren ->
+ loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts,
+ UnreadHidden,SysTabHidden,SortKey,NewChildren)
+ end;
+
+
+ {gs, _Id, click, new_table, _Args} ->
+ NewChildren = start_tv_new_table(CurrNode, Children),
+ loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts,
+ UnreadHidden,SysTabHidden,SortKey,NewChildren);
+
+
+ {gs, _Id, click, select_node, _Args} ->
+ show_tv_nodewin(Children),
+ loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts,
+ UnreadHidden,SysTabHidden,SortKey,Children);
+
+
+ {gs, _Id, click, show_mnesia, _Args} when KindOfTable =:= ets ->
+ gs:config(win, [{cursor,busy}]),
+ NewMarkedCell = unmark_cell(MarkedCell, Tables),
+ gs:config(label2, [{fg, ?DISABLED_COLOR}]),
+ gs:config(sort_table_id, [{enable, false}]),
+ NewSortKey =
+ case SortKey of
+ ?ID_ELEM ->
+ gs:config(sort_table_name, [{select,true}]),
+ ?NAME_ELEM;
+ _Other ->
+ SortKey
+ end,
+ {NewTables, NewGridLines} =
+ update_grid(mnesia, CurrNode, GridLines, UnreadHidden, SysTabHidden, NewSortKey),
+ gs:config(win, [{cursor,arrow}]),
+ loop(mnesia,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts,
+ UnreadHidden,SysTabHidden,NewSortKey,Children);
+
+
+ {gs, _Id, click, show_ets, _Args} when KindOfTable =:= mnesia ->
+ gs:config(win, [{cursor,busy}]),
+ NewMarkedCell = unmark_cell(MarkedCell, Tables),
+ gs:config(label2, [{fg, ?NORMAL_FG_COLOR}]),
+ gs:config(label3, [{fg, ?NORMAL_FG_COLOR}]),
+ gs:config(label4, [{fg, ?NORMAL_FG_COLOR}]),
+ {NewTables, NewGridLines} =
+ update_grid(ets, CurrNode, GridLines, UnreadHidden, SysTabHidden,SortKey),
+ %% gs:config(show_unreadable, [{enable, true},
+ %% {select, not(UnreadHidden)}]),
+ gs:config(sort_table_id, [{enable, true}]),
+ gs:config(win, [{cursor,arrow}]),
+ loop(ets,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts,
+ UnreadHidden,SysTabHidden,SortKey,Children);
+
+
+ {gs, _Id, click, show_system, _Args} when SysTabHidden ->
+ gs:config(win, [{cursor,busy}]),
+ NewMarkedCell = unmark_cell(MarkedCell, Tables),
+ {NewTables, NewGridLines}
+ = update_grid(KindOfTable, CurrNode, GridLines, UnreadHidden, false, SortKey),
+ gs:config(show_system, [{data, hide_system}]),
+ gs:config(win, [{cursor,arrow}]),
+ loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts,
+ UnreadHidden,false,SortKey,Children);
+
+
+ {gs, _Id, click, hide_system, _Args} when not SysTabHidden ->
+ gs:config(win, [{cursor,busy}]),
+ NewMarkedCell = unmark_cell(MarkedCell, Tables),
+ {NewTables, NewGridLines} =
+ update_grid(KindOfTable, CurrNode, GridLines, UnreadHidden, true, SortKey),
+ gs:config(show_system, [{label, {text, " System Tables "}},
+ {data, show_system}]),
+ gs:config(win, [{cursor,arrow}]),
+ loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts,
+ UnreadHidden,true,SortKey,Children);
+
+
+ {gs, _Id, click, show_unreadable, _Args} when UnreadHidden ->
+ gs:config(win, [{cursor,busy}]),
+ NewMarkedCell = unmark_cell(MarkedCell, Tables),
+ {NewTables, NewGridLines}
+ = update_grid(KindOfTable, CurrNode, GridLines, false, SysTabHidden, SortKey),
+ gs:config(show_unreadable, [{data, hide_unreadable}]),
+ gs:config(win, [{cursor,arrow}]),
+ loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts,
+ false,SysTabHidden,SortKey,Children);
+
+
+ {gs, _Id, click, hide_unreadable, _Args} when not UnreadHidden ->
+ gs:config(win, [{cursor,busy}]),
+ NewMarkedCell = unmark_cell(MarkedCell, Tables),
+ {NewTables, NewGridLines} =
+ update_grid(KindOfTable, CurrNode, GridLines, true, SysTabHidden, SortKey),
+ gs:config(show_unreadable, [{label, {text, " Unreadable Tables "}},
+ {data, show_unreadable}]),
+ gs:config(win, [{cursor,arrow}]),
+ loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts,
+ true,SysTabHidden,SortKey,Children);
+
+
+ {gs, _Id, click, show_info, _Args} ->
+ {Table, _Name, _Readable} = get_table_id(KindOfTable, element(3,MarkedCell),
+ Tables),
+ case start_tv_info(Table, CurrNode, CurrNode =:= node(), KindOfTable, Children) of
+ Children ->
+ {NewMarkedCell, NewTables, NewGridLines} =
+ refresh_window(MarkedCell,Tables,KindOfTable,CurrNode,GridLines,
+ UnreadHidden,SysTabHidden,SortKey, Children),
+ loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,
+ Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children);
+ NewChildren ->
+ loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts,
+ UnreadHidden,SysTabHidden,SortKey,NewChildren)
+ end;
+
+
+ {gs, _Id, click, sort_table_name, _Args} when SortKey =/= ?NAME_ELEM ->
+ gs:config(win, [{cursor,busy}]),
+ NewMarkedCell = unmark_cell(MarkedCell, Tables),
+ {NewTables, NewGridLines} =
+ update_grid(KindOfTable,CurrNode,GridLines,UnreadHidden,SysTabHidden,?NAME_ELEM),
+ gs:config(win, [{cursor,arrow}]),
+ loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts,
+ UnreadHidden,SysTabHidden,?NAME_ELEM,Children);
+
+
+ {gs, _Id, click, sort_table_id, _Args} when SortKey =/= ?ID_ELEM ->
+ gs:config(win, [{cursor,busy}]),
+ NewMarkedCell = unmark_cell(MarkedCell, Tables),
+ {NewTables, NewGridLines} =
+ update_grid(KindOfTable,CurrNode,GridLines,UnreadHidden,SysTabHidden,?ID_ELEM),
+ gs:config(win, [{cursor,arrow}]),
+ loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts,
+ UnreadHidden,SysTabHidden,?ID_ELEM,Children);
+
+
+ {gs, _Id, click, sort_owner_name, _Args} when SortKey =/= ?PROCNAME_ELEM ->
+ gs:config(win, [{cursor,busy}]),
+ NewMarkedCell = unmark_cell(MarkedCell, Tables),
+ {NewTables, NewGridLines} =
+ update_grid(KindOfTable,CurrNode,GridLines,UnreadHidden,SysTabHidden,
+ ?PROCNAME_ELEM),
+ gs:config(win, [{cursor,arrow}]),
+ loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts,
+ UnreadHidden,SysTabHidden,?PROCNAME_ELEM,Children);
+
+
+ {gs, _Id, click, sort_owner_pid, _Args} when SortKey =/= ?PID_ELEM ->
+ gs:config(win, [{cursor,busy}]),
+ NewMarkedCell = unmark_cell(MarkedCell, Tables),
+ {NewTables, NewGridLines} =
+ update_grid(KindOfTable,CurrNode,GridLines,UnreadHidden,SysTabHidden,?PID_ELEM),
+ gs:config(win, [{cursor,arrow}]),
+ loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts,
+ UnreadHidden,SysTabHidden,?PID_ELEM,Children);
+
+
+ {gs, _Id, click, trace_process, _Args} ->
+ OwnerPid = element(?PID_ELEM, lists:nth(element(3,MarkedCell), Tables)),
+ NewChildren = start_pman(OwnerPid, Children),
+ loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts,
+ UnreadHidden,SysTabHidden,SortKey,NewChildren);
+
+
+ {gs, _Id, click, help_button, _Args} ->
+ HelpFile = filename:join([code:lib_dir(tv), "doc", "html", "index.html"]),
+ tool_utils:open_help(win, HelpFile),
+ loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts,
+ UnreadHidden,SysTabHidden,SortKey,Children);
+
+
+ {gs, _Id, click, otp_help_button, _Args} ->
+ IndexFile = filename:join([code:root_dir(), "doc", "index.html"]),
+ tool_utils:open_help(win, IndexFile),
+ loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts,
+ UnreadHidden,SysTabHidden,SortKey,Children);
+
+
+ {gs, win, configure, _Data, _Args} ->
+ loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts,
+ UnreadHidden,SysTabHidden,SortKey,Children);
+
+
+ {gs, _Id, click, exit_button, _Args} ->
+ lists:foreach(
+ fun({Pid,pman,_OP}) ->
+ exit(Pid,kill);
+ (_) ->
+ done
+ end,
+ Children),
+ exit(normal);
+
+
+ {gs, _Id, click, show_haiku, _Args} ->
+ gs:config(win, [{cursor,busy}]),
+ gs:config(show_haiku, [{data, hide_haiku}]),
+ lists:foreach(
+ fun({Pid,tv_info,_Data}) ->
+ Pid ! {error_msg_mode,haiku};
+ ({Pid,tv_browser,_Data}) ->
+ Pid ! {error_msg_mode,haiku};
+ ({Pid,tv_nodewin,_Data}) ->
+ Pid ! {error_msg_mode,haiku};
+ ({Pid,tv_new_table,_Data}) ->
+ Pid ! {error_msg_mode,haiku};
+ (_Other) ->
+ done
+ end,
+ Children),
+ put(error_msg_mode, haiku),
+ gs:config(win, [{cursor,arrow}]),
+ loop(KindOfTable, CurrNode, MarkedCell, GridLines, WinSize, Tables, Shortcuts,
+ UnreadHidden,SysTabHidden,SortKey,Children);
+
+
+ {gs, _Id, click, hide_haiku, _Args} ->
+ gs:config(win, [{cursor,busy}]),
+ gs:config(show_haiku, [{data, show_haiku}]),
+ lists:foreach(
+ fun({Pid,tv_info,_Data}) ->
+ Pid ! {error_msg_mode,normal};
+ ({Pid,tv_browser,_Data}) ->
+ Pid ! {error_msg_mode,normal};
+ ({Pid,tv_nodewin,_Data}) ->
+ Pid ! {error_msg_mode,normal};
+ ({Pid,tv_new_table,_Data}) ->
+ Pid ! {error_msg_mode,normal};
+ (_Other) ->
+ done
+ end,
+ Children),
+ put(error_msg_mode, normal),
+ gs:config(win, [{cursor,arrow}]),
+ loop(KindOfTable, CurrNode, MarkedCell, GridLines, WinSize, Tables, Shortcuts,
+ UnreadHidden,SysTabHidden,SortKey,Children);
+
+
+ {gs, win, destroy, _Data, _Args} ->
+ lists:foreach(
+ fun({Pid,pman,_OP}) ->
+ exit(Pid,kill);
+ (_) ->
+ done
+ end,
+ Children),
+ exit(normal);
+
+
+ {gs, win, keypress, _Data, [Key, _, _, 1 | _]} ->
+ case lists:keysearch(Key, 1, Shortcuts) of
+ {value, {Key, Value}} ->
+ handle_keypress(Value,KindOfTable,CurrNode,MarkedCell,
+ GridLines,WinSize,Tables, Shortcuts,
+ UnreadHidden,SysTabHidden,SortKey,Children);
+ false ->
+ loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts,
+ UnreadHidden,SysTabHidden,SortKey,Children)
+ end;
+
+
+ {gs, win, keypress, _Data, _Args} ->
+ loop(KindOfTable, CurrNode, MarkedCell, GridLines, WinSize, Tables, Shortcuts,
+ UnreadHidden,SysTabHidden,SortKey,Children);
+
+
+ {tv_new_node, _Sender, NewCurrNode} ->
+ gs:config(win, [{cursor,busy}]),
+ NewMarkedCell = unmark_cell(MarkedCell, Tables),
+ {NewTables, NewGridLines} =
+ update_grid(KindOfTable,NewCurrNode,GridLines,UnreadHidden,SysTabHidden,SortKey),
+ update_tv_info(Children),
+ update_tv_browser(Children),
+ NewChildren =
+ case replace_node_name(NewCurrNode, CurrNode) of
+ false ->
+ Children;
+ true ->
+ update_node_name(Children)
+ end,
+ gs:config(win, [{cursor,arrow}]),
+ loop(KindOfTable,NewCurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts,
+ UnreadHidden,SysTabHidden,SortKey,NewChildren);
+
+
+ {tv_start_infowin, Table, Node, LocalNode, TableType} ->
+ case start_tv_info(Table, Node, LocalNode, TableType, Children) of
+ Children ->
+ {NewMarkedCell, NewTables, NewGridLines} =
+ refresh_window(MarkedCell,Tables,KindOfTable,CurrNode,GridLines,
+ UnreadHidden,SysTabHidden,SortKey, Children),
+ loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,
+ Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children);
+ NewChildren ->
+ loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts,
+ UnreadHidden,SysTabHidden,SortKey,NewChildren)
+ end;
+
+
+ {tv_update_infowin, Table, Node, _Type} ->
+ case get_tv_info_pid(Table, Node, Children) of
+ undefined ->
+ done;
+ Pid ->
+ Pid ! #info_update_table_info{sender=self()}
+ end,
+ loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,
+ Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children);
+
+
+ {tv_new_table, NewTabWinPid, Node, Name, Options, KindOfTableToCreate, _Readable, false} ->
+ case create_table(KindOfTableToCreate, Node, Node =:= node(), Name, Options,
+ NewTabWinPid) of
+ error ->
+ loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,
+ Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children);
+ _TabId ->
+ case KindOfTable of
+ mnesia ->
+ done;
+ ets ->
+ self() ! {gs, tv_main, click, update, []}
+ end,
+ loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,
+ Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children)
+ end;
+
+
+
+ {tv_new_table, NewTabWinPid, Node, Name, Options, KindOfTableToCreate, Readable, true} ->
+ case create_table(KindOfTableToCreate, Node, Node =:= node(), Name, Options,
+ NewTabWinPid) of
+ error ->
+ loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,
+ Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children);
+ TabId ->
+ case start_tv_browser(TabId,Node,Name,KindOfTableToCreate,Readable,Children) of
+ Children ->
+ {FinalMarkedCell, NewTables, NewGridLines} =
+ case KindOfTable of
+ mnesia ->
+ {MarkedCell, Tables, GridLines};
+ ets ->
+ refresh_window(MarkedCell,Tables,KindOfTable,
+ CurrNode,GridLines,UnreadHidden,
+ SysTabHidden,SortKey, Children)
+ end,
+ loop(KindOfTable,CurrNode,FinalMarkedCell,NewGridLines,WinSize,
+ NewTables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children);
+ NewChildren ->
+ case KindOfTable of
+ mnesia ->
+ done;
+ ets ->
+ self() ! {gs, tv_main, click, update, []}
+ end,
+ loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,
+ Shortcuts,UnreadHidden,SysTabHidden,SortKey,NewChildren)
+ end
+ end;
+
+
+
+ {'EXIT', Pid, _Reason} ->
+ case lists:keysearch(Pid, 1, Children) of
+ false ->
+ loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,
+ Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children);
+ {value, {Pid,Prog,_Data}} ->
+ NewChildren =
+ case Prog of
+ tv_nodewin ->
+ lists:keydelete(Pid, 1, Children) ++ start_tv_nodewin(CurrNode);
+ _Other ->
+ lists:keydelete(Pid, 1, Children)
+ end,
+ loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,
+ Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,NewChildren)
+ end;
+
+
+ _Other ->
+ loop(KindOfTable, CurrNode, MarkedCell, GridLines, WinSize, Tables, Shortcuts,
+ UnreadHidden,SysTabHidden,SortKey,Children)
+ end.
+
+
+flush_msgs(Msg0 = {gs, Win, Op, _, _}) ->
+ receive Msg = {gs, Win,Op,_,_} ->
+ flush_msgs(Msg)
+ after 100 ->
+ Msg0
+ end.
+
+handle_keypress(open_table,KindOfTable,CurrNode,MarkedCell,GridLines,
+ WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) ->
+ NewChildren =
+ case MarkedCell of
+ {undefined,_,_} ->
+ case get(error_msg_mode) of
+ normal ->
+ gs:config(win, [beep]),
+ tv_utils:notify(win, "TV Notification", "No table selected!");
+ haiku ->
+ Msg = ["Rather than a beep",
+ "Or a rude error message",
+ "These words: make a choice."],
+ tv_utils:notify(win, "TV Notification", Msg)
+ end,
+ Children;
+ _OtherCell ->
+ {Table, Name, Readable} = get_table_id(KindOfTable, element(3, MarkedCell),
+ Tables),
+ start_tv_browser(Table, CurrNode, Name, KindOfTable, Readable, Children)
+ end,
+ case NewChildren of
+ Children ->
+ {NewMarkedCell, NewTables, NewGridLines} =
+ refresh_window(MarkedCell,Tables,KindOfTable,CurrNode,GridLines,UnreadHidden,
+ SysTabHidden, SortKey, Children),
+ loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,
+ Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children);
+ _Other ->
+ loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts,
+ UnreadHidden,SysTabHidden,SortKey,NewChildren)
+ end;
+
+
+handle_keypress(update,KindOfTable,CurrNode,MarkedCell,GridLines,
+ WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) ->
+ gs:config(win, [{cursor,busy}]),
+ NewMarkedCell = unmark_cell(MarkedCell, Tables),
+ {NewTabs, NewGrLines} =
+ update_grid(KindOfTable,CurrNode,GridLines,UnreadHidden,SysTabHidden,SortKey),
+ update_tv_info(Children),
+ gs:config(win, [{cursor,arrow}]),
+ loop(KindOfTable,CurrNode,NewMarkedCell,NewGrLines,WinSize,NewTabs,Shortcuts,
+ UnreadHidden,SysTabHidden,SortKey,Children);
+
+
+handle_keypress(show_mnesia,ets,CurrNode,MarkedCell,GridLines,
+ WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) ->
+ gs:config(win, [{cursor,busy}]),
+ NewMarkedCell = unmark_cell(MarkedCell, Tables),
+ gs:config(label2, [{fg, ?DISABLED_COLOR}]),
+ gs:config(label3, [{fg, ?DISABLED_COLOR}]),
+ gs:config(label4, [{fg, ?DISABLED_COLOR}]),
+ gs:config(show_unreadable, [{label, {text, " Unreadable Tables "}},
+ {data, show_unreadable}]),
+ %% gs:config(show_unreadable, [{enable, false},
+ %% {select, false}]),
+ gs:config(sort_table_id, [{enable, false}]),
+ NewSortKey =
+ case SortKey of
+ ?ID_ELEM ->
+ gs:config(sort_table_name, [{select,true}]),
+ ?NAME_ELEM;
+ _Other ->
+ SortKey
+ end,
+ {NewTables, NewGridLines} =
+ update_grid(mnesia,CurrNode,GridLines,UnreadHidden,SysTabHidden,NewSortKey),
+ gs:config(win, [{cursor,arrow}]),
+ loop(mnesia,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts,
+ UnreadHidden,SysTabHidden,NewSortKey,Children);
+
+
+
+handle_keypress(show_ets,mnesia,CurrNode,MarkedCell,GridLines,
+ WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) ->
+ gs:config(win, [{cursor,busy}]),
+ NewMarkedCell = unmark_cell(MarkedCell, Tables),
+ gs:config(label2, [{fg, ?NORMAL_FG_COLOR}]),
+ gs:config(label3, [{fg, ?NORMAL_FG_COLOR}]),
+ gs:config(label4, [{fg, ?NORMAL_FG_COLOR}]),
+ {NewTables, NewGridLines} =
+ update_grid(ets,CurrNode,GridLines,UnreadHidden,SysTabHidden,SortKey),
+ %% gs:config(show_unreadable, [{enable, true},
+ %% {select, not(UnreadHidden)}]),
+ gs:config(sort_table_id, [{enable, true}]),
+ gs:config(win, [{cursor,arrow}]),
+ loop(ets,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts,
+ UnreadHidden,SysTabHidden,SortKey,Children);
+
+
+handle_keypress(trace_process,KindOfTable,CurrNode,MarkedCell,GridLines,
+ WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) ->
+ NewChildren =
+ case MarkedCell of
+ {_Id, ?PID_COL, Row} ->
+ OwnerPid = element(?PID_ELEM, lists:nth(Row, Tables)),
+ start_pman(OwnerPid, Children);
+ {_Id, ?PROCNAME_COL, Row} ->
+ OwnerPid = element(?PID_ELEM, lists:nth(Row, Tables)),
+ start_pman(OwnerPid, Children);
+ _Other ->
+ Children
+ end,
+ loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts,
+ UnreadHidden,SysTabHidden,SortKey, NewChildren);
+
+
+handle_keypress(select_node,KindOfTable,CurrNode,MarkedCell,GridLines,
+ WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) ->
+ show_tv_nodewin(Children),
+ loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts,
+ UnreadHidden,SysTabHidden,SortKey,Children);
+
+
+handle_keypress(show_info,KindOfTable,CurrNode,MarkedCell,GridLines,
+ WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) ->
+ NewChildren =
+ case MarkedCell of
+ {_Id, ?NAME_COL, Row} ->
+ {Table, _Name, _Readable} = get_table_id(KindOfTable, Row, Tables),
+ start_tv_info(Table, CurrNode, CurrNode =:= node(), KindOfTable, Children);
+ {_Id, ?ID_COL, Row} ->
+ {Table, _Name, _Readable} = get_table_id(KindOfTable, Row, Tables),
+ start_tv_info(Table, CurrNode, CurrNode =:= node(), KindOfTable, Children);
+ {_Id, ?INFO_COL, Row} ->
+ {Table, _Name, _Readable} = get_table_id(KindOfTable, Row, Tables),
+ start_tv_info(Table, CurrNode, CurrNode =:= node(), KindOfTable, Children);
+ _OtherCell ->
+ Children
+ end,
+ case NewChildren of
+ Children ->
+ {NewMarkedCell, NewTables, NewGridLines} =
+ refresh_window(MarkedCell,Tables,KindOfTable,CurrNode,GridLines,UnreadHidden,
+ SysTabHidden, SortKey, Children),
+ loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,
+ Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children);
+ _Other ->
+ loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts,
+ UnreadHidden,SysTabHidden,SortKey,NewChildren)
+ end;
+
+
+handle_keypress(help_button,KindOfTable,CurrNode,MarkedCell,GridLines,
+ WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) ->
+ HelpFile = filename:join([code:lib_dir(tv), "doc", "html", "index.html"]),
+ tool_utils:open_help(win, HelpFile),
+ loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts,
+ UnreadHidden,SysTabHidden,SortKey,Children);
+
+handle_keypress(exit_button,_KindOfTable,_CurrNode,_MarkedCell,_GridLines,
+ _WinSize,_Tables,_Shortcuts,_UnreadHidden,_SysTabHidden,_SortKey,Children) ->
+ lists:foreach(
+ fun({Pid,pman,_OP}) ->
+ exit(Pid,kill);
+ (_) ->
+ done
+ end,
+ Children),
+ exit(normal);
+
+
+handle_keypress(_Any,KindOfTable,CurrNode,MarkedCell,GridLines,
+ WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) ->
+ loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts,
+ UnreadHidden,SysTabHidden,SortKey,Children).
+
+
+
+
+refresh_window(MarkedCell,Tables,KindOfTable,
+ CurrNode,GridLines,UnreadHidden,SysTabHidden, SortKey, Children) ->
+ gs:config(win, [{cursor,busy}]),
+ NewMarkedCell = unmark_cell(MarkedCell, Tables),
+ {NewTables, NewGridLines} =
+ update_grid(KindOfTable,CurrNode,GridLines,UnreadHidden,SysTabHidden,
+ SortKey),
+ update_tv_info(Children),
+ gs:config(win, [{cursor,arrow}]),
+ {NewMarkedCell, NewTables, NewGridLines}.
+
+
+
+
+
+get_table_id(mnesia, Row, Tables) ->
+ TabTuple = lists:nth(Row, Tables),
+ Readable = element(?READABLE_ELEM, TabTuple),
+ Id = element(?NAME_ELEM, TabTuple),
+ {Id, Id, Readable};
+get_table_id(ets, Row, Tables) ->
+ TabTuple = lists:nth(Row, Tables),
+ Readable = element(?READABLE_ELEM, TabTuple),
+ Name = element(?NAME_ELEM, TabTuple),
+ case element(?NAMED_TABLE_ELEM, TabTuple) of
+ false ->
+ {element(?ID_ELEM, TabTuple), Name, Readable};
+ _Other ->
+ {Name, Name, Readable}
+ end.
+
+
+
+replace_node_name('nonode@nohost', 'nonode@nohost') ->
+ %% Still undistributed...
+ false;
+replace_node_name(_Node, _OldNode) when node() =:= 'nonode@nohost' ->
+ %% No longer distributed, but previously was!
+ true;
+replace_node_name(_Node, 'nonode@nohost') ->
+ %% The system has been distributed!
+ true;
+replace_node_name(_Node, _OldNode) ->
+ false.
+
+
+
+update_node_name(Children) when node() =:= 'nonode@nohost' ->
+ %% We have been distributed, but no longer are!
+ %% We change all node names stored to 'nonode@nohost'!
+ %% This works because we *will* receive exit signals
+ %% for those processes that have died on other nodes,
+ %% whereupon these processes will be removed from the
+ %% 'Children' list.
+ lists:map(fun({Pid, Prog, {Table,_Node}}) ->
+ {Pid, Prog, {Table,'nonode@nohost'}};
+ (H) ->
+ H
+ end,
+ Children);
+update_node_name(Children) ->
+ %% We have become distributed!
+ %% Change all occurrences of 'nonode@nohost'
+ %% to the new current node name!
+ HomeNode = node(),
+ lists:map(fun({Pid, Prog, {Table,'nonode@nohost'}}) ->
+ {Pid, Prog, {Table,HomeNode}};
+ (H) ->
+ H
+ end,
+ Children).
+
+
+
+
+show_tv_nodewin(Children) ->
+ {value, {Pid,tv_nodewin,_Node}} = lists:keysearch(tv_nodewin, 2, Children),
+ Pid ! show_window.
+
+
+
+update_tv_info(Children) ->
+ Sender = self(),
+ lists:foreach(fun({Pid,tv_info,{_Table,_Node}}) ->
+ Pid ! #info_update_table_info{sender=Sender};
+ (_) ->
+ done
+ end,
+ Children).
+
+
+
+update_tv_browser(Children) ->
+ lists:foreach(fun({Pid,tv_browser,{_Table,_Node}}) ->
+ Pid ! check_node;
+ (_) ->
+ done
+ end,
+ Children).
+
+
+
+get_tv_info_pid(TabId,Node,Children) ->
+ TvInfoChildren = [X || X <- Children, element(2,X) =:= tv_info],
+ case lists:keysearch({TabId,Node}, 3, TvInfoChildren) of
+ {value, {Pid, tv_info, {_Table,Node}}} ->
+ Pid;
+ _Other ->
+ undefined
+ end.
+
+
+
+start_tv_browser(Tab,Node,_Name,KindOfTable,false,Children) ->
+ gs:config(win, [beep]),
+ case get(error_msg_mode) of
+ normal ->
+ tv_utils:notify(win, "TV Notification",
+ ["The selected table is unreadable!",
+ "Only table information may be viewed!"]);
+ haiku ->
+ Msg = ["Table protected.",
+ "The answers that you're seeking",
+ "will remain unknown."],
+ tv_utils:notify(win, "TV Notification", Msg)
+ end,
+ start_tv_info(Tab, Node, Node =:= node(), KindOfTable, Children);
+start_tv_browser(Table,Node,Name,KindOfTable,_Readable,Children) ->
+ TvBrowserChildren = [X || X <- Children, element(2,X) =:= tv_browser],
+ case lists:keysearch({Table,Node}, 3, TvBrowserChildren) of
+ {value, {BPid,tv_browser,{Table,Node}}} ->
+ BPid ! raise,
+ Children;
+ _Other ->
+ %% Check that table still exists!
+ case table_still_there(KindOfTable, Node, Node =:= node(), Table, Name) of
+ true ->
+ LocalNode = (Node =:= node()),
+ NewBPid = tv:start_browser(Node, LocalNode, Table, KindOfTable, Name,
+ get(error_msg_mode)),
+ [{NewBPid, tv_browser, {Table,Node}} | Children];
+ _TableDead ->
+ gs:config(win, [beep]),
+ case get(error_msg_mode) of
+ normal ->
+ tv_utils:notify(win, "TV Notification",
+ ["The table no longer exists!"]);
+ haiku ->
+ Msg = ["A table that big?",
+ "It might be very useful.",
+ "But now it is gone."],
+ tv_utils:notify(win, "TV Notification", Msg)
+ end,
+ Children
+ end
+ end.
+
+
+
+
+
+table_still_there(ets, Node, LocalNode, Table, Name) ->
+ case catch tv_ets_rpc:all(Node, LocalNode) of
+ Tables when is_list(Tables) ->
+ case lists:member(Table, Tables) of
+ true ->
+ true;
+ false -> %% May be a named table...
+ lists:keymember(Name, 1, Tables)
+ end;
+ Error ->
+ analyze_error(Error, Node, Table),
+ false
+ end;
+table_still_there(mnesia, Node, LocalNode, Table, Name) ->
+ case catch tv_mnesia_rpc:system_info(Node, LocalNode, tables) of
+ Tables when is_list(Tables) ->
+ lists:member(Name, Tables);
+ Error ->
+ analyze_error(Error, Node, Table),
+ false
+ end.
+
+
+
+
+
+
+start_tv_info(Table, Node, LocalNode, KindOfTable, Children) ->
+ TvInfoChildren = [X || X <- Children, element(2,X) =:= tv_info],
+ case lists:keysearch({Table,Node}, 3, TvInfoChildren) of
+ {value, {Pid,tv_info,{Table,Node}}} ->
+ Pid ! #info_raise_window{sender = self()},
+ Children;
+ _Other ->
+ %% May have started a browser but no info window!
+ %% Info window may have been started from that browser, but
+ %% don't bother with checking *that*.
+ Pid = spawn_link(tv_info, info, [self(), Node, LocalNode, Table, KindOfTable,
+ get(error_msg_mode)]),
+ [{Pid, tv_info, {Table,Node}} | Children]
+ end.
+
+
+
+
+
+start_tv_new_table(CurrNode, Children) ->
+ TvNewTableChild = [X || X <- Children, element(2,X) =:= tv_new_table],
+ case TvNewTableChild of
+ [{Pid,tv_new_table,undefined}] ->
+ Pid ! raise,
+ Children;
+ [] ->
+ Pid = tv_new_table:start(CurrNode, get(error_msg_mode)),
+ [{Pid, tv_new_table, undefined} | Children]
+ end.
+
+
+
+
+create_table(mnesia, _Node, _LocalNode, _TabName, _Options, _NewTabWinPid) ->
+ error;
+create_table(ets, Node, LocalNode, TabName, Options, NewTabWinPid) ->
+ case tv_table_owner:create(ets, Node, LocalNode, TabName, Options) of
+ {ok, TabId} ->
+ NewTabWinPid ! ok,
+ TabId;
+ error ->
+ NewTabWinPid ! error,
+ error
+ end.
+
+
+
+
+start_pman(OwnerPid, Children) ->
+ Pid = pman_shell:start(OwnerPid),
+ [{Pid,pman,OwnerPid} | Children].
+
+
+
+
+update_grid(TableType, CurrNode, GridLines, UnreadHidden, SysTabHidden,SortKey) ->
+ NewTables = get_tables(CurrNode, TableType, UnreadHidden, SysTabHidden,SortKey),
+ TabStr = case TableType of
+ mnesia ->
+ "Mnesia ";
+ ets ->
+ "ETS "
+ end,
+ NodeStr = atom_to_list(CurrNode),
+ gs:config(win, [{title, "[TV] " ++ TabStr ++ "tables on " ++ NodeStr}]),
+ gs:config(grid, [{rows, {1, get_nof_rows(length(NewTables), gs:read(grid,height))}}]),
+ NewGridLines = update_gridlines(NewTables, GridLines, 1),
+ {NewTables, NewGridLines}.
+
+
+
+unmark_cell({undefined, AnyCol, AnyRow}, _Tables) ->
+ {undefined, AnyCol, AnyRow};
+unmark_cell({Id, Col, Row}, Tables) ->
+ disable_menus(),
+ TabTuple = lists:nth(Row, Tables),
+ ReadableTable = element(?READABLE_ELEM, TabTuple),
+ NamedTable = element(?NAMED_TABLE_ELEM, TabTuple),
+ BgColor =
+ case ReadableTable of
+ false ->
+ ?UNREADABLE_BG_COLOR;
+ _Other1 ->
+ ?READABLE_BG_COLOR
+ end,
+
+ FgColor =
+ case NamedTable of
+ false when Col =:= ?NAME_COL ->
+ ?UNNAMED_FG_COLOR;
+ _Other2 ->
+ ?NORMAL_FG_COLOR
+ end,
+
+ gs:config(Id, [{bg, {Col, BgColor}},
+ {fg, {Col, FgColor}}]),
+ {undefined, undefined, undefined}.
+
+
+
+
+mark_cell({Id,Col,Row}, {Id,Col,Row}, _Readable) ->
+ {undefined, undefined, undefined};
+mark_cell({Id,Col,Row}, _Any, Readable) ->
+ case lists:member(Col, ?POSSIBLE_MARK_COLS) of
+ true ->
+ enable_menus(Col, Readable),
+ gs:config(Id, [{bg, {Col, ?GRID_MARK_COLOR}},
+ {fg, {Col, ?NORMAL_FG_COLOR}}]),
+ {Id, Col,Row};
+ false ->
+ {undefined, undefined, undefined}
+ end.
+
+
+disable_menus() ->
+ disable_open_menu(),
+ disable_trace_menu(),
+ disable_info_menu().
+
+
+enable_menus(?ID_COL, true) ->
+ enable_open_menu(),
+ enable_info_menu();
+enable_menus(?ID_COL, {notext}) ->
+ enable_open_menu(),
+ enable_info_menu();
+enable_menus(?ID_COL, false) ->
+ enable_info_menu();
+enable_menus(?NAME_COL, true) ->
+ enable_open_menu(),
+ enable_info_menu();
+enable_menus(?NAME_COL, {notext}) ->
+ enable_open_menu(),
+ enable_info_menu();
+enable_menus(?NAME_COL, false) ->
+ enable_info_menu();
+enable_menus(?PID_COL, _Any) ->
+ enable_trace_menu();
+enable_menus(?PROCNAME_COL, _Any) ->
+ enable_trace_menu();
+enable_menus(?INFO_COL, _Any) ->
+ enable_info_menu();
+enable_menus(_Col, _Any) ->
+ done.
+
+
+
+resize_window(Width, Height, NofElems) ->
+ WinWidth = lists:max([Width, ?MIN_WIN_WIDTH]),
+ WinHeight = lists:max([Height, ?MIN_WIN_HEIGHT]),
+ gs:config(win, [{width, WinWidth},
+ {height, WinHeight}
+ ]),
+ {BgWidth, BgHeight, FgWidth, FgHeight} = get_frame_coords(WinWidth, WinHeight),
+ {GridWidth, GridHeight} = get_grid_coords(FgWidth, FgHeight),
+ ColWidths = get_col_widths(?COL_WIDTHS, GridWidth),
+ resize_header_labels(ColWidths,
+ [label1,label2,label3,label4,label5],
+ ?GRID_XPOS),
+ gs:config(bgframe, [{width, BgWidth},
+ {height, BgHeight}
+ ]),
+ gs:config(fgframe, [{width, FgWidth},
+ {height, FgHeight}
+ ]),
+ gs:config(grid, [{width, GridWidth},
+ {height, GridHeight},
+ {columnwidths, ColWidths},
+ {rows, {1, get_nof_rows(NofElems, GridHeight)}}
+ ]),
+ {WinWidth, WinHeight}.
+
+
+
+
+create_window(Tables) ->
+ gs:window(win, gs:start(), [{width, ?WIN_WIDTH},
+ {height, ?WIN_HEIGHT},
+ {bg, ?DEFAULT_BG_COLOR},
+ {title, "[TV] ETS tables on " ++
+ atom_to_list(node())},
+ {destroy, true},
+ {configure, true},
+ {keypress, true}
+ ]),
+
+ ShortcutList = create_menus(),
+
+ disable_menus(),
+
+ {BgFrameWidth, BgFrameHeight, FgFrameWidth, FgFrameHeight} =
+ get_frame_coords(?WIN_WIDTH, ?WIN_HEIGHT),
+
+ {GridWidth, GridHeight} = get_grid_coords(FgFrameWidth, FgFrameHeight),
+
+ ColWidths = get_col_widths(?COL_WIDTHS, GridWidth),
+
+ gs:frame(bgframe, win, [{width, BgFrameWidth},
+ {height, BgFrameHeight},
+ {x, ?GRID_XPOS},
+ {y, ?GRID_YPOS},
+ {bg, {0,0,0}}
+ ]),
+ gs:frame(fgframe, bgframe, [{width, FgFrameWidth},
+ {height, FgFrameHeight},
+ {x, 0},
+ {y, 1},
+ {bg, ?DEFAULT_BG_COLOR}
+ ]),
+
+
+ create_header_labels(ColWidths, ?HEADER_LABELS),
+ gs:grid(grid, fgframe, [{width, GridWidth},
+ {height, GridHeight},
+ {x, 0},
+ {y, -1},
+ {hscroll,bottom},
+ {vscroll,right},
+ {rows, {1, get_nof_rows(length(Tables), GridHeight)}},
+ {columnwidths, ColWidths},
+ {fg, ?NORMAL_FG_COLOR},
+ {bg, {255,255,255}},
+ {font, ?FONT}
+ ]),
+ GridLines = update_gridlines(Tables, [], 1),
+ {{undefined,undefined,undefined}, GridLines, {?WIN_WIDTH,?WIN_HEIGHT}, ShortcutList}.
+
+
+
+
+get_frame_coords(WinWidth, WinHeight) ->
+ BgWidth = WinWidth - 2 * ?GRID_XPOS,
+ BgHeight = WinHeight - ?GRID_YPOS - ?GRID_XPOS,
+ FgWidth = BgWidth,
+ FgHeight = BgHeight - 1,
+ {BgWidth, BgHeight, FgWidth, FgHeight}.
+
+
+
+
+get_grid_coords(ParentWidth, ParentHeight) ->
+ {ParentWidth, ParentHeight + 1}.
+
+
+
+get_col_widths(Cols, GridWidth) ->
+ SbWidth = 25, %% OK, OK, don't bother about it, this constant makes it work... :-/
+ FixColWidthSum = lists:sum(lists:map(fun(H) ->
+ lists:nth(H, Cols)
+ end,
+ ?FIX_WIDTH_COLS)),
+ AvailableWidth = GridWidth - FixColWidthSum - SbWidth,
+ OriginalWidth = ?WIN_WIDTH - 2 * ?GRID_XPOS - FixColWidthSum - SbWidth,
+ get_col_widths(1, Cols, AvailableWidth, OriginalWidth).
+
+
+
+get_col_widths(N, [H | T], AvailWidth, OrigWidth) ->
+ NewColWidth =
+ case lists:member(N, ?FIX_WIDTH_COLS) of
+ true ->
+ H;
+ _Other ->
+ round(H * (AvailWidth / OrigWidth) + 0.1)
+ end,
+ [NewColWidth | get_col_widths(N + 1, T, AvailWidth, OrigWidth)];
+get_col_widths(_N, [], _AvailWidth, _OrigWidth) ->
+ [].
+
+
+
+create_header_labels(ColWidths, Text) ->
+ create_header_labels(ColWidths, Text, 1, ?GRID_XPOS).
+
+
+
+create_header_labels([W | T], [{Name, Text} | TextT], N, Xpos) ->
+ Ypos = ?GRID_YPOS - 20,
+ gs:label(Name, win, [{width, W + 1 - 3},
+ {height, 20},
+ {x, Xpos + 1 + 3},
+ {y, Ypos},
+ {bg, ?DEFAULT_BG_COLOR},
+ {fg, ?NORMAL_FG_COLOR},
+ {font, ?HEADER_FONT},
+ {align, w},
+ {label, {text, Text}}
+ ]),
+ create_header_labels(T, TextT, N + 1, Xpos + 1 + W);
+create_header_labels([], [], _N, _Xpos) ->
+ done.
+
+
+
+resize_header_labels([W | T], [Name | NT], Xpos) ->
+ gs:config(Name, [{width, W + 1 - 3},
+ {x, Xpos + 1 + 3}
+ ]),
+ resize_header_labels(T, NT, Xpos + 1 + W);
+resize_header_labels([], [], _Xpos) ->
+ done.
+
+
+
+disable_open_menu() ->
+ gs:config(open_table, [{enable,false}]).
+
+
+disable_info_menu() ->
+ gs:config(show_info, [{enable,false}]).
+
+disable_trace_menu() ->
+ gs:config(trace_process, [{enable,false}]).
+
+
+enable_open_menu() ->
+ gs:config(open_table, [{enable,true}]).
+
+
+enable_info_menu() ->
+ gs:config(show_info, [{enable,true}]).
+
+
+enable_trace_menu() ->
+ gs:config(trace_process, [{enable,true}]).
+
+
+create_menus() ->
+ gs:menubar(menubar, win, [{bg, ?DEFAULT_BG_COLOR}]),
+
+ HelpButt = gs:menubutton(menubar, [{bg, ?DEFAULT_BG_COLOR},
+ {fg, ?FIREBRICK}, % firebrick
+ {label, {text, " Help "}},
+ {underline, 1},
+ {side, right}
+ ]),
+ FileButt = gs:menubutton(menubar, [{bg, ?DEFAULT_BG_COLOR},
+ {fg, ?FIREBRICK}, % firebrick
+ {label, {text, " File "}},
+ {underline, 1},
+ {side, left}
+ ]),
+ ViewButt = gs:menubutton(menubar, [{bg, ?DEFAULT_BG_COLOR},
+ {fg, ?FIREBRICK}, % firebrick
+ {label, {text, " View "}},
+ {underline, 1},
+ {side, left}
+ ]),
+ OptionsButt = gs:menubutton(menubar, [{bg, ?DEFAULT_BG_COLOR},
+ {fg, ?FIREBRICK}, % firebrick
+ {label, {text, " Options "}},
+ {underline, 1},
+ {side, left}
+ ]),
+
+ HelpMenu = gs:menu(HelpButt, [{bg, ?DEFAULT_BG_COLOR},
+ {fg, ?FIREBRICK},
+ {disabledfg,?DISABLED_COLOR}
+ ]),
+ FileMenu = gs:menu(FileButt, [{bg, ?DEFAULT_BG_COLOR},
+ {fg, ?FIREBRICK},
+ {disabledfg,?DISABLED_COLOR}
+ ]),
+
+ OptionsMenu = gs:menu(OptionsButt, [{bg, ?DEFAULT_BG_COLOR},
+ {fg, ?FIREBRICK},
+ {disabledfg,?DISABLED_COLOR}
+ ]),
+
+ ViewMenu = gs:menu(ViewButt, [{bg, ?DEFAULT_BG_COLOR},
+ {fg, ?FIREBRICK},
+ {disabledfg,?DISABLED_COLOR}
+ ]),
+
+ ShortCutList =
+ create_menulist([{" Help ",normal,help_button,1,h},
+ separator,
+ {" OTP Documentation ",normal,otp_help_button,1,no_char}], HelpMenu) ++
+ create_menulist([{" Open Table ",normal,open_table,1,o},
+ {" New Table... ",normal,new_table,1,no_char},
+ {" Table Info ",normal,show_info,7,i},
+ separator,
+ {" Nodes... ",normal,select_node,1,n},
+ separator,
+ {" Trace Process ",normal,trace_process,1,t},
+ separator,
+ {" Exit ",normal, exit_button,2,x}], FileMenu) ++
+ [{c,exit_button}, {'C',exit_button}] ++
+ create_menulist([{" Refresh ",normal,update,1,r},
+ separator,
+ {" Unreadable Tables ",check,show_unreadable,1,no_char},
+ separator,
+ {" System Tables ",check,show_system,1,no_char},
+ separator,
+ {" Sort by Name ",radio,sort_table_name,9,no_char},
+ {" Sort by Id ",radio,sort_table_id,9,no_char},
+ {" Sort by Owner PID ",radio,sort_owner_pid,15,no_char},
+ {" Sort by Owner Name ",radio,sort_owner_name,9,no_char},
+ separator,
+ {" Error Messages in Haiku ",check,show_haiku,1,no_char}
+ ],
+ OptionsMenu) ++
+ create_menulist([{" ETS Tables ",radio,show_ets,1,e},
+ {" Mnesia Tables ",radio,show_mnesia,1,m}], ViewMenu),
+ gs:config(show_unreadable, [{select,false}]),
+ gs:config(show_system, [{select,false}]),
+ gs:config(show_haiku, [{select,false}]),
+ %% Due to a bug (or some other reason), only one of the radiobuttons belonging
+ %% to a specified group can be selected, even if different processes have created
+ %% the radiobuttons! This means that, if we have started more than one tv_main
+ %% process, selecting one radiobutton will affect the radiobuttons in the other
+ %% tv_main process(es)!!! Since this is a highly undesirable bahaviour, we have to
+ %% create unique group names (i.e., atoms).
+ %% (We need to group the radiobuttons, since otherwise all created by one process
+ %% belongs to the same group, which also is undesirable...)
+ SelfStr = pid_to_list(self()),
+ SortGroup = list_to_atom("sorting" ++ SelfStr),
+ TypeGroup = list_to_atom("table_type" ++ SelfStr),
+ gs:config(sort_table_name, [{group,SortGroup},{select,true}]),
+ gs:config(sort_table_id, [{group,SortGroup}]),
+ gs:config(sort_owner_pid, [{group,SortGroup}]),
+ gs:config(sort_owner_name, [{group,SortGroup}]),
+ gs:config(show_ets, [{group,TypeGroup}, {select,true}]),
+ gs:config(show_mnesia, [{group,TypeGroup}]),
+ ShortCutList.
+
+
+
+
+
+create_menulist(List, Menu) ->
+ MaxLength = get_length_of_longest_menu_text(List, 0),
+ create_menulist(List, Menu, MaxLength).
+
+
+
+
+create_menulist([], _Menu, _MaxLength) ->
+ [];
+create_menulist([{Text, Type, Data, AccCharPos, ShortcutChar} | Rest], Menu, MaxLength) ->
+ ShortcutCapitalChar =
+ if
+ ShortcutChar =:= no_char ->
+ no_char;
+ true ->
+ CharAsciiValue = lists:nth(1, atom_to_list(ShortcutChar)),
+ CapitalCharValue = CharAsciiValue - ($a - $A),
+ list_to_atom([CapitalCharValue])
+ end,
+
+ FinalText = if
+ ShortcutChar =:= no_char ->
+ Text;
+ true ->
+ Text ++ lists:duplicate(MaxLength - length(Text), " ") ++
+ " Ctrl+" ++ atom_to_list(ShortcutCapitalChar) ++ " "
+ end,
+ gs:menuitem(Data, Menu, [{bg, ?DEFAULT_BG_COLOR},
+ {fg, ?FIREBRICK},
+ {itemtype, Type},
+ {label, {text, FinalText}},
+ {underline, AccCharPos},
+ {data, Data}
+ ]),
+ [{ShortcutChar, Data}, {ShortcutCapitalChar, Data} | create_menulist(Rest, Menu, MaxLength)];
+create_menulist([separator | Rest], Menu, MaxLength) ->
+ gs:menuitem(Menu, [{itemtype, separator}]),
+ create_menulist(Rest, Menu, MaxLength).
+
+
+
+
+
+
+
+get_length_of_longest_menu_text([], MaxLength) ->
+ MaxLength;
+get_length_of_longest_menu_text([{Text, _Type, _Data, _APos, _SChar} | Rest], CurrMax) ->
+ L = length(Text),
+ if
+ L > CurrMax ->
+ get_length_of_longest_menu_text(Rest, L);
+ true ->
+ get_length_of_longest_menu_text(Rest, CurrMax)
+ end;
+get_length_of_longest_menu_text([separator | Rest], CurrMax) ->
+ get_length_of_longest_menu_text(Rest, CurrMax).
+
+
+
+
+
+
+get_nof_rows(NofElems, GridHeight) ->
+ lists:max([NofElems, round((GridHeight - 20) / 21) + 1]).
+
+
+
+config_gridline(LineId, TabTuple) ->
+ Readable = element(?READABLE_ELEM, TabTuple),
+ NamedTable = element(?NAMED_TABLE_ELEM, TabTuple),
+ {FgColor, BgColor} =
+ case Readable of
+ true ->
+ {?NORMAL_FG_COLOR, ?READABLE_BG_COLOR};
+ false ->
+ {?UNREADABLE_FG_COLOR, ?UNREADABLE_BG_COLOR};
+ {notext} ->
+ {?NORMAL_FG_COLOR, ?READABLE_BG_COLOR}
+ end,
+
+ NameFgColor =
+ case NamedTable of
+ false ->
+ ?UNNAMED_FG_COLOR;
+ _Other ->
+ ?NORMAL_FG_COLOR
+ end,
+
+ gs:config(LineId, [{bg, BgColor},
+ {fg, FgColor},
+ {fg, {?NAME_COL, NameFgColor}},
+ {click, true},
+ {doubleclick, true},
+ {data, {grid,Readable}} |
+
+ lists:map(
+ fun({Elem,Col}) ->
+ case element(Elem, TabTuple) of
+ {notext} ->
+ {text, {Col, ""}};
+ Other when Elem =:= ?NAME_ELEM ->
+ case NamedTable of
+ false ->
+ {text, {Col, " " ++
+ lists:flatten(
+ io_lib:write(
+ Other)) ++ " "}};
+ _AnyOther ->
+ {text, {Col, " " ++ lists:flatten(
+ io_lib:write(
+ Other))}}
+ end;
+ Other ->
+ {text, {Col, " " ++ lists:flatten(
+ io_lib:write(
+ Other))}}
+ end
+ end,
+ [{?NAME_ELEM, ?NAME_COL},
+ {?ID_ELEM, ?ID_COL},
+ {?PID_ELEM, ?PID_COL},
+ {?PROCNAME_ELEM, ?PROCNAME_COL},
+ {?INFO_ELEM, ?INFO_COL}]
+ )
+ ]).
+
+
+
+
+
+update_gridlines([TabTuple | TT], [LineId | GT], CurrRow) ->
+ config_gridline(LineId, TabTuple),
+ [LineId | update_gridlines(TT, GT, CurrRow + 1)];
+update_gridlines([TabTuple | TT], [], CurrRow) ->
+ LineId = gs:gridline(grid, [{row, CurrRow}]),
+ config_gridline(LineId, TabTuple),
+ [LineId | update_gridlines(TT, [], CurrRow + 1)];
+update_gridlines([], [LineId | GT], _CurrRow) ->
+ gs:destroy(LineId),
+ update_gridlines([], GT, _CurrRow);
+update_gridlines([], [], _CurrRow) ->
+ [].
+
+
+
+
+
+
+
+
+
diff --git a/lib/tv/src/tv_main.hrl b/lib/tv/src/tv_main.hrl
new file mode 100644
index 0000000000..28329ca83c
--- /dev/null
+++ b/lib/tv/src/tv_main.hrl
@@ -0,0 +1,286 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+
+-define(ERROR_MSG_MODE, normal).
+
+-define(WIN_WIDTH, 745). % 779
+-define(WIN_HEIGHT, 380).
+-define(MIN_WIN_WIDTH, 524).
+-define(MIN_WIN_HEIGHT, 150).
+
+-define(FONT, {screen, 12}).
+-define(HEADER_FONT, {screen, [bold,italic], 12}).
+
+-define(GRID_XPOS, 3).
+-define(GRID_YPOS, 68).
+
+
+%% Unreadable tables are indicated by the background color.
+%% Unnamed tables are indicated by the foreground color.
+
+-define(NORMAL_FG_COLOR, {0,0,0}).
+-define(READABLE_BG_COLOR, {255,255,255}).
+-define(UNREADABLE_FG_COLOR, ?NORMAL_FG_COLOR).
+-define(UNREADABLE_BG_COLOR, {240,240,240}).
+%-define(UNREADABLE_BG_COLOR, {255,250,230}).
+%-define(UNREADABLE_BG_COLOR, {242,242,242}).
+-define(UNNAMED_FG_COLOR, {175,175,175}).
+%-define(UNNAMED_FG_COLOR, {140,35,35}).
+
+
+-define(DISABLED_COLOR, {160,160,160}).
+
+-define(NAME_ELEM, 1).
+-define(NAMED_TABLE_ELEM, 2).
+-define(ID_ELEM, 3).
+-define(READABLE_ELEM, 4).
+-define(PID_ELEM, 5).
+-define(PROCNAME_ELEM, 6).
+-define(INFO_ELEM, 7).
+
+-define(NAME_COL, 1).
+-define(ID_COL, 2).
+-define(PID_COL, 3).
+-define(PROCNAME_COL, 4).
+-define(INFO_COL, 5).
+
+-define(POSSIBLE_MARK_COLS, [?NAME_COL, ?ID_COL, ?PID_COL, ?PROCNAME_COL, ?INFO_COL]).
+-define(COL_WIDTHS, [205,131,91,197,90]). % [140,95,125,75,85,140,90]).
+-define(FIX_WIDTH_COLS, [2,3,5]).
+
+
+-define(HEADER_LABELS, [{label1, " Table Name"},
+ % {label2, " Named Table"},
+ {label2, " Table Id"},
+ % {label4, " Readable"},
+ {label3, " Owner Pid"},
+ {label4, " Owner Name"},
+ {label5, " Table Size"}
+ ]).
+
+
+
+%% TABLES_TO_HIDE shall contain both Mnesia and ETS tables that we want to hide. :-)
+
+-define(SYSTEM_TABLES, [ac_tab,
+ asn1,
+ cdv_dump_index_table,
+ cdv_menu_table,
+ cdv_decode_heap_table,
+ cell_id,
+ cell_pos,
+ clist,
+ cover_internal_data_table,
+ cover_collected_remote_data_table,
+ cover_binary_code_table,
+ code,
+ code_names,
+ cookies,
+ corba_policy,
+ corba_policy_associations,
+ dets,
+ dets_owners,
+ dets_registry,
+ disk_log_names,
+ disk_log_pids,
+ eprof,
+ erl_atom_cache,
+ erl_epmd_nodes,
+ etop_accum_tab,
+ etop_tr,
+ ets_coverage_data,
+ file_io_servers,
+ global,
+ global_locks,
+ global_names,
+ global_names_ext,
+ gs_mapping,
+ gs_names,
+ gstk_db,
+ gstk_grid_cellid,
+ gstk_grid_cellpos,
+ gstk_grid_id,
+ gvar,
+ httpd,
+ id,
+ ig,
+ ign_req_index,
+ ign_requests,
+ index,
+ inet_cache,
+ inet_db,
+ inet_hosts,
+ 'InitialReferences',
+ int_db,
+ interpreter_includedirs_macros,
+ ir_WstringDef,
+ lmcounter,
+ locks,
+ mnemosyne_tmp,
+ pg2_table,
+ queue,
+ snmp_agent_table,
+ snmp_local_db2,
+ snmp_mib_data,
+ snmp_note_store,
+ snmp_symbolic_ets,
+ sticky,
+ sys_dist,
+ tid_locks,
+ tkFun,
+ tkLink,
+ tkPriv,
+ ttb,
+ ttb_history_table,
+ udp_fds,
+ udp_pids
+ ]).
+
+
+-define(MNESIA_TABLES, [alarm,
+ alarmTable,
+ evaLogDiscriminatorTable,
+ eva_snmp_map,
+ eventTable,
+ group,
+ imprec,
+ ir_AliasDef,
+ ir_ArrayDef,
+ ir_AttributeDef,
+ ir_ConstantDef,
+ ir_Contained,
+ ir_Container,
+ ir_EnumDef,
+ ir_ExceptionDef,
+ ir_IDLType,
+ ir_IRObject,
+ ir_InterfaceDef,
+ ir_ModuleDef,
+ ir_ORB,
+ ir_OperationDef,
+ ir_PrimitiveDef,
+ ir_Repository,
+ ir_SequenceDef,
+ ir_StringDef,
+ ir_StructDef,
+ ir_TypedefDef,
+ ir_UnionDef,
+ logTable,
+ logTransferTable,
+ mesh_meas,
+ mesh_type,
+ mnesia_clist,
+ mnesia_decision,
+ mnesia_transient_decision,
+ orber_CosNaming,
+ orber_objkeys,
+ schema,
+ user
+ ]).
+
+
+-define(UNREADABLE_MNESIA_TABLES, [schema]).
+
+
+-define(SYSTEM_OWNERS, [alarm_handler,
+ application_controller,
+ auth,
+ coast_server,
+ code_server,
+ cover_server_001,
+ dbg,
+ dets,
+ dets_sup,
+ disk_log_server,
+ disk_log_sup,
+ erl_epmd,
+ erl_prim_loader,
+ error_logger,
+ eva_log_sup,
+ eva_server,
+ eva_sup,
+ file_server,
+ file_server_2,
+ global_group,
+ global_group_check,
+ global_name_server,
+ gs_frontend,
+ heart,
+ help_main,
+ inet_db,
+ inet_gethost_native,
+ init,
+ int_db,
+ interpret,
+ jive_server,
+ kernel_safe_sup,
+ kernel_sup,
+ log_server,
+ mandel_server,
+ mesh_sup,
+ mesh_server,
+ mnesia_checkpoint_sup,
+ mnesia_dumper,
+ mnesia_event,
+ mnesia_fallback,
+ mnesia_init,
+ mnesia_kernel_sup,
+ mnesia_late_loader,
+ mnesia_locker,
+ mnesia_monitor,
+ mnesia_recover,
+ mnesia_snmp_sup,
+ mnesia_subscr,
+ mnesia_sup,
+ mnesia_tm,
+ net_kernel,
+ net_sup,
+ overload,
+ perfmon_sampler,
+ pxw_server,
+ release_handler,
+ %% rex, %% Otherwise we won't see tables we've created on other nodes!
+ rsh_starter,
+ sasl_safe_sup,
+ sasl_sup,
+ snmp_agent_sup,
+ snmp_local_db,
+ snmp_master_agent,
+ snmp_misc_sup,
+ snmp_note_store,
+ snmp_supervisor,
+ snmp_symbolic_store,
+ socket,
+ sounder,
+ ssl_socket,
+ take_over_monitor,
+ timer_server,
+ tk,
+ udp_server,
+ user,
+ winshell_controller,
+ xerl_copy,
+ xerl_monitor
+ ]).
+
+
+
+
+
+
+
diff --git a/lib/tv/src/tv_mnesia_rpc.erl b/lib/tv/src/tv_mnesia_rpc.erl
new file mode 100644
index 0000000000..a2385714ec
--- /dev/null
+++ b/lib/tv/src/tv_mnesia_rpc.erl
@@ -0,0 +1,104 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(tv_mnesia_rpc).
+
+
+
+-export([system_info/3,
+ table_info/4,
+ transaction/3
+ ]).
+
+
+
+
+
+
+system_info(_Node, true, Key) ->
+ chk(catch mnesia:system_info(Key));
+system_info(Node, false, Key) ->
+ chk(catch rpc:block_call(Node, mnesia, system_info, [Key])).
+
+
+
+
+table_info(_Node, true, Tab, Item) ->
+ chk(catch mnesia:table_info(Tab, Item));
+table_info(Node, false, Tab, Item) ->
+ chk(catch rpc:block_call(Node, mnesia, table_info, [Tab, Item])).
+
+
+
+
+transaction(_Node, true, Fun) ->
+ chk(catch mnesia:transaction(Fun));
+transaction(Node, false, Fun) ->
+ chk(catch rpc:block_call(Node, mnesia, transaction, [Fun])).
+
+
+
+
+chk(Result) ->
+ case Result of
+ _Anything when is_list(Result) ->
+ Result;
+ _Anything when is_atom(Result) ->
+ Result;
+ _Anything when is_integer(Result) ->
+ Result;
+ _Anything when is_pid(Result) ->
+ Result;
+
+ {aborted, {bad_type, _Rec}} ->
+ throw(bad_format);
+
+ {badrpc,nodedown} ->
+ throw(nodedown);
+ {'EXIT', nodedown} ->
+ throw(nodedown);
+
+ {'EXIT', {aborted, {no_exists, _Table, _Arg}}} ->
+ throw(no_table);
+
+ {'EXIT', {aborted, {node_not_running, _Node}}} ->
+ throw(mnesia_not_started);
+ {'EXIT', {{badarg, {gen, set_monitor_mode, _Data}}, _Info}} ->
+ throw(mnesia_not_started);
+ {'EXIT', {'EXIT', {aborted, {node_not_running,_Node}}}} ->
+ throw(mnesia_not_started);
+ {badrpc, {'EXIT', {aborted, {node_not_running,_Node}}}} ->
+ throw(mnesia_not_started);
+ {badrpc, {'EXIT', {aborted, {no_exists,_Table,_Args}}}} ->
+ throw(mnesia_not_started);
+ {badrpc, _Reason} ->
+ throw(mnesia_not_started);
+ {'EXIT', {undef, {mnesia,_Fcn,_Args}}} ->
+ throw(mnesia_not_started);
+
+ {'EXIT', Reason} ->
+ throw({unexpected_error, Reason});
+
+ Other when is_tuple(Other) ->
+ %% For example wild_pattern requests return a tuple!
+ Other;
+
+ Other ->
+ io:format("Unexpected return value: ~p~n", [Other])
+ end.
+
+
diff --git a/lib/tv/src/tv_new_table.erl b/lib/tv/src/tv_new_table.erl
new file mode 100644
index 0000000000..3d62b0548b
--- /dev/null
+++ b/lib/tv/src/tv_new_table.erl
@@ -0,0 +1,656 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%k
+-module(tv_new_table).
+
+
+
+-export([start/2,
+ init/3
+ ]).
+
+
+
+-define(DEFAULT_BG_COLOR, {217, 217, 217}).
+-define(FONT, {screen, 12}).
+
+-define(WIN_WIDTH, 400).
+-define(WIN_HEIGHT, 555). %% 510
+
+-define(FRAME_WIDTH, 400).
+-define(FRAME1_HEIGHT, 170).
+-define(FRAME2_HEIGHT, 260).
+-define(FRAME3_HEIGHT, 125). %% 80
+-define(BW, 2).
+
+-define(FRAME_X, 0).
+-define(FRAME1_Y, 0).
+-define(FRAME2_Y, 170).
+-define(FRAME3_Y, 430).
+
+
+-define(LBL_HEIGHT, 30).
+-define(NODE_LBL_WIDTH, 45).
+-define(NAME_LBL_WIDTH, 85).
+-define(TYPE_LBL_WIDTH, 45).
+-define(PROT_LBL_WIDTH, 85).
+-define(KEYPOS_LBL_WIDTH, 95).
+
+-define(LBL_X, 10).
+-define(NODE_LBL_Y, 20).
+-define(NAME_LBL_Y, 80).
+-define(TYPE_LBL_Y, 10).
+-define(PROT_LBL_Y, 100).
+-define(KEYPOS_LBL_Y, 200).
+
+
+-define(ENTRY_HEIGHT, 30).
+-define(NODE_ENTRY_WIDTH, 275).
+-define(NAME_ENTRY_WIDTH, 275).
+-define(KEYPOS_ENTRY_WIDTH, 50).
+
+-define(ENTRY_X1, 110).
+-define(ENTRY_X2, 110).
+-define(NODE_ENTRY_Y, 20).
+-define(NAME_ENTRY_Y, 80).
+-define(KEYPOS_ENTRY_Y, 200).
+
+-define(RBTN_HEIGHT, 30).
+-define(RBTN_WIDTH1, 105).
+-define(RBTN_WIDTH2, 115).
+
+-define(RBTN_X1, 60).
+-define(RBTN_X2, 165).
+-define(RBTN_X3, 270).
+-define(RBTN_Y1, 40).
+-define(RBTN_Y1PLUS, 70).
+-define(RBTN_Y2, 130).
+
+
+-define(CBTN_HEIGHT, 30).
+-define(NAMED_TABLE_CBTN_WIDTH, 100).
+-define(OPEN_BROWSER_CBTN_WIDTH, 105).
+
+-define(NAMED_TABLE_CBTN_X, 110).
+-define(NAMED_TABLE_CBTN_Y, 120).
+
+-define(OPEN_BROWSER_CBTN_X, 85). %% 215
+-define(OPEN_BROWSER_CBTN_Y, 10). %% 200
+
+
+-define(BTN_WIDTH, 100).
+-define(BTN_HEIGHT, 30).
+
+-define(BTN_X1, 85).
+-define(BTN_X2, 225).
+-define(BTN_Y, 65). %% 30
+
+
+-define(VLINE_LBL_WIDTH, (380 - 2 * ?BW)).
+-define(VLINE_LBL_HEIGHT, 1).
+-define(HLINE_LBL_WIDTH, 1).
+-define(HLINE_LBL_HEIGHT, 70).
+
+-define(VLINE_LBL_X, (10 - ?BW)).
+-define(VLINE_LBL_Y1, 85).
+-define(VLINE_LBL_Y2, 180).
+-define(HLINE_LBL_X, 188).
+-define(HLINE_LBL_Y, 180).
+
+
+-define(DEFAULT_NAME, my_table).
+-define(DEFAULT_TYPE, set).
+-define(DEFAULT_PROT, public).
+-define(DEFAULT_KEYPOS, 1).
+
+
+
+
+start(Node, ErrMsgMode) ->
+ spawn_link(?MODULE, init, [Node, ErrMsgMode, self()]).
+
+
+
+
+
+init(Node, ErrMsgMode, MPid) ->
+ process_flag(trap_exit, true),
+ put(error_msg_mode, ErrMsgMode),
+ create_window(Node),
+ loop(false, ?DEFAULT_TYPE, ?DEFAULT_PROT, true, MPid).
+
+
+
+
+
+loop(NamedTab, Type, Prot, OpenBrowser, MPid) ->
+ receive
+
+ {gs, ok, click, _Data, _Args} ->
+ gs:config(win, [{cursor, busy}]),
+ case create_table(NamedTab, Type, Prot, OpenBrowser, MPid) of
+ ok ->
+ exit(normal);
+ error ->
+ gs:config(win, [{cursor, arrow}]),
+ loop(NamedTab, Type, Prot, OpenBrowser, MPid)
+ end;
+
+
+ {gs, cancel, click, _Data, _Args} ->
+ exit(normal);
+
+
+ {gs, set, click, _Data, _Args} ->
+ loop(NamedTab, set, Prot, OpenBrowser, MPid);
+
+
+ {gs, ordered_set, click, _Data, _Args} ->
+ loop(NamedTab, ordered_set, Prot, OpenBrowser, MPid);
+
+
+ {gs, bag, click, _Data, _Args} ->
+ loop(NamedTab, bag, Prot, OpenBrowser, MPid);
+
+
+ {gs, duplicate_bag, click, _Data, _Args} ->
+ loop(NamedTab, duplicate_bag, Prot, OpenBrowser, MPid);
+
+
+ {gs, public, click, _Data, _Args} ->
+ gs:config(open_browser, [{enable, true}, {select, OpenBrowser}]),
+ loop(NamedTab, Type, public, OpenBrowser, MPid);
+
+
+ {gs, protected, click, _Data, _Args} ->
+ gs:config(open_browser, [{enable, true}, {select, OpenBrowser}]),
+ loop(NamedTab, Type, protected, OpenBrowser, MPid);
+
+
+ {gs, private, click, _Data, _Args} ->
+ gs:config(open_browser, [{select, false}, {enable, false}]),
+ loop(NamedTab, Type, private, OpenBrowser, MPid);
+
+
+ {gs, named_table, click, Data, _Args} ->
+ gs:config(named_table, [{data, not(Data)}]),
+ loop(Data, Type, Prot, OpenBrowser, MPid);
+
+
+ {gs, open_browser, click, Data, _Args} ->
+ gs:config(open_browser, [{data, not(Data)}]),
+ loop(Data, Type, Prot, Data, MPid);
+
+
+ {gs, EntryId, keypress, _Data, ['Tab', _No, 0 | _T]} ->
+ case get_entry_term(EntryId) of
+ {ok, _Term} ->
+ gs:config(next_entry(EntryId, forward), [{setfocus, true},
+ {select, {0, 100000000}}]);
+ error ->
+ done
+ end,
+ loop(NamedTab, Type, Prot, OpenBrowser, MPid);
+
+
+ {gs, EntryId, keypress, _Data, ['Tab', _No, 1 | _T]} ->
+ case get_entry_term(EntryId) of
+ {ok, _Term} ->
+ gs:config(next_entry(EntryId, backward), [{setfocus, true},
+ {select, {0, 100000000}}]);
+ error ->
+ done
+ end,
+ loop(NamedTab, Type, Prot, OpenBrowser, MPid);
+
+
+ {gs, EntryId, keypress, _Data, ['Down' | _T]} ->
+ case get_entry_term(EntryId) of
+ {ok, _Term} ->
+ gs:config(next_entry(EntryId, forward), [{setfocus, true},
+ {select, {0, 100000000}}]);
+ error ->
+ done
+ end,
+ loop(NamedTab, Type, Prot, OpenBrowser, MPid);
+
+
+ {gs, EntryId, keypress, _Data, ['Up' | _T]} ->
+ case get_entry_term(EntryId) of
+ {ok, _Term} ->
+ gs:config(next_entry(EntryId, backward), [{setfocus, true},
+ {select, {0, 100000000}}]);
+ error ->
+ done
+ end,
+ loop(NamedTab, Type, Prot, OpenBrowser, MPid);
+
+
+ {gs, _EntryId, keypress, _Data, ['Return' | _T]} ->
+ gs:config(win, [{cursor, busy}]),
+ case create_table(NamedTab, Type, Prot, OpenBrowser, MPid) of
+ ok ->
+ exit(normal);
+ error ->
+ gs:config(win, [{cursor, arrow}]),
+ loop(NamedTab, Type, Prot, OpenBrowser, MPid)
+ end;
+
+
+ {gs, win, configure, _Data, _Args} ->
+ gs:config(win, [{width, ?WIN_WIDTH},
+ {height, ?WIN_HEIGHT}]),
+ loop(NamedTab, Type, Prot, OpenBrowser, MPid);
+
+
+ {gs, win, destroy, _Data, _Args} ->
+ exit(normal);
+
+
+ raise ->
+ gs:config(win, [raise]),
+ loop(NamedTab, Type, Prot, OpenBrowser, MPid);
+
+
+ {error_msg_mode, ErrMsgMode} ->
+ put(error_msg_mode, ErrMsgMode),
+ loop(NamedTab, Type, Prot, OpenBrowser, MPid);
+
+
+ {'EXIT', _Pid, _Reason} ->
+ exit(normal);
+
+
+ _Other ->
+ loop(NamedTab, Type, Prot, OpenBrowser, MPid)
+
+ end.
+
+
+
+
+create_table(NamedTab, Type, Prot, OpenBrowser, MPid) ->
+ case get_entry_term(node_entry) of
+ error ->
+ error;
+ {ok, Node} ->
+ case get_entry_term(name_entry) of
+ error ->
+ error;
+ {ok, TabName} ->
+ case get_entry_term(keypos_entry) of
+ error ->
+ error;
+ {ok, KeyPos} ->
+ Options =
+ [Type, Prot, {keypos, KeyPos}] ++
+ case NamedTab of
+ true ->
+ [named_table];
+ false ->
+ []
+ end,
+ {Readable, NewOpenBrowser} =
+ case Prot of
+ private ->
+ {false, false};
+ _Other ->
+ {true, OpenBrowser}
+ end,
+ MPid ! {tv_new_table, self(), Node, TabName, Options, ets,
+ Readable, NewOpenBrowser},
+ receive
+ ok ->
+ ok;
+ error ->
+ show_error_msg(),
+ error
+ after
+ 5000 ->
+ show_error_msg(),
+ error
+ end
+ end
+ end
+ end.
+
+
+
+
+
+show_error_msg() ->
+ Msg =
+ case get(error_msg_mode) of
+ normal ->
+ ["Couldn't create a table using",
+ "the specified settings!"];
+ haiku ->
+ ["The table you want",
+ "Could maybe be created.",
+ "But I don't know how."]
+ end,
+ tv_utils:notify(win, "TV Notification", Msg).
+
+
+
+
+
+
+
+get_entry_term(Id) ->
+ EditedStr = gs:read(Id, text),
+ case tv_db_search:string_to_term(EditedStr) of
+ {ok, NewTerm} when Id =:= node_entry, is_atom(NewTerm) ->
+ {ok,NewTerm};
+ {ok, NewTerm} when Id =:= name_entry, is_atom(NewTerm) ->
+ {ok,NewTerm};
+ {ok, NewTerm} when Id =:= keypos_entry, is_integer(NewTerm), NewTerm > 0 ->
+ {ok,NewTerm};
+ _Other ->
+ NewMsg =
+ case get(error_msg_mode) of
+ normal ->
+ case Id of
+ node_entry ->
+ ["Please enter a valid node name!"];
+ name_entry ->
+ ["Please enter a valid table name!"];
+ keypos_entry ->
+ ["Please enter a valid key position!"]
+ end;
+ haiku ->
+ E1 = "Aborted effort",
+ L =
+ case Id of
+ node_entry ->
+ ["Reflect, repent and retype:",
+ "Enter valid node."];
+ name_entry ->
+ ["Reflect, repent and retype:",
+ "Enter valid name."];
+ keypos_entry ->
+ ["Reflect, repent and retype",
+ "Key position, please."]
+ end,
+ [E1 | L]
+ end,
+ gs:config(Id, [beep, {select, {0, 100000000}}, {setfocus, true}]),
+ tv_utils:notify(win, "TV Notification", NewMsg),
+ error
+ end.
+
+
+
+
+
+next_entry(node_entry, forward) ->
+ name_entry;
+next_entry(node_entry, backward) ->
+ keypos_entry;
+next_entry(name_entry, forward) ->
+ keypos_entry;
+next_entry(name_entry, backward) ->
+ node_entry;
+next_entry(keypos_entry, forward) ->
+ node_entry;
+next_entry(keypos_entry, backward) ->
+ name_entry.
+
+
+
+
+create_window(Node) ->
+ gs:window(win, gs:start(), [{width, ?WIN_WIDTH},
+ {height, ?WIN_HEIGHT},
+ {bg, ?DEFAULT_BG_COLOR},
+ {title, "[TV] Create New ETS Table"},
+ {configure, true},
+ {destroy, true},
+ {cursor, arrow}
+ ]),
+
+ gs:frame(frame1, win, [{width, ?FRAME_WIDTH},
+ {height, ?FRAME1_HEIGHT},
+ {x, ?FRAME_X},
+ {y, ?FRAME1_Y},
+ {bg, ?DEFAULT_BG_COLOR},
+ {bw, ?BW}]),
+ gs:frame(frame2, win, [{width, ?FRAME_WIDTH},
+ {height, ?FRAME2_HEIGHT},
+ {x, ?FRAME_X},
+ {y, ?FRAME2_Y},
+ {bg, ?DEFAULT_BG_COLOR},
+ {bw, ?BW}]),
+ gs:frame(frame3, win, [{width, ?FRAME_WIDTH},
+ {height, ?FRAME3_HEIGHT},
+ {x, ?FRAME_X},
+ {y, ?FRAME3_Y},
+ {bg, ?DEFAULT_BG_COLOR},
+ {bw, ?BW}]),
+
+ gs:label(frame1, [{width, ?NODE_LBL_WIDTH},
+ {height, ?LBL_HEIGHT},
+ {x, ?LBL_X},
+ {y, ?NODE_LBL_Y},
+ {bg, ?DEFAULT_BG_COLOR},
+ {fg, {0,0,0}},
+ {align, w},
+ {font, ?FONT},
+ {label, {text, "Node:"}}
+ ]),
+ gs:label(frame1, [{width, ?NAME_LBL_WIDTH},
+ {height, ?LBL_HEIGHT},
+ {x, ?LBL_X},
+ {y, ?NAME_LBL_Y},
+ {bg, ?DEFAULT_BG_COLOR},
+ {fg, {0,0,0}},
+ {align, w},
+ {font, ?FONT},
+ {label, {text, "Table name:"}}
+ ]),
+ gs:label(frame2, [{width, ?TYPE_LBL_WIDTH},
+ {height, ?LBL_HEIGHT},
+ {x, ?LBL_X},
+ {y, ?TYPE_LBL_Y},
+ {bg, ?DEFAULT_BG_COLOR},
+ {fg, {0,0,0}},
+ {align, w},
+ {font, ?FONT},
+ {label, {text, "Type:"}}
+ ]),
+ gs:label(frame2, [{width, ?PROT_LBL_WIDTH},
+ {height, ?LBL_HEIGHT},
+ {x, ?LBL_X},
+ {y, ?PROT_LBL_Y},
+ {bg, ?DEFAULT_BG_COLOR},
+ {fg, {0,0,0}},
+ {align, w},
+ {font, ?FONT},
+ {label, {text, "Protection:"}}
+ ]),
+ gs:label(frame2, [{width, ?KEYPOS_LBL_WIDTH},
+ {height, ?LBL_HEIGHT},
+ {x, ?LBL_X},
+ {y, ?KEYPOS_LBL_Y},
+ {bg, ?DEFAULT_BG_COLOR},
+ {fg, {0,0,0}},
+ {align, w},
+ {font, ?FONT},
+ {label, {text, "Key position:"}}
+ ]),
+
+ gs:entry(node_entry, frame1, [{width, ?NODE_ENTRY_WIDTH},
+ {height, ?ENTRY_HEIGHT},
+ {x, ?ENTRY_X1},
+ {y, ?NODE_ENTRY_Y},
+ {bg, {255,255,255}},
+ {fg, {0,0,0}},
+ {font, ?FONT},
+ {enable, true},
+ {text, "'" ++ atom_to_list(Node) ++ "'"},
+ {keypress, true}
+ ]),
+ gs:entry(name_entry, frame1, [{width, ?NAME_ENTRY_WIDTH},
+ {height, ?ENTRY_HEIGHT},
+ {x, ?ENTRY_X1},
+ {y, ?NAME_ENTRY_Y},
+ {bg, {255,255,255}},
+ {fg, {0,0,0}},
+ {font, ?FONT},
+ {enable, true},
+ {text, atom_to_list(?DEFAULT_NAME)},
+ {keypress, true},
+ {setfocus, true},
+ {select, {0,100000000}}
+ ]),
+ gs:entry(keypos_entry, frame2, [{width, ?KEYPOS_ENTRY_WIDTH},
+ {height, ?ENTRY_HEIGHT},
+ {x, ?ENTRY_X2},
+ {y, ?KEYPOS_ENTRY_Y},
+ {bg, {255,255,255}},
+ {fg, {0,0,0}},
+ {font, ?FONT},
+ {enable, true},
+ {keypress, true},
+ {text, integer_to_list(?DEFAULT_KEYPOS)}
+ ]),
+
+ gs:radiobutton(set, frame2, [{width, ?RBTN_WIDTH1},
+ {height, ?RBTN_HEIGHT},
+ {x, ?RBTN_X1},
+ {y, ?RBTN_Y1},
+ {align, w},
+ {label, {text, "set"}},
+ {group, type}
+ ]),
+ gs:radiobutton(ordered_set, frame2, [{width, ?RBTN_WIDTH1},
+ {height, ?RBTN_HEIGHT},
+ {x, ?RBTN_X2},
+ {y, ?RBTN_Y1},
+ {align, w},
+ {label, {text, "ordered_set"}},
+ {group, type}
+ ]),
+ gs:radiobutton(bag, frame2, [{width, ?RBTN_WIDTH1},
+ {height, ?RBTN_HEIGHT},
+ {x, ?RBTN_X1},
+ {y, ?RBTN_Y1PLUS},
+ {align, w},
+ {label, {text, "bag"}},
+ {group, type}
+ ]),
+ gs:radiobutton(duplicate_bag, frame2, [{width, ?RBTN_WIDTH2},
+ {height, ?RBTN_HEIGHT},
+ {x, ?RBTN_X2},
+ {y, ?RBTN_Y1PLUS},
+ {align, w},
+ {label, {text, "duplicate_bag"}},
+ {group, type}
+ ]),
+
+ gs:radiobutton(public, frame2, [{width, ?RBTN_WIDTH1},
+ {height, ?RBTN_HEIGHT},
+ {x, ?RBTN_X1},
+ {y, ?RBTN_Y2},
+ {align, w},
+ {label, {text, "public"}},
+ {group, protection}
+ ]),
+ gs:radiobutton(protected, frame2, [{width, ?RBTN_WIDTH1},
+ {height, ?RBTN_HEIGHT},
+ {x, ?RBTN_X2},
+ {y, ?RBTN_Y2},
+ {align, w},
+ {label, {text, "protected"}},
+ {group, protection}
+ ]),
+ gs:radiobutton(private, frame2, [{width, ?RBTN_WIDTH2},
+ {height, ?RBTN_HEIGHT},
+ {x, ?RBTN_X3},
+ {y, ?RBTN_Y2},
+ {align, w},
+ {label, {text, "private"}},
+ {group, protection}
+ ]),
+
+ gs:checkbutton(named_table, frame1, [{width, ?NAMED_TABLE_CBTN_WIDTH},
+ {height, ?CBTN_HEIGHT},
+ {x, ?NAMED_TABLE_CBTN_X},
+ {y, ?NAMED_TABLE_CBTN_Y},
+ {align, w},
+ {label, {text, "Named table"}},
+ {select, false},
+ {data, true}
+ ]),
+
+ gs:checkbutton(open_browser, frame3, [{width, ?OPEN_BROWSER_CBTN_WIDTH},
+ {height, ?CBTN_HEIGHT},
+ {x, ?OPEN_BROWSER_CBTN_X},
+ {y, ?OPEN_BROWSER_CBTN_Y},
+ {align, w},
+ {label, {text, "Open browser"}},
+ {select, true},
+ {data, false}
+ ]),
+
+%% gs:label(frame2, [{width, ?VLINE_LBL_WIDTH},
+%% {height, ?VLINE_LBL_HEIGHT},
+%% {x, ?VLINE_LBL_X},
+%% {y, ?VLINE_LBL_Y1},
+%% {bg, {0,0,0}}
+%% ]),
+%% gs:label(frame2, [{width, ?VLINE_LBL_WIDTH},
+%% {height, ?VLINE_LBL_HEIGHT},
+%% {x, ?VLINE_LBL_X},
+%% {y, ?VLINE_LBL_Y2},
+%% {bg, {0,0,0}}
+%% ]),
+%% gs:label(frame2, [{width, ?HLINE_LBL_WIDTH},
+%% {height, ?HLINE_LBL_HEIGHT},
+%% {x, ?HLINE_LBL_X},
+%% {y, ?HLINE_LBL_Y},
+%% {bg, {0,0,0}}
+%% ]),
+%%
+ gs:button(ok, frame3, [{width, ?BTN_WIDTH},
+ {height, ?BTN_HEIGHT},
+ {x, ?BTN_X1},
+ {y, ?BTN_Y},
+ {bg, ?DEFAULT_BG_COLOR},
+ {fg, {0,0,0}},
+ {label, {text, "OK"}}
+ ]),
+ gs:button(cancel, frame3, [{width, ?BTN_WIDTH},
+ {height, ?BTN_HEIGHT},
+ {x, ?BTN_X2},
+ {y, ?BTN_Y},
+ {bg, ?DEFAULT_BG_COLOR},
+ {fg, {0,0,0}},
+ {label, {text, "Cancel"}}
+ ]),
+
+ gs:config(?DEFAULT_TYPE, [{select, true}]),
+ gs:config(?DEFAULT_PROT, [{select, true}]),
+
+ gs:config(win, [{map, true}]).
+
+
+
+
+
+
+
diff --git a/lib/tv/src/tv_nodewin.erl b/lib/tv/src/tv_nodewin.erl
new file mode 100644
index 0000000000..3999d201d8
--- /dev/null
+++ b/lib/tv/src/tv_nodewin.erl
@@ -0,0 +1,403 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(tv_nodewin).
+
+
+
+-export([start/2, init/3]).
+
+
+-include("tv_int_msg.hrl").
+
+
+
+-define(WINDOW_WIDTH, 230).
+-define(WINDOW_HEIGHT, 260).
+-define(DEFAULT_BG_COLOR, {217,217,217}).
+-define(POLL_INTERVAL, 5000).
+
+
+
+%%%*********************************************************************
+%%% EXTERNAL FUNCTIONS
+%%%*********************************************************************
+
+
+
+
+start(CurrNode, ErrMsgMode) ->
+ spawn_link(?MODULE, init, [self(), CurrNode, ErrMsgMode]).
+
+
+
+
+
+init(Pid, CurrNode, ErrMsgMode) ->
+ process_flag(trap_exit, true),
+ net_kernel:monitor_nodes(true),
+ put(error_msg_mode, ErrMsgMode),
+ gs:start(),
+ NewCurrNode = update_node_listbox(CurrNode, false),
+ tell_master(NewCurrNode, CurrNode, Pid),
+ loop(Pid, NewCurrNode, node(), false).
+
+
+
+
+%%%*********************************************************************
+%%% INTERNAL FUNCTIONS
+%%%*********************************************************************
+
+
+
+init_window(CurrNode, Pid) ->
+ create_window(),
+ NewCurrNode = update_node_listbox(CurrNode, true),
+ tell_master(NewCurrNode, CurrNode, Pid),
+ gs:config(win, [{map,true}]),
+ NewCurrNode.
+
+
+
+
+handle_error(nodedown) ->
+ gs:window(errorwin, gs:start(), []),
+ gs:config(errorwin, [beep]),
+ case get(error_msg_mode) of
+ normal ->
+ tv_utils:notify(errorwin, "TV Notification", ["The selected node is down!"]);
+ haiku ->
+ Msg = ["With searching comes loss",
+ "And the presence of absence:",
+ "Node is down."],
+ tv_utils:notify(errorwin, "TV Notification", Msg)
+ end,
+ gs:destroy(errorwin);
+handle_error(distributed) ->
+ gs:window(errorwin, gs:start(), []),
+ gs:config(errorwin, [beep]),
+ case get(error_msg_mode) of
+ normal ->
+ tv_utils:notify(errorwin, "TV Notification",
+ ["The system has become distributed!"]);
+ haiku ->
+ Msg = [],
+ tv_utils:notify(errorwin, "TV Notification", Msg)
+ end,
+ gs:destroy(errorwin);
+handle_error(undistributed) ->
+ gs:window(errorwin, gs:start(), []),
+ gs:config(errorwin, [beep]),
+ case get(error_msg_mode) of
+ normal ->
+ tv_utils:notify(errorwin, "TV Notification",
+ ["The system is no longer distributed!"]);
+ haiku ->
+ Msg = ["The system you see",
+ "Is not a distributed",
+ "system anymore."],
+ tv_utils:notify(errorwin, "TV Notification", Msg)
+ end,
+ gs:destroy(errorwin).
+
+get_node_lists(CurrNode) ->
+ NodeDataList = lists:sort([node() | nodes()]),
+ NodeTextList = lists:map(fun(Item) ->
+ " " ++ atom_to_list(Item)
+ end,
+ NodeDataList),
+
+ %% It *may* be possible that CurrNode has disappeared!
+ %% If this is the case, use the node where TV resides
+ %% as new current node.
+ %% This also covers the case when our own node (or some
+ %% other node) suddenly goes distributed.
+
+ NewCurrNode = case lists:member(CurrNode, NodeDataList) of
+ true ->
+ CurrNode;
+ false ->
+ node()
+ end,
+
+ %% Now get the index that shall be marked in the node listbox.
+ %% Remember that the first item has number 0 (zero)!
+ NodeMarkIndex = get_node_mark_index(NewCurrNode, NodeDataList, 0),
+
+ {NewCurrNode, NodeDataList, NodeTextList, NodeMarkIndex}.
+
+
+
+
+%% We know that CurrNode is *somewhere* in the list, since we have checked.
+%% If the original CurrNode wasn't there, then we are using node() instead,
+%% which definitely is in the list. (node() may have gone distributed in the
+%% meantime, but it *IS* in the list!) :-)
+
+get_node_mark_index(CurrNode, [H | T], Acc) when CurrNode =/= H ->
+ get_node_mark_index(CurrNode, T, Acc + 1);
+get_node_mark_index(CurrNode, [CurrNode | _], Acc) ->
+ Acc. %% Acc tells the index of the current head. :-)
+
+
+
+
+
+check_selected_node('nonode@nohost', _OldNode, _WinCreated) when node() =:= 'nonode@nohost' ->
+ %% Not distributed, OK!
+ 'nonode@nohost';
+check_selected_node(_Node, _OldNode, WinCreated) when node() =:= 'nonode@nohost' ->
+ %% No longer distributed, but previously was!
+ handle_error(undistributed),
+ update_node_listbox('nonode@nohost', WinCreated);
+check_selected_node(Node, _OldNode, _WinCreated) when Node =:= node() ->
+ %% We are distributed, but on
+ %% our own node! Since we
+ % still are running, the node
+ %% is up.
+ Node;
+check_selected_node(Node, 'nonode@nohost', WinCreated) ->
+ %% The system has been distributed!
+ net_kernel:monitor_nodes(true),
+ handle_error(distributed),
+ update_node_listbox(Node, WinCreated);
+check_selected_node(Node, _OldNode, WinCreated) ->
+ %% We are distributed, and a new node has been chosen!
+ %% We better check this node!
+ case net_adm:ping(Node) of
+ pong ->
+ Node;
+ _Other ->
+ handle_error(nodedown),
+ update_node_listbox(Node, WinCreated)
+ end.
+
+
+
+available_nodes() ->
+ lists:sort([node() | nodes()]).
+
+
+
+loop(Pid, CurrNode, HomeNode, WinCreated) ->
+ receive
+
+ {nodedown, _Node} ->
+ flush_nodedown_messages(),
+ flush_nodeup_messages(),
+ case lists:member(CurrNode, available_nodes()) of
+ true ->
+ done;
+ false when node() =:= 'nonode@nohost', CurrNode =/= 'nonode@nohost' ->
+ handle_error(undistributed);
+ false ->
+ handle_error(nodedown)
+ end,
+ NewCurrNode = update_node_listbox(CurrNode, WinCreated),
+ tell_master(NewCurrNode, CurrNode, Pid),
+ loop(Pid, NewCurrNode, node(), WinCreated);
+
+
+ {nodeup, _Node} ->
+ flush_nodeup_messages(),
+ flush_nodedown_messages(),
+ case lists:member(CurrNode, available_nodes()) of
+ true ->
+ done;
+ false when node() =:= 'nonode@nohost', CurrNode =/= 'nonode@nohost' ->
+ handle_error(undistributed);
+ false when CurrNode =:= 'nonode@nohost' ->
+ net_kernel:monitor_nodes(true),
+ handle_error(distributed);
+ false ->
+ handle_error(nodedown)
+ end,
+ NewCurrNode = update_node_listbox(CurrNode, WinCreated),
+ tell_master(NewCurrNode, CurrNode, Pid),
+ loop(Pid, NewCurrNode, node(), WinCreated);
+
+
+ {gs, node_listbox, click, Data, [Idx, _Txt | _]} ->
+ NewCurrNode = check_selected_node(lists:nth(Idx + 1, Data), CurrNode, WinCreated),
+ tell_master(NewCurrNode, CurrNode, Pid),
+ loop(Pid, NewCurrNode, node(), WinCreated);
+
+
+ {gs, win, configure, _, _} ->
+ gs:config(win, [{width, ?WINDOW_WIDTH}, {height, ?WINDOW_HEIGHT}]),
+ loop(Pid, CurrNode, HomeNode, WinCreated);
+
+
+ show_window when WinCreated->
+ gs:config(win, [raise]),
+ loop(Pid, CurrNode, HomeNode, WinCreated);
+
+ show_window when not WinCreated ->
+ init_window(CurrNode, Pid),
+ loop(Pid, CurrNode, HomeNode, true);
+
+ {gs, _Id, click, close_menu, _Args} ->
+ gs:destroy(win),
+ loop(Pid, CurrNode, HomeNode, false);
+
+
+ {gs, _Id, keypress, _Data, [c, _, 0, 1 | _]} ->
+ gs:destroy(win),
+ loop(Pid, CurrNode, HomeNode, false);
+
+
+ {gs, _Id, keypress, _Data, ['C', _, 1, 1 | _]} ->
+ gs:destroy(win),
+ loop(Pid, CurrNode, HomeNode, false);
+
+
+ {gs, _Id, keypress, _Data, _Args} ->
+ loop(Pid, CurrNode, HomeNode, WinCreated);
+
+
+ {gs, _, destroy, _, _} ->
+ loop(Pid, CurrNode, HomeNode, false);
+
+
+ {error_msg_mode, Mode} ->
+ put(error_msg_mode, Mode),
+ loop(Pid, CurrNode, HomeNode, WinCreated);
+
+ {'EXIT', Pid, _Reason} ->
+ net_kernel:monitor_nodes(false),
+ exit(normal);
+
+
+ {'EXIT', _OtherPid, _Reason} ->
+ loop(Pid, CurrNode, HomeNode, WinCreated);
+
+
+ _Other ->
+ io:format("Node window received message ~p ~n", [_Other]),
+ loop(Pid, CurrNode, HomeNode, WinCreated)
+
+ after
+ 1000 ->
+ NewHomeNode = case node() of
+ HomeNode ->
+ HomeNode;
+ Other ->
+ self() ! {nodeup, Other}
+ end,
+ loop(Pid, CurrNode, NewHomeNode, WinCreated)
+ end.
+
+
+
+
+tell_master(NewNode, NewNode, _Pid) ->
+ done;
+tell_master(NewNode, _OldNode, Pid) ->
+ Pid ! {tv_new_node, self(), NewNode}.
+
+
+
+
+flush_nodedown_messages() ->
+ receive
+ {nodedown,_Node} ->
+ flush_nodedown_messages()
+ after
+ 0 ->
+ done
+ end.
+
+
+
+
+flush_nodeup_messages() ->
+ receive
+ {nodeup,_Node} ->
+ flush_nodeup_messages()
+ after
+ 0 ->
+ done
+ end.
+
+
+
+
+update_node_listbox(Node, WinCreated) ->
+ {NewNode, NodeDataList, NodeTextList, MarkIndex} = get_node_lists(Node),
+ case WinCreated of
+ false ->
+ done;
+ true ->
+ catch gs:config(node_listbox, [{data, NodeDataList},
+ {items, NodeTextList},
+ {selection, MarkIndex}
+ ])
+ end,
+ NewNode.
+
+
+
+
+
+create_window() ->
+ gs:window(win, gs:start(), [{width, ?WINDOW_WIDTH},
+ {height, ?WINDOW_HEIGHT},
+ {bg, ?DEFAULT_BG_COLOR},
+ {title, "[TV] Connected nodes"},
+ {configure, true},
+ {destroy, true},
+ {cursor, arrow},
+ {keypress, true}
+ ]),
+ gs:menubar(menubar, win, [{bg, ?DEFAULT_BG_COLOR}
+ ]),
+ gs:menubutton(mbutt, menubar, [{bg, ?DEFAULT_BG_COLOR},
+ {fg, {178, 34, 34}}, % firebrick
+ {label, {text, " File "}},
+ {underline, 1}
+ ]),
+
+ % Create the actual menu!
+ gs:menu(menu, mbutt, [{bg, ?DEFAULT_BG_COLOR},
+ {fg, {178, 34, 34}}]),
+ gs:menuitem(menu, [{bg, ?DEFAULT_BG_COLOR},
+ {fg, {178, 34, 34}},
+ {label, {text, " Close Ctrl-C "}},
+ {data, close_menu},
+ {underline, 1}
+ ]),
+
+ Xpos = 4,
+ Ypos = 40,
+ gs:listbox(node_listbox, win, [{x, Xpos},
+ {y, Ypos},
+ {width, ?WINDOW_WIDTH - 2 * Xpos},
+ {height, ?WINDOW_HEIGHT - Ypos - Xpos},
+ {bg, {255,255,255}},
+ {vscroll, right},
+ {hscroll, true},
+ {click, true}
+ ]).
+
+
+
+
+
+
+
+
diff --git a/lib/tv/src/tv_pb.erl b/lib/tv/src/tv_pb.erl
new file mode 100644
index 0000000000..34db8d0772
--- /dev/null
+++ b/lib/tv/src/tv_pb.erl
@@ -0,0 +1,685 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(tv_pb).
+
+
+
+-export([pb/1]).
+
+
+-include("tv_int_def.hrl").
+-include("tv_pd_int_msg.hrl").
+-include("tv_pb_int_def.hrl").
+
+
+
+
+
+
+
+
+%%%*********************************************************************
+%%% EXTERNAL FUNCTIONS
+%%%*********************************************************************
+
+
+
+
+%%======================================================================
+%% Function: pb.
+%%
+%% Return Value: None.
+%%
+%% Description: Process controlling the grid buttons on the display.
+%%
+%% Parameters: None.
+%%======================================================================
+
+
+pb(ParentPid) ->
+ process_flag(trap_exit, true),
+ ProcVars = #process_variables{parent_pid = ParentPid},
+ loop(ProcVars).
+
+
+
+
+
+
+
+
+%%%********************************************************************
+%%% INTERNAL FUNCTIONS
+%%%********************************************************************
+
+
+
+
+
+%%======================================================================
+%% Function: loop.
+%%
+%% Return Value: None.
+%%
+%% Description: Eternal (well, almost) loop, receiving messages and
+%% handling them.
+%%
+%% Parameters:
+%%======================================================================
+
+
+loop(ProcVars) ->
+ receive
+ Msg ->
+ case Msg of
+
+ #pb_update_vbtns{} ->
+ NewProcVars = update_vbtns(Msg, ProcVars),
+ loop(NewProcVars);
+
+ #pb_key_info{} ->
+ NewProcVars = update_keys(Msg, ProcVars),
+ loop(NewProcVars);
+
+ #pb_update_hbtns{} ->
+ NewProcVars = update_hbtns(Msg, ProcVars),
+ loop(NewProcVars);
+
+ #pb_set_sort_col{} ->
+ NewProcVars = set_sort_col(Msg, ProcVars),
+ loop(NewProcVars);
+
+ #pb_remove_marks{} ->
+ NewProcVars = remove_marks(ProcVars),
+ loop(NewProcVars);
+
+ #pb_init_btns{} ->
+ NewProcVars = init_btns(Msg, ProcVars),
+ loop(NewProcVars);
+
+ {gs, Id, Event, Data, Args} ->
+ NewProcVars = gs_messages({Id, Event, Data, Args}, ProcVars),
+ loop(NewProcVars);
+
+
+ {'EXIT', Pid, Reason} ->
+ ParentPid = ProcVars#process_variables.parent_pid,
+ exit_signals({Pid, Reason}, ParentPid, ProcVars),
+ loop(ProcVars);
+
+ _Other ->
+ loop(ProcVars)
+ end
+ end.
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+exit_signals(ExitInfo, ParentPid, _ProcVars) ->
+ case ExitInfo of
+ {ParentPid, _Reason} ->
+ exit(normal);
+ _Other ->
+ done
+ end.
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+gs_messages(Msg, ProcVars) ->
+
+ case Msg of
+
+ {Id, click, {hbtn, RealCol, VirtualCol}, _Args} ->
+ handle_col_marking(Id, RealCol, VirtualCol, ProcVars);
+
+ {Id, buttonpress, {resbtn, RealCol, VirtualCol, Xpos}, [1 | _Tail]} ->
+ handle_col_resizing(Id, RealCol, VirtualCol, Xpos, ProcVars),
+ ProcVars;
+
+ {_Id, click, {vbtn, RealRow, VirtualRow}, _Args} ->
+ handle_row_marking(RealRow, VirtualRow, ProcVars);
+
+ _OtherMessage ->
+ ProcVars
+
+ end.
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+remove_marks(ProcVars) ->
+ #process_variables{col_mark_params = ColMarkP,
+ row_mark_params = RowMarkP} = ProcVars,
+
+ #col_mark_params{col_btn_id = BtnId,
+ virtual_col_marked = VirtualCol,
+ virtual_sort_col = SortCol} = ColMarkP,
+
+ case BtnId of
+ undefined ->
+ done;
+ _AnyId ->
+ case VirtualCol of
+ SortCol ->
+ gs:config(BtnId, [{bg, ?SORT_MARK_COLOR},
+ {fg, {0, 0, 0}}
+ ]);
+ _Other ->
+ gs:config(BtnId, [{bg, ?DEFAULT_BG_COLOR},
+ {fg, {0, 0, 0}}
+ ])
+ end
+ end,
+
+ NewRowMarkP = RowMarkP#row_mark_params{virtual_row_marked = undefined,
+ real_row_marked = undefined
+ },
+ NewColMarkP = ColMarkP#col_mark_params{col_btn_id = undefined,
+ virtual_col_marked = undefined
+ },
+ ProcVars#process_variables{col_mark_params = NewColMarkP,
+ row_mark_params = NewRowMarkP
+ }.
+
+
+
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+handle_col_marking(BtnId, RealCol, VirtualCol, ProcVars) ->
+ #process_variables{parent_pid = PdPid,
+ col_mark_params = ColMarkP,
+ row_mark_params = RowMarkP} = ProcVars,
+
+ #col_mark_params{col_btn_id = OldBtnId,
+ virtual_col_marked = OldVirtualCol,
+ virtual_sort_col = SortCol} = ColMarkP,
+
+ {ColMarked, NewColMarkP} = mark_col_btn(BtnId, OldBtnId, VirtualCol,
+ OldVirtualCol, RealCol, SortCol,
+ ColMarkP),
+
+ PdPid ! #pb_col_marked{sender = self(),
+ col_marked = ColMarked,
+ real_col = RealCol,
+ virtual_col = VirtualCol
+ },
+
+ NewRowMarkP = RowMarkP#row_mark_params{virtual_row_marked = undefined,
+ real_row_marked = undefined
+ },
+ ProcVars#process_variables{col_mark_params = NewColMarkP,
+ row_mark_params = NewRowMarkP
+ }.
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+handle_row_marking(RealRow, VirtualRow, ProcVars) ->
+ #process_variables{parent_pid = PdPid,
+ col_mark_params = ColMarkP,
+ row_mark_params = RowMarkP} = ProcVars,
+
+ #col_mark_params{col_btn_id = OldBtnId,
+ virtual_col_marked = OldVirtualCol,
+ virtual_sort_col = SortCol} = ColMarkP,
+
+ {_ColMarked, NewColMarkP} = mark_col_btn(OldBtnId, OldBtnId, OldVirtualCol,
+ OldVirtualCol, undefined, SortCol,
+ ColMarkP),
+
+ #row_mark_params{virtual_row_marked = OldVirtualRow} = RowMarkP,
+
+ % Check if row shall be marked or unmarked!
+ {RowMarked, NewRowMarkP} = check_marked_row(VirtualRow, OldVirtualRow, RealRow,
+ RowMarkP),
+
+ PdPid ! #pb_row_marked{sender = self(),
+ row_marked = RowMarked,
+ real_row = RealRow,
+ virtual_row = VirtualRow
+ },
+
+ ProcVars#process_variables{row_mark_params = NewRowMarkP,
+ col_mark_params = NewColMarkP}.
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+%% Three cases: no button previously clicked, or same button clicked,
+%% or some other button clicked.
+
+check_marked_row(NewVirtRow, undefined, RealRow, RowMarkP) ->
+ % No btn already pressed!
+ {true, RowMarkP#row_mark_params{virtual_row_marked = NewVirtRow,
+ real_row_marked = RealRow}};
+check_marked_row(NewVirtRow, OldVirtRow, _RealRow, RowMarkP) when NewVirtRow =:= OldVirtRow ->
+ % The button previously pressed has been pressed again!
+ {false, RowMarkP#row_mark_params{virtual_row_marked = undefined,
+ real_row_marked = undefined}};
+check_marked_row(NewVirtRow, _OldVirtRow, RealRow, RowMarkP) ->
+ % A new btn has been pressed!
+ {true, RowMarkP#row_mark_params{virtual_row_marked = NewVirtRow,
+ real_row_marked = RealRow}}.
+
+
+
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+set_sort_col(Msg, ProcVars) ->
+ #pb_set_sort_col{virtual_col = SortCol} = Msg,
+ tv_pb_funcs:set_new_sort_col(SortCol, ProcVars).
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+%% Three cases: no button previously clicked, or same button clicked,
+%% or some other button clicked.
+
+mark_col_btn(NewId, undefined, NewVirtCol, _OldVirtCol, _RealCol, _SortCol, ColMarkP) ->
+ % No btn already pressed!
+ gs:config(NewId, [{bg, ?COL_MARK_COLOR},
+ {fg, {255, 255, 255}}
+ ]),
+ {true, ColMarkP#col_mark_params{col_btn_id = NewId,
+ virtual_col_marked = NewVirtCol}};
+mark_col_btn(NewId, _OldId, NewVirtCol, OldVirtCol, _RealCol, SortCol, ColMarkP) when NewVirtCol =:= OldVirtCol, NewVirtCol =:= SortCol ->
+ % The button previously pressed has been pressed again!
+ gs:config(NewId, [{bg, ?SORT_MARK_COLOR},
+ {fg, {0, 0, 0}}
+ ]),
+ {false, ColMarkP#col_mark_params{col_btn_id = undefined,
+ virtual_col_marked = undefined}};
+mark_col_btn(NewId, _OldId, NewVirtCol, OldVirtCol, _RealCol, _SortCol, ColMarkP) when NewVirtCol =:= OldVirtCol ->
+ % The button previously pressed has been pressed again!
+ gs:config(NewId, [{bg, ?DEFAULT_BG_COLOR},
+ {fg, {0, 0, 0}}
+ ]),
+ {false, ColMarkP#col_mark_params{col_btn_id = undefined,
+ virtual_col_marked = undefined}};
+mark_col_btn(NewId, OldId, NewVirtCol, _OldVirtCol, _RealCol, _SortCol, ColMarkP) ->
+ % A new btn has been pressed!
+ gs:config(OldId, [{bg, ?DEFAULT_BG_COLOR},
+ {fg, {0, 0, 0}}
+ ]),
+ gs:config(NewId, [{bg, ?COL_MARK_COLOR},
+ {fg, {255, 255, 255}}
+ ]),
+ {true, ColMarkP#col_mark_params{col_btn_id = NewId,
+ virtual_col_marked = NewVirtCol}}.
+
+
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+handle_col_resizing(RbtnId, RealCol, VirtualCol, Xpos, ProcVars) ->
+ gs:config(RbtnId, [{motion, true}]),
+ #process_variables{parent_pid = ParentPid,
+ grid_frame_id = GrFrId,
+ grid_frame_height = Height,
+ hbtn_height = HbtnH,
+ resbtn_width = RbtnW,
+ cols_shown = ColsShown} = ProcVars,
+
+ LineId = gs:frame(GrFrId, [{width, 1},
+ {height, Height - HbtnH},
+ {x, Xpos},
+ {y, HbtnH - 1},
+ {bg, ?DEFAULT_BG_COLOR}
+ ]),
+ MinColWidth = RbtnW,
+
+ OldColWidth = lists:nth(RealCol, ColsShown),
+ Xdiff = get_xdiff(RbtnId, 1, 0, LineId, Xpos, MinColWidth - OldColWidth),
+
+ ParentPid ! #pb_new_colwidth{sender = self(),
+ real_col = RealCol,
+ virtual_col = VirtualCol,
+ xdiff = Xdiff},
+
+ gs:config(RbtnId, [{motion, false}]),
+ gs:destroy(LineId).
+
+
+
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+get_xdiff(Id, Btn, LastXdiff, LineId, LineXpos, MinAllowedXdiff) ->
+ receive
+ {gs, Id, motion, {resbtn, _RealCol, _VirtCol, _OldXpos}, [NewXdiff | _T]} ->
+ UsedXdiff = max(MinAllowedXdiff, NewXdiff),
+ gs:config(LineId, [{x, LineXpos + UsedXdiff}]),
+ get_xdiff(Id, Btn, UsedXdiff, LineId, LineXpos, MinAllowedXdiff);
+ {gs, Id, buttonrelease, _Data, [Btn | _T]} ->
+ LastXdiff;
+ {gs, Id, buttonrelease, _Data, _Args} ->
+ get_xdiff(Id, Btn, LastXdiff, LineId, LineXpos, MinAllowedXdiff);
+ {gs, Id, buttonpress, _Data, _Args} ->
+ get_xdiff(Id, Btn, LastXdiff, LineId, LineXpos, MinAllowedXdiff)
+ end.
+
+
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+init_btns(Msg, ProcVars) ->
+ #pb_init_btns{parent_id = ParentId,
+ parent_width = Width,
+ parent_height = Height,
+ ypos = Ypos,
+ hbtn_height = HbtnH,
+ resbtn_width = RbtnW,
+ vbtn_width = VbtnW,
+ nof_rows = NofRows,
+ row_height = RowHeight,
+ first_col_shown = FirstColShown,
+ cols_shown = ColsShown} = Msg,
+
+ NewProcVars = tv_pb_funcs:init_btns(ParentId, Ypos, HbtnH, VbtnW, RbtnW,
+ FirstColShown, ColsShown, NofRows,
+ RowHeight, ProcVars),
+
+ gs:frame(ParentId, [{bg, {0, 0, 0}},
+ {bw, 0},
+ {width, 1300},
+ {height, 1},
+ {x, 0},
+ {y, Ypos - 1}
+ ]),
+ NewProcVars#process_variables{grid_frame_width = Width,
+ grid_frame_height = Height
+ }.
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+update_hbtns(Msg, ProcVars) ->
+ #pb_update_hbtns{parent_width = Width,
+ parent_height = Height,
+ first_col_shown = FirstColShown,
+ cols_shown = ColsShown} = Msg,
+
+ NewProcVars = tv_pb_funcs:update_hbtns(FirstColShown, ColsShown, ProcVars),
+
+ NewProcVars#process_variables{grid_frame_width = Width,
+ grid_frame_height = Height
+ }.
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+update_vbtns(Msg, ProcVars) ->
+ #pb_update_vbtns{color_list = Colors,
+ first_row_shown = FirstRowShown,
+ nof_rows_shown = NofRowsShown,
+ blinking_enabled = BlinkEnabled} = Msg,
+
+ tv_pb_funcs:update_vbtns(NofRowsShown, FirstRowShown, Colors, BlinkEnabled,
+ ProcVars).
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+update_keys(Msg, ProcVars) ->
+ #pb_key_info{list_of_keys = KeyList} = Msg,
+ tv_pb_funcs:update_keys(KeyList, ProcVars).
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+max(A, B) when A >= B ->
+ A;
+max(_, B) ->
+ B.
+
+
diff --git a/lib/tv/src/tv_pb_funcs.erl b/lib/tv/src/tv_pb_funcs.erl
new file mode 100644
index 0000000000..87a4719bbd
--- /dev/null
+++ b/lib/tv/src/tv_pb_funcs.erl
@@ -0,0 +1,1050 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(tv_pb_funcs).
+
+
+
+-export([init_btns/10,
+ update_hbtns/3,
+ update_vbtns/5,
+ update_keys/2,
+ set_new_sort_col/2]).
+
+
+-include("tv_int_def.hrl").
+-include("tv_pb_int_def.hrl").
+
+
+
+
+
+
+
+%%%*********************************************************************
+%%% EXTERNAL FUNCTIONS
+%%%*********************************************************************
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+
+init_btns(ParentId, Ypos, HbtnH,
+ VbtnW, ResbtnW, FirstColShown, ColsShown, NofRows, RowH, ProcVars) ->
+
+ #process_variables{key_numbers = KeyNos,
+ key_ids = KeyIds} = ProcVars,
+
+% C = gs:canvas(ParentId, [{width, VbtnW - 1},
+% {height, HbtnH},
+% {x, 0},
+% {y, HbtnH + 1},
+% {bg, white}
+% ]),
+% gs:create(image, C, [{load_gif, "erlang.gif"}]),
+
+ {HbtnsShown, ResBtnsShown} = update_hbtns(ColsShown, [], [],
+ FirstColShown, ParentId, Ypos,
+ HbtnH, ResbtnW, VbtnW),
+
+ NewKeyIds = update_keys(KeyNos, KeyIds, FirstColShown,
+ FirstColShown + length(ColsShown) - 1, HbtnsShown,
+ ParentId, []),
+
+ VbtnsShown = create_vbtns(ParentId, Ypos, NofRows, RowH, VbtnW, HbtnH),
+ ProcVars#process_variables{grid_frame_id = ParentId,
+ ypos = Ypos,
+ hbtn_height = HbtnH,
+ vbtn_width = VbtnW,
+ resbtn_width = ResbtnW,
+ first_col_shown = FirstColShown,
+ hbtns_shown = HbtnsShown,
+ resbtns_shown = ResBtnsShown,
+ vbtns_shown = VbtnsShown,
+ cols_shown = ColsShown,
+ key_ids = NewKeyIds
+ }.
+
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+update_hbtns(FirstColShown, ColsShown, ProcVars) ->
+ #process_variables{grid_frame_id = ParentId,
+ first_col_shown = OldFirstColShown,
+ cols_shown = OldColsShown,
+ ypos = Ypos,
+ hbtn_height = HbtnH,
+ vbtn_width = VbtnW,
+ resbtn_width = ResbtnW,
+ hbtns_shown = HbtnsShown,
+ resbtns_shown = ResbtnsShown,
+ key_numbers = KeyNos,
+ key_ids = KeyIds,
+ col_mark_params = ColMarkP} = ProcVars,
+
+ % Only if the grid has been scrolled horizontally need we move the
+ % col mark!
+ case FirstColShown of
+ OldFirstColShown ->
+ done;
+ _NewValue ->
+ #col_mark_params{col_btn_id = MarkedBtnId,
+ virtual_col_marked = ColMarked,
+ sort_btn_id = SortBtnId,
+ virtual_sort_col = SortCol} = ColMarkP,
+ unmark_marked_col(MarkedBtnId, ColMarked, SortCol),
+ unmark_sort_col(SortBtnId, ColMarked, SortCol)
+ end,
+
+ {NewHbtns, NewResbtns, NewKeys} =
+ case {FirstColShown, ColsShown} of
+ {OldFirstColShown, OldColsShown} ->
+ {HbtnsShown, ResbtnsShown, KeyIds};
+ _Other ->
+ {NewHbtnsShown, NewResbtnsShown} = update_hbtns(ColsShown,
+ HbtnsShown,
+ ResbtnsShown,
+ FirstColShown,
+ ParentId,
+ Ypos,
+ HbtnH,
+ ResbtnW,
+ VbtnW),
+ NewKeyIds = update_keys(KeyNos, KeyIds, FirstColShown,
+ FirstColShown + length(ColsShown) - 1,
+ NewHbtnsShown, ParentId, []),
+ {NewHbtnsShown, NewResbtnsShown, NewKeyIds}
+ end,
+
+ % Now mark the marked column again!
+ NewColMarkP = mark_marked_col(NewHbtns, FirstColShown, ColMarkP),
+
+ ProcVars#process_variables{first_col_shown = FirstColShown,
+ hbtns_shown = NewHbtns,
+ resbtns_shown = NewResbtns,
+ cols_shown = ColsShown,
+ key_ids = NewKeys,
+ col_mark_params = NewColMarkP
+ }.
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+update_vbtns(NofRowsShown, FirstRowShown, Colors, BlinkEnabled, ProcVars) ->
+ #process_variables{vbtns_shown = Vbtns,
+ blink_color_list = BlinkList} = ProcVars,
+
+ update_vbtns(1, NofRowsShown, FirstRowShown, Vbtns, Colors, BlinkEnabled, BlinkList),
+ NewProcVars = update_sort_btn_mark(ProcVars),
+ NewProcVars.
+
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+set_new_sort_col(SortCol, ProcVars) ->
+ #process_variables{hbtns_shown = HbtnsShown,
+ col_mark_params = ColMarkP} = ProcVars,
+
+ #col_mark_params{col_btn_id = MarkedColBtnId,
+ sort_btn_id = OldSortBtnId} = ColMarkP,
+
+ % Set the new color of the sort btn, and remove the mark, if it is the same
+ % column!
+
+ case MarkedColBtnId of
+ undefined ->
+ done;
+ _AnyId ->
+ gs:config(MarkedColBtnId, [{bg, ?DEFAULT_BG_COLOR},
+ {fg, {0, 0, 0}}
+ ])
+ end,
+
+ SortBtnId = get_btn_id(SortCol, HbtnsShown),
+ case SortBtnId of
+ undefined ->
+ % The btn isn't visible, or no sorting shall be performed!
+ gs:config(OldSortBtnId, [{bg, ?DEFAULT_BG_COLOR},
+ {fg, {0, 0, 0}}
+ ]);
+ _Other ->
+ % Unmark the old sort btn id!
+ gs:config(OldSortBtnId, [{bg, ?DEFAULT_BG_COLOR},
+ {fg, {0, 0, 0}}
+ ]),
+ gs:config(SortBtnId, [{bg, ?SORT_MARK_COLOR},
+ {fg, {0, 0, 0}}
+ ])
+ end,
+
+ NewColMarkP = ColMarkP#col_mark_params{col_btn_id = undefined,
+ virtual_col_marked = undefined,
+ sort_btn_id = SortBtnId,
+ virtual_sort_col = SortCol
+ },
+ ProcVars#process_variables{col_mark_params = NewColMarkP}.
+
+
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+update_keys(KeyList, ProcVars) ->
+ #process_variables{key_numbers = OldKeyList,
+ key_ids = KeyIds,
+ first_col_shown = FirstColShown,
+ cols_shown = ColsShown,
+ hbtns_shown = HbtnsShown,
+ grid_frame_id = ParentId} = ProcVars,
+
+ NewKeyIds = case KeyList of
+ OldKeyList ->
+ KeyIds;
+ NewKeyList ->
+ update_keys(NewKeyList, KeyIds, FirstColShown,
+ FirstColShown + length(ColsShown) - 1,
+ HbtnsShown, ParentId, [])
+ end,
+
+ ProcVars#process_variables{key_numbers = KeyList,
+ key_ids = NewKeyIds
+ }.
+
+
+
+
+
+
+
+
+%%%*********************************************************************
+%%% INTERNAL FUNCTIONS
+%%%*********************************************************************
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+unmark_sort_col(undefined, _ColMarked, _SortCol) ->
+ done;
+unmark_sort_col(SortBtnId, _ColMarked, _SortCol) ->
+ gs:config(SortBtnId, [{bg, ?DEFAULT_BG_COLOR},
+ {fg, {0, 0, 0}}
+ ]).
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+mark_marked_col(HbtnsShown, _FirstColShown, ColMarkP) ->
+ #col_mark_params{virtual_col_marked = VirtualCol,
+ virtual_sort_col = SortCol} = ColMarkP,
+
+ {NewMarkBtnId, NewSortBtnId} =
+ case VirtualCol of
+ SortCol ->
+ % Same btn!
+ BtnId = get_btn_id(VirtualCol,
+ HbtnsShown),
+ gs:config(BtnId, [{bg, ?SORT_MARK_COLOR},
+ {fg, {0, 0, 0}}
+ ]),
+ {BtnId, BtnId};
+ _OtherCol ->
+ MarkBtnId = get_btn_id(VirtualCol, HbtnsShown),
+ case MarkBtnId of
+ undefined ->
+ done;
+ _Else ->
+ gs:config(MarkBtnId, [{bg, ?COL_MARK_COLOR},
+ {fg, {255, 255, 255}}
+ ])
+ end,
+
+ SortBtnId = get_btn_id(SortCol, HbtnsShown),
+ case SortBtnId of
+ undefined ->
+ done;
+ _OtherId ->
+ gs:config(SortBtnId, [{bg, ?SORT_MARK_COLOR},
+ {fg, {0, 0, 0}}
+ ])
+ end,
+
+ {MarkBtnId, SortBtnId}
+ end,
+
+ ColMarkP#col_mark_params{col_btn_id = NewMarkBtnId,
+ sort_btn_id = NewSortBtnId}.
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+unmark_marked_col(undefined, _ColMarked, _SortCol) ->
+ done;
+unmark_marked_col(BtnId, _ColMarked, _SortCol) ->
+ gs:config(BtnId, [{bg, ?DEFAULT_BG_COLOR},
+ {fg, {0,0,0}}
+ ]).
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+update_sort_btn_mark(ProcVars) ->
+ #process_variables{hbtns_shown = HbtnsShown,
+ col_mark_params = ColMarkP} = ProcVars,
+
+ #col_mark_params{col_btn_id = MarkedColBtnId,
+ virtual_col_marked = ColMarked,
+ sort_btn_id = OldSortBtnId,
+ virtual_sort_col = SortCol} = ColMarkP,
+
+ {NewMarkedColBtnId, NewColMarked} = case ColMarked of
+ SortCol ->
+ {undefined, undefined};
+ _Other ->
+ {MarkedColBtnId, ColMarked}
+ end,
+
+ NewSortBtnId = set_sort_btn_color(OldSortBtnId, SortCol, HbtnsShown),
+
+ NewColMarkP = ColMarkP#col_mark_params{col_btn_id = NewMarkedColBtnId,
+ virtual_col_marked = NewColMarked,
+ sort_btn_id = NewSortBtnId},
+
+ ProcVars#process_variables{col_mark_params = NewColMarkP}.
+
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+get_btn_id(VirtualCol, HbtnsShown) ->
+ case lists:keysearch(VirtualCol, #hbtn.virtual_col, HbtnsShown) of
+ false ->
+ undefined;
+ {value, HbtnRec} ->
+ HbtnRec#hbtn.id
+ end.
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+set_sort_btn_color(undefined, SortCol, HbtnsShown) ->
+ case lists:keysearch(SortCol, #hbtn.virtual_col, HbtnsShown) of
+ false ->
+ undefined;
+ {value, HbtnRec} ->
+ BtnId = HbtnRec#hbtn.id,
+ gs:config(BtnId, [{bg, ?SORT_MARK_COLOR}]),
+ BtnId
+ end;
+set_sort_btn_color(BtnId, undefined, _HbtnsShown) ->
+ gs:config(BtnId, [{bg, ?DEFAULT_BG_COLOR}]);
+set_sort_btn_color(OldSortBtnId, SortCol, HbtnsShown) ->
+ case gs:read(OldSortBtnId, bg) of
+ SortCol ->
+ % Btn is already marked!
+ OldSortBtnId;
+ _OtherColor ->
+ % Unmark old btn, mark new btn, if visible.
+ gs:config(OldSortBtnId, [{bg, ?DEFAULT_BG_COLOR}]),
+ case lists:keysearch(SortCol, #hbtn.virtual_col, HbtnsShown) of
+ false ->
+ undefined;
+ {value, HbtnRec} ->
+ BtnId = HbtnRec#hbtn.id,
+ gs:config(BtnId, [{bg, ?SORT_MARK_COLOR}]),
+ BtnId
+ end
+ end.
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+update_vbtns(N, NofRowsShown, _VirtualRowNo,
+ _Vbtns, _Colors, _BlinkEnabled, _BlinkList) when N > NofRowsShown ->
+ done;
+update_vbtns(_N, _NofRowsShown, _VirtualRowNo, [], [], _BlinkEnabled, _BlinkList) ->
+ done;
+update_vbtns(_N, _NofRowsShown, _VirtualRowNo, [], _Colors, _BlinkEnabled, _BlinkList) ->
+ % Right now we don't bother with dynamically creating row buttons:
+ % we ought too know in advance the maximum number of rows that can
+ % be visible.
+ io:format("Configuration error: too few rows in grid.~n"),
+ done;
+update_vbtns(N, NofRowsShown,
+ VirtualRowNo, [VbtnRec | VT], [], BlinkEnabled, BlinkList) ->
+ VbtnId = VbtnRec#vbtn.id,
+ gs:config(VbtnId, [{bg, ?DEFAULT_BG_COLOR},
+ {fg, ?BLACK},
+ {label, {text, integer_to_list(VirtualRowNo)}},
+ {data, {vbtn, N, VirtualRowNo}} % Real row + virtual row
+ ]),
+ update_vbtns(N + 1, NofRowsShown, VirtualRowNo + 1,VT, [], BlinkEnabled,
+ BlinkList);
+update_vbtns(N, NofRowsShown,
+ VirtualRowNo, [VbtnRec | VT], [Color | CT], true, BlinkList) ->
+ VbtnId = VbtnRec#vbtn.id,
+ {Text, TextColor} = get_vbtn_text_and_textcolor(Color, VirtualRowNo),
+ case lists:member(Color, BlinkList) of
+ true ->
+ gs:config(VbtnId, [{bg, Color},
+ {fg, TextColor},
+ {label, {text, Text}},
+ {data, {vbtn, N, VirtualRowNo}}, % Real + virtual row
+ flash
+ ]);
+ false ->
+ gs:config(VbtnId, [{bg, Color},
+ {fg, TextColor},
+ {label, {text, Text}},
+ {data, {vbtn, N, VirtualRowNo}} % Real + virtual row
+ ])
+ end,
+ update_vbtns(N + 1, NofRowsShown, VirtualRowNo + 1, VT, CT, true, BlinkList);
+update_vbtns(N, NofRowsShown,
+ VirtualRowNo, [VbtnRec | VT], [Color | CT], false, BlinkList) ->
+ VbtnId = VbtnRec#vbtn.id,
+ {Text, TextColor} = get_vbtn_text_and_textcolor(Color, VirtualRowNo),
+ gs:config(VbtnId, [{bg, Color},
+ {fg, TextColor},
+ {label, {text, Text}},
+ {data, {vbtn, N, VirtualRowNo}} % Real row + virtual row
+ ]),
+ update_vbtns(N + 1, NofRowsShown, VirtualRowNo + 1, VT, CT, false, BlinkList).
+
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+get_vbtn_text_and_textcolor(?BLACK, N) ->
+ {integer_to_list(N), ?WHITE};
+get_vbtn_text_and_textcolor(?RED1, N) ->
+ {integer_to_list(N), ?BLACK};
+get_vbtn_text_and_textcolor(?RED2, N) ->
+ {integer_to_list(N), ?BLACK};
+get_vbtn_text_and_textcolor(?RED3, N) ->
+ {integer_to_list(N), ?BLACK};
+get_vbtn_text_and_textcolor(?RED4, N) ->
+ {integer_to_list(N), ?BLACK};
+get_vbtn_text_and_textcolor(?RED5, N) ->
+ {integer_to_list(N), ?BLACK};
+get_vbtn_text_and_textcolor(?GREEN1, N) ->
+ {integer_to_list(N), ?BLACK};
+get_vbtn_text_and_textcolor(?GREEN2, N) ->
+ {integer_to_list(N), ?BLACK};
+get_vbtn_text_and_textcolor(?GREEN3, N) ->
+ {integer_to_list(N), ?BLACK};
+get_vbtn_text_and_textcolor(?GREEN4, N) ->
+ {integer_to_list(N), ?BLACK};
+get_vbtn_text_and_textcolor(?GREEN5, N) ->
+ {integer_to_list(N), ?BLACK};
+get_vbtn_text_and_textcolor(_AnyOtherColor, N) ->
+ {integer_to_list(N), ?BLACK}.
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+create_vbtns(ParentId, Ypos, NofRows, RowHeight, VbtnW, HbtnH) ->
+ create_vbtns(1, NofRows, RowHeight, ParentId, VbtnW, Ypos + HbtnH, []).
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+create_vbtns(N, NofRows, _RowHeight, _ParId, _VbtnW, _Ypos, VAcc) when N > NofRows ->
+ lists:reverse(VAcc);
+create_vbtns(N, NofRows, RowHeight, ParId, VbtnW, Ypos, VAcc) ->
+ VHeight = RowHeight + 1,
+ VInfo = create_one_vbtn(ParId, VHeight, VbtnW, Ypos, N),
+ create_vbtns(N + 1, NofRows, RowHeight, ParId, VbtnW, Ypos + VHeight,
+ [VInfo | VAcc]).
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+create_one_vbtn(ParentId, Height, VbtnW, Ypos, N) ->
+ Id = gs:button(ParentId, [{width, VbtnW},
+ {height, Height},
+ {x, 0},
+ {y, Ypos},
+ {font, ?BTN_FONT},
+ {bg, ?DEFAULT_BG_COLOR},
+ {align, center},
+ {label, {text,integer_to_list(N)}},
+ {data, {vbtn, N, N}} % Real row + virtual row
+ ]),
+ #vbtn{virtual_row = N,
+ real_row = N,
+ id = Id,
+ height = Height,
+ ypos = Ypos}.
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+update_hbtns([], _HBtnsShown,
+ _ResBtns, _VirtualColNo, _FrId, _Ypos, _HbtnH, _ResBtnW, _VbtnW) ->
+ {[], []};
+update_hbtns(ColsShown, HBtns,
+ ResBtns, VirtualColNo, FrId, Ypos, HbtnH, ResBtnW, VbtnW) ->
+ update_hbtns(1, ColsShown, HBtns, ResBtns, HbtnH, ResBtnW, VbtnW,
+ VirtualColNo, FrId, 0, Ypos, [], []).
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+update_hbtns(_N, [],
+ [], [], _HbtnH, _ResBtnW, _VbtnW, _ColNo, _FrId, _Xpos, _Ypos, HAcc, RAcc) ->
+ {lists:reverse(HAcc), lists:reverse(RAcc)};
+
+update_hbtns(N, [], [HInfo | HT], [RInfo | RT],
+ HbtnH, ResBtnW, VbtnW, ColNo, FrId, Xpos, Ypos, HAcc, RAcc) ->
+ % If too many buttons, i.e., if the ColsShown list
+ % has become empty.
+ gs:destroy(HInfo#hbtn.id),
+ gs:destroy(RInfo#resbtn.id),
+ update_hbtns(N, [], HT, RT, HbtnH, ResBtnW, VbtnW, ColNo, FrId,
+ Xpos, Ypos, HAcc, RAcc);
+
+update_hbtns(1, [ColW | T], [], [],
+ HbtnH, ResBtnW, VbtnW, ColNo, FrId, _Xpos, Ypos, HAcc, RAcc) ->
+ % The first button has to be bigger than the others.
+ {HInfo, RInfo} = create_one_hbtn_and_resbtn(FrId, ColW - 2,
+ HbtnH, VbtnW - 1,
+ Ypos, ResBtnW, 1, ColNo),
+ update_hbtns(2, T, [], [], HbtnH, ResBtnW, VbtnW, ColNo + 1,
+ FrId, VbtnW - 1 + ColW - 2 + ResBtnW, Ypos, [HInfo | HAcc],
+ [RInfo | RAcc]);
+
+update_hbtns(N, [ColW | T], [], [],
+ HbtnH, ResBtnW, VbtnW, ColNo, FrId, Xpos, Ypos, HAcc, RAcc) ->
+ {HInfo, RInfo} = create_one_hbtn_and_resbtn(FrId, ColW - 4,
+ HbtnH, Xpos,
+ Ypos, ResBtnW, N, ColNo),
+ update_hbtns(N + 1, T, [], [], HbtnH, ResBtnW, VbtnW, ColNo + 1,
+ FrId, Xpos + ColW - 4 + ResBtnW, Ypos, [HInfo | HAcc],
+ [RInfo | RAcc]);
+
+update_hbtns(1, [ColW | T], [HInfo | HT], [RInfo | RT],
+ HbtnH, ResBtnW, VbtnW, ColNo, FrId, _Xpos, Ypos, HAcc, RAcc) ->
+ {NewHInfo, NewRInfo} = config_one_hbtn_and_resbtn(HInfo, RInfo,
+ ColW - 2,
+ VbtnW - 1,
+ 1, ColNo),
+ update_hbtns(2, T, HT, RT, HbtnH, ResBtnW, VbtnW, ColNo + 1,
+ FrId, VbtnW - 1 + ColW - 2 + ResBtnW, Ypos,
+ [NewHInfo | HAcc], [NewRInfo | RAcc]);
+
+update_hbtns(N, [ColW | T], [HInfo | HT], [RInfo | RT],
+ HbtnH, ResBtnW, VbtnW, ColNo, FrId, Xpos, Ypos, HAcc, RAcc) ->
+ {NewHInfo, NewRInfo} = config_one_hbtn_and_resbtn(HInfo, RInfo,
+ ColW - 4,
+ Xpos, N,
+ ColNo),
+ update_hbtns(N + 1, T, HT, RT, HbtnH, ResBtnW, VbtnW, ColNo + 1,
+ FrId, Xpos + ColW - 4 + ResBtnW, Ypos, [NewHInfo | HAcc],
+ [NewRInfo | RAcc]).
+
+
+
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+create_one_hbtn_and_resbtn(ParId, HWidth, HHeight, HXpos, Ypos, RWidth, N, ColNo) ->
+ HId = gs:button(ParId, [{width, HWidth},
+ {height, HHeight},
+ {x, HXpos},
+ {y, Ypos},
+ {font, ?BTN_FONT},
+ {bg, ?DEFAULT_BG_COLOR},
+ {data, {hbtn, N, ColNo}},
+ {label, {text, integer_to_list(ColNo)}}
+ ]),
+ RId = gs:button(ParId, [{width, RWidth},
+ {height, HHeight},
+ {x, HXpos + HWidth},
+ {y, Ypos},
+ {cursor, resize},
+ {buttonpress, true},
+ {buttonrelease, true},
+ {data, {resbtn, N, ColNo, (HXpos + HWidth + RWidth div 2)}},
+ {bg, ?BLACK}
+ ]),
+ HInfo = #hbtn{virtual_col = ColNo,
+ real_col = N,
+ id = HId,
+ width = HWidth,
+ xpos = HXpos},
+ RInfo = #resbtn{virtual_col = ColNo,
+ real_col = N,
+ id = RId,
+ width = RWidth,
+ xpos = HXpos + HWidth},
+ {HInfo, RInfo}.
+
+
+
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+config_one_hbtn_and_resbtn(HInfo, RInfo, HWidth, HXpos, N, ColNo) ->
+ gs:config(HInfo#hbtn.id, [{width, HWidth},
+ {x, HXpos},
+ {data, {hbtn, N, ColNo}},
+ {label, {text, integer_to_list(ColNo)}}
+ ]),
+ gs:config(RInfo#resbtn.id, [{x, HXpos + HWidth},
+ {data, {resbtn, N, ColNo,
+ (HXpos + HWidth + RInfo#resbtn.width div 2)}}
+ ]),
+ NewHInfo = HInfo#hbtn{virtual_col = ColNo,
+ width = HWidth,
+ xpos = HXpos},
+ NewRInfo = RInfo#resbtn{virtual_col = ColNo,
+ xpos = HXpos + HWidth},
+ {NewHInfo, NewRInfo}.
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+update_keys([], [], _FirstCol, _LastCol, _HBtns, _ParentId, KeyIdsAcc) ->
+ lists:reverse(KeyIdsAcc);
+
+update_keys([], [KeyId | IdT], FirstCol, LastCol, HBtns, ParentId, KeyIdsAcc) ->
+ gs:config(KeyId, [{x, 1200}]),
+ update_keys([], IdT, FirstCol, LastCol, HBtns, ParentId,
+ [KeyId | KeyIdsAcc]);
+
+update_keys([KeyNo | KT], [], FirstCol, LastCol,
+ HBtns,ParentId, KeyIdsAcc) when KeyNo >= FirstCol, KeyNo =< LastCol ->
+ {_Width, Xpos} = get_keywidth_and_pos(KeyNo, FirstCol, HBtns),
+ NewKeyId = create_key(ParentId, Xpos, 1),
+ update_keys(KT, [], FirstCol, LastCol, HBtns, ParentId,
+ [NewKeyId | KeyIdsAcc]);
+
+update_keys([_KeyNo | KT], [], FirstCol, LastCol, HBtns, ParentId, KeyIdsAcc) ->
+ update_keys(KT, [], FirstCol, LastCol, HBtns, ParentId,
+ KeyIdsAcc);
+
+update_keys([KeyNo | KT], [KeyId | IdT], FirstCol, LastCol,
+ HBtns, ParentId, KeyIdsAcc) when KeyNo >= FirstCol, KeyNo =< LastCol ->
+ {Width, Xpos} = get_keywidth_and_pos(KeyNo, FirstCol, HBtns),
+ gs:config(KeyId, [{width, Width},
+ {x, Xpos}
+ ]),
+ update_keys(KT, IdT, FirstCol, LastCol, HBtns, ParentId,
+ [KeyId | KeyIdsAcc]);
+
+update_keys([_KeyNo | KT],
+ [KeyId | IdT], FirstCol, LastCol, HBtns, ParentId, KeyIdsAcc) ->
+ update_keys(KT, [KeyId | IdT], FirstCol, LastCol, HBtns, ParentId,
+ KeyIdsAcc).
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+get_keywidth_and_pos(VirtualCol, FirstCol, HBtns) ->
+ RealColNo = VirtualCol - FirstCol + 1,
+ HBtnR = lists:nth(RealColNo, HBtns),
+ #hbtn{width = Width,
+ xpos = Xpos} = HBtnR,
+ KeyWidth = 10,
+ % Compute the x position for the key!
+ KeyXpos = (Xpos + (Width div 2) - (KeyWidth div 2)),
+ {KeyWidth, KeyXpos}.
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+create_key(ParentId, Xpos, Ypos) ->
+ PicDir = code:priv_dir(tv),
+ C = gs:canvas(ParentId, [{width, 10},
+ {height, 18},
+ {x, Xpos},
+ {y, Ypos},
+ {bg, ?DEFAULT_BG_COLOR}
+ ]),
+ gs:create(image, C, [{bitmap, PicDir ++ "/key.xbm"}]),
+ C.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/tv/src/tv_pb_int_def.hrl b/lib/tv/src/tv_pb_int_def.hrl
new file mode 100644
index 0000000000..0fe9df193a
--- /dev/null
+++ b/lib/tv/src/tv_pb_int_def.hrl
@@ -0,0 +1,99 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+
+-define(WHITE, {255,255,255}).
+
+-define(DEFAULT_BG_COLOR, {217,217,217}).
+
+-define(COL_MARK_COLOR, {0, 0, 0}).
+-define(SORT_MARK_COLOR, {255,215,0}).
+
+-define(BLINK_COLOR1, {255,0,0}).
+-define(BLINK_COLOR2, {0,255,0}).
+-define(BLINK_COLOR3, {0,0,0}).
+-define(BTN_FONT, {courier,12}).
+
+
+
+
+-record(col_mark_params, {col_btn_id,
+ virtual_col_marked,
+ sort_btn_id,
+ virtual_sort_col
+ }).
+
+
+
+-record(row_mark_params, {virtual_row_marked,
+ real_row_marked
+ }).
+
+
+
+
+-record(process_variables, {parent_pid,
+ grid_frame_id,
+ grid_frame_width,
+ grid_frame_height,
+ ypos,
+ hbtn_height,
+ vbtn_width,
+ resbtn_width,
+ first_col_shown,
+ hbtns_shown = [],
+ vbtns_shown = [],
+ resbtns_shown = [],
+ cols_shown = [],
+ key_numbers = [],
+ key_ids = [],
+ blink_color_list = [?BLINK_COLOR1,
+ ?BLINK_COLOR2,
+ ?BLINK_COLOR3],
+ col_mark_params = #col_mark_params{},
+ row_mark_params = #row_mark_params{}
+ }).
+
+
+
+-record(hbtn, {virtual_col,
+ real_col,
+ id,
+ width,
+ xpos
+ }).
+
+
+
+-record(resbtn, {virtual_col,
+ real_col,
+ id,
+ width,
+ xpos
+ }).
+
+
+
+-record(vbtn, {virtual_row,
+ real_row,
+ id,
+ height,
+ ypos
+ }).
+
+
+
diff --git a/lib/tv/src/tv_pc.erl b/lib/tv/src/tv_pc.erl
new file mode 100644
index 0000000000..50214fe06a
--- /dev/null
+++ b/lib/tv/src/tv_pc.erl
@@ -0,0 +1,794 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%%*********************************************************************
+%%%
+%%% Description: pc part of the table tool, i.e., the process
+%%% controlling all other processes, and managing
+%%% the actions to take.
+%%%
+%%%*********************************************************************
+
+
+-module(tv_pc).
+
+
+
+-export([pc/7,
+ send_data/2
+ ]).
+
+
+
+-include("tv_int_def.hrl").
+-include("tv_int_msg.hrl").
+-include("tv_pc_int_def.hrl").
+
+
+
+
+%%%*********************************************************************
+%%% EXTERNAL FUNCTIONS
+%%%*********************************************************************
+
+
+
+%%======================================================================
+%% Function: pc.
+%%
+%% Return Value: None.
+%%
+%% Description: Process controlling the processes 'pd', 'pw', 'dbs' and 'etsread'.
+%% After necessary initialisations, an eternal loop is
+%% entered, where window created messages are received and
+%% handled, as well as user input.
+%%
+%% Parameters:
+%%======================================================================
+
+
+pc(Master, Node, LocalNode, TableId, KindOfTable, TableName, ErrMsgMode) ->
+ process_flag(trap_exit, true),
+ put(error_msg_mode, ErrMsgMode),
+ ProcVars = prepare_and_open_table(Node, LocalNode, TableId, KindOfTable, TableName,
+ false, #process_variables{parent_pid=Master}),
+ loop(ProcVars).
+
+
+
+
+
+
+
+%%%********************************************************************
+%%% INTERNAL FUNCTIONS
+%%%********************************************************************
+
+
+
+
+
+prepare_and_open_table(Node, LocalNode, TabId, TabType, TabName, Raise, ProcVars) ->
+ IpPid = spawn(tv_ip, ip, [self()]),
+ show_progress(IpPid, 5, "Initializing graphics..."),
+
+ TmpProcVars = start_procs(IpPid, ProcVars),
+
+ show_progress(IpPid, 5, "Loading table..."),
+ NewProcVars = ?MENU_FUNC_FILE:open_table(Node, LocalNode, TabId, TabType, TabName,
+ Raise, TmpProcVars),
+
+ IpPid ! #ip_quit{sender = self()},
+ % Now make window visible!
+ WinP = NewProcVars#process_variables.window_params,
+ gs:config(WinP#window_params.window_id, [{map, true}]),
+ NewProcVars.
+
+
+
+
+
+start_procs(IpPid, ProcVars) ->
+ ErrorMsgMode = get(error_msg_mode),
+ PwPid = spawn_link(tv_pw, pw, [self()]),
+ PdPid = spawn_link(tv_pd, pd, [self(), ErrorMsgMode]),
+ DbsPid = spawn_link(tv_db, dbs, [self(), ErrorMsgMode]),
+ EtsreadPid = spawn_link(tv_etsread, etsread, [self(), ErrorMsgMode]),
+
+ show_progress(IpPid, 5, "Initializing graphics..."),
+ NewWinP = init_pw(PwPid, ProcVars),
+
+ show_progress(IpPid, 5, "Initializing graphics..."),
+ init_pd(PdPid, NewWinP),
+ ProcVars#process_variables{pw_pid = PwPid,
+ pd_pid = PdPid,
+ dbs_pid = DbsPid,
+ etsread_pid = EtsreadPid,
+ current_node = node(), %% Will be replaced, when table opened.
+ local_node = true,
+ window_params = NewWinP
+ }.
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+show_progress(IpPid, NofElements, Text) ->
+ IpPid ! #ip_update{sender = self(),
+ nof_elements_to_mark = NofElements,
+ text = Text
+ }.
+
+
+
+
+
+
+
+%%======================================================================
+%% Function: loop.
+%%
+%% Return Value: None.
+%%
+%% Description: Eternal (well, almost) loop, receiving messages and
+%% handling them.
+%%
+%% Parameters: None.
+%%======================================================================
+
+
+loop(ProcVars) ->
+ receive
+ Msg ->
+ case Msg of
+
+ % Normal messages!
+ #dbs_subset{} ->
+ NewProcVars1 = send_data(Msg, ProcVars),
+ NewProcVars2 = check_time_to_poll_table(Msg, NewProcVars1),
+ loop(NewProcVars2);
+
+ #pc_poll_table{} ->
+ TmpProcVars = check_node(ProcVars),
+ NewProcVars = ?MENU_FUNC_FILE:poll_table(TmpProcVars),
+ loop(NewProcVars);
+
+ #pc_search_req{} ->
+ DbsPid = ProcVars#process_variables.dbs_pid,
+ DbsPid ! #dbs_search_req{sender=self()},
+ loop(ProcVars);
+
+ #pc_set_sorting_mode{} ->
+ set_sorting_mode(Msg, ProcVars),
+ loop(ProcVars);
+
+
+ #pc_data_req{element = Pos, nof_elements = Length} ->
+ DbsPid = ProcVars#process_variables.dbs_pid,
+ DbsPid ! #dbs_subset_req{sender = self(),
+ subset_pos = Pos,
+ subset_length = Length
+ },
+ loop(ProcVars);
+
+
+ #pc_marked_row{row_no=RowNo, object=Obj, color=Color} ->
+ DbsPid = ProcVars#process_variables.dbs_pid,
+ DbsPid ! #dbs_marked_row{sender = self(),
+ row_no = RowNo
+ },
+ NewProcVars = ProcVars#process_variables{marked_row = RowNo,
+ marked_object = Obj,
+ marked_color = Color},
+ loop(NewProcVars);
+
+
+ #pc_menu_msg{} ->
+ Fcn = Msg#pc_menu_msg.data,
+ NewProcVars = ?MENU_FUNC_FILE:Fcn(ProcVars),
+ loop(NewProcVars);
+
+
+ #pd_updated_object{object=Obj,old_object=OldObj,old_color=Color,obj_no=ObjNo} ->
+ DbsPid = ProcVars#process_variables.dbs_pid,
+ DbsPid ! #dbs_updated_object{sender = self(),
+ object = Obj,
+ old_object = OldObj,
+ old_color = Color,
+ obj_no = ObjNo},
+ loop(ProcVars);
+
+
+ #pd_new_object{object=Obj} ->
+ DbsPid = ProcVars#process_variables.dbs_pid,
+ DbsPid ! #dbs_new_object{sender = self(),
+ object = Obj},
+ loop(ProcVars);
+
+
+ #pc_show_table_info{} ->
+ NewProcVars = ?MENU_FUNC_FILE:table_info(ProcVars),
+ loop(NewProcVars);
+
+ #pc_win_conf{} ->
+ NewProcVars = ?GRAPH_FUNC_FILE:win_conf(Msg, ProcVars),
+ loop(NewProcVars);
+
+ #pc_help{} ->
+ NewProcVars = ?MENU_FUNC_FILE:help_button(ProcVars),
+ loop(NewProcVars);
+
+ #pc_dead_table{automatic_polling = AutoPoll} ->
+ WinP = ProcVars#process_variables.window_params,
+ WinId = WinP#window_params.window_id,
+ gs:config(WinId, [beep]),
+ case get(error_msg_mode) of
+ normal ->
+ tv_utils:notify(WinId, "TV Notification",
+ ["The table no longer exists!"]);
+ haiku ->
+ ErrMsg1 = ["A table that big?",
+ "It might be very useful.",
+ "But now it is gone."],
+ tv_utils:notify(WinId, "TV Notification", ErrMsg1)
+ end,
+ NewProcVars =
+ case AutoPoll of
+ true ->
+ gs:config(WinId, [beep]),
+ case get(error_msg_mode) of
+ normal ->
+ tv_utils:notify(WinId, "TV Notification",
+ ["The automatic polling is turned off!"]);
+ haiku ->
+ ErrMsg2 = ["Previously on",
+ "The polling is now idled.",
+ "That's the way it is."],
+ tv_utils:notify(WinId, "TV Notification", ErrMsg2)
+ end,
+ ProcVars#process_variables{poll_interval = infinity};
+ false ->
+ ProcVars
+ end,
+ loop(NewProcVars);
+
+ #pc_nodedown{automatic_polling = AutoPoll} ->
+ WinP = ProcVars#process_variables.window_params,
+ WinId = WinP#window_params.window_id,
+ gs:config(WinId, [beep]),
+ case get(error_msg_mode) of
+ normal ->
+ tv_utils:notify(WinId, "TV Notification",
+ ["The node is down, and the",
+ "table cannot be reached."]);
+ haiku ->
+ ErrMsg1 = ["With searching comes loss",
+ "And the presence of absence:",
+ "Node is down."],
+ tv_utils:notify(WinId, "TV Notification", ErrMsg1)
+ end,
+ NewProcVars =
+ case AutoPoll of
+ true ->
+ gs:config(WinId, [beep]),
+ case get(error_msg_mode) of
+ normal ->
+ tv_utils:notify(WinId, "TV Notification",
+ ["The automatic polling is turned off!"]);
+ haiku ->
+ ErrMsg = ["Previously on,",
+ "The polling is now idled.",
+ "That's the way it is."],
+ tv_utils:notify(WinId, "TV Notification", ErrMsg)
+ end,
+ ProcVars#process_variables{poll_interval = infinity};
+ false ->
+ ProcVars
+ end,
+ loop(NewProcVars);
+
+
+ {pc_edit_object, _Sender} ->
+ NewProcVars = ?MENU_FUNC_FILE:insert_object(ProcVars),
+ loop(NewProcVars);
+
+
+ check_node ->
+ NewProcVars = check_node(ProcVars),
+ loop(NewProcVars);
+
+
+ raise ->
+ WinP = ProcVars#process_variables.window_params,
+ gs:config(WinP#window_params.window_id, [raise]),
+ loop(ProcVars);
+
+
+ {error_msg_mode, Mode} ->
+ ProcVars#process_variables.dbs_pid ! {error_msg_mode, Mode},
+ ProcVars#process_variables.etsread_pid ! {error_msg_mode, Mode},
+ ProcVars#process_variables.pd_pid ! {error_msg_mode, Mode},
+ put(error_msg_mode, Mode),
+ loop(ProcVars);
+
+ % Exit messages!
+ {'EXIT', Sender, Reason} ->
+ exit_signals({Sender, Reason}, ProcVars);
+
+
+ _Other ->
+ loop(ProcVars)
+
+ end
+ end.
+
+
+
+
+
+
+check_node(ProcVars) ->
+ #process_variables{pw_pid = PwPid,
+ current_node = OldCurrNode,
+ local_node = LocalNode,
+ table_id = TableId,
+ table_type = TableType,
+ table_name = TableName} = ProcVars,
+
+ HomeNode = node(),
+ case net_adm:ping(OldCurrNode) of
+ pong ->
+ ProcVars;
+ pang when not LocalNode ->
+ ProcVars;
+ pang when LocalNode ->
+ %% XXX [siri] Will this ever happen? I thought local_node
+ %% indicated if current_node was the node where tv was
+ %% started. If so, we are pinging ourselves here, and
+ %% a pang can never happen??
+ WinTitle = ?MENU_FUNC_FILE:get_window_title(TableType,HomeNode,TableId,TableName),
+ PwPid ! #pw_set_window_title{sender = self(),
+ win_title = WinTitle},
+ ProcVars#process_variables{current_node = HomeNode}
+ end.
+
+
+
+
+
+
+
+send_data(Msg, ProcVars) ->
+ #process_variables{pd_pid = PdPid,
+ parent_pid = ParentPid,
+ table_id = Table,
+ table_type = Type,
+ current_node = Node} = ProcVars,
+
+ ParentPid ! {tv_update_infowin, Table, Node, Type},
+
+ #dbs_subset{data = DbData,
+ subset_pos = ScalePos,
+ db_length = DbLength,
+ list_of_keys = ListOfKeys,
+ max_elem_size = MaxElemSize,
+ requested_row = ReqRowData} = Msg,
+
+ Range = case ScalePos of
+ 0 ->
+ {0, 0};
+ _Other ->
+ {1, DbLength}
+ end,
+
+ PdPid ! #pc_data{sender = self(),
+ scale_pos = ScalePos,
+ scale_range = Range,
+ elementlist = DbData,
+ list_of_keys = ListOfKeys,
+ max_elem_size = MaxElemSize,
+ marked_row = ReqRowData
+ },
+
+ {MarkedObject, MarkedColor} =
+ case ReqRowData of
+ [] ->
+ {undefined, undefined};
+ [Data] ->
+ Data
+ end,
+ ProcVars#process_variables{marked_object = MarkedObject,
+ marked_color = MarkedColor}.
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+set_sorting_mode(Msg, ProcVars) ->
+ #pc_set_sorting_mode{sorting = Sorting,
+ reverse = Reverse,
+ sort_key_no = SortKeyNo} = Msg,
+
+ DbsPid = ProcVars#process_variables.dbs_pid,
+ PdPid = ProcVars#process_variables.pd_pid,
+ PwPid = ProcVars#process_variables.pw_pid,
+ TableType = ProcVars#process_variables.table_type,
+
+ NewSortKeyNo =
+ case SortKeyNo of
+ undefined ->
+ if
+ TableType =:= mnesia ->
+ 2;
+ true ->
+ 1
+ end;
+ _Other ->
+ SortKeyNo
+ end,
+
+ Menu =
+ case Sorting of
+ true ->
+ case Reverse of
+ true ->
+ sort_falling_order;
+ false ->
+ sort_rising_order
+ end;
+ false ->
+ no_sorting
+ end,
+
+ PwPid ! #pw_select_menu{sender = self(),
+ menu = Menu},
+
+ DbsPid ! #dbs_sorting_mode{sender = self(),
+ sorting = Sorting,
+ reverse = Reverse,
+ sort_key_no = NewSortKeyNo
+ },
+
+ PdPid ! #pc_set_sorting_mode_cfm{sender = self(),
+ sort_key_no = NewSortKeyNo
+ }.
+
+
+
+
+
+
+
+%%======================================================================
+%% Function: init_pw.
+%%
+%% Return Value: Tuple containing the Pid of the pw process, and the id of
+%% the window created by the pw process.
+%%
+%% Description: Starts the pw process, and orders it to create a window.
+%% (The size of the window may be given as option.)
+%%
+%% Parameters: None.
+%%======================================================================
+
+
+
+init_pw(PwPid, ProcVars) ->
+ #process_variables{window_params = WinP} = ProcVars,
+
+ % Now deblock pw, and order it to create a window!
+ PwPid ! #pw_deblock{sender = self(),
+ win_title = ?APPLICATION_NAME,
+ win_width = ?DEFAULT_WINDOW_WIDTH,
+ win_height = ?DEFAULT_WINDOW_HEIGHT,
+ min_win_width = ?DEFAULT_MIN_WINDOW_WIDTH,
+ min_win_height = ?DEFAULT_MIN_WINDOW_HEIGHT
+ },
+
+
+ receive
+ #pw_deblock_cfm{win_id = WindowId} ->
+ ?MENU_FUNC_FILE:create_menus(PwPid),
+
+ % Store the window id as well as the size of it.
+ WinP#window_params{window_id = WindowId,
+ window_width = ?DEFAULT_WINDOW_WIDTH,
+ window_height = ?DEFAULT_WINDOW_HEIGHT
+ }
+
+
+ after 180000 -> % A timeout of 1000 ms is too short, at least the first
+ % time the system is started!
+ exit(error)
+ end.
+
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+init_pd(PdPid, WinP) ->
+ #window_params{window_id = WindowId,
+ window_width = WindowWidth,
+ window_height = WindowHeight} = WinP,
+
+ % Now deblock pd, and order it to create a canvas and a scale!
+ PdPid ! #pd_deblock{sender = self(),
+ win = WindowId,
+ win_width = WindowWidth,
+ win_height = WindowHeight,
+ scale = true
+ },
+
+ receive
+ #pd_deblock_cfm{} ->
+ done
+ after 180000 ->
+ exit(error)
+ end.
+
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function: exit_signals.
+%%
+%% Return Value: None.
+%%
+%% Description: Decides, given an error message, action to take, i.e., whether
+%% operation shall procede, any process shall be restarted, or
+%% the table tool terminated.
+%%
+%% Parameters: Exit_info: tuple containing sender of the error message, and the
+%% reason.
+%%======================================================================
+
+
+exit_signals(ExitInfo, ProcVars) ->
+ #process_variables{parent_pid = ParentPid,
+ pd_pid = PdPid,
+ pw_pid = PwPid,
+ dbs_pid = DbsPid,
+ etsread_pid = EtsreadPid,
+ table_id = TabId,
+ table_type = TabType,
+ table_name = TabName,
+ current_node = Node,
+ local_node = LocalNode
+ } = ProcVars,
+
+ case ExitInfo of
+ {ParentPid, Reason} ->
+ exit(Reason);
+
+ {PwPid, normal} ->
+ exit(normal);
+
+ {PwPid, error} ->
+ io:format("Internal error... restarting. ~n"),
+ kill_procs(normal, [PdPid, EtsreadPid, DbsPid]),
+ NewProcVars = pc(ParentPid, Node, LocalNode, TabId, TabType, TabName,
+ get(error_msg_mode)),
+ loop(NewProcVars);
+
+ {PdPid, _Reason} ->
+ io:format("Internal error... restarting. ~n"),
+ kill_procs(normal, [PwPid, EtsreadPid, DbsPid]),
+ NewProcVars = pc(ParentPid, Node, LocalNode, TabId, TabType, TabName,
+ get(error_msg_mode)),
+ loop(NewProcVars);
+
+ {DbsPid, _Reason} ->
+ io:format("Internal error... restarting. ~n"),
+ kill_procs(normal, [PdPid, PwPid, EtsreadPid]),
+ NewProcVars = pc(ParentPid, Node, LocalNode, TabId, TabType, TabName,
+ get(error_msg_mode)),
+ loop(NewProcVars);
+
+ {EtsreadPid, _Reason} ->
+ io:format("Internal error... restarting. ~n"),
+ kill_procs(normal, [PdPid, PwPid, DbsPid]),
+ NewProcVars = pc(ParentPid, Node, LocalNode, TabId, TabType, TabName,
+ get(error_msg_mode)),
+ loop(NewProcVars);
+
+ {_Sender, _OtherReason} ->
+ loop(ProcVars)
+ end.
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+kill_procs(_Status, []) ->
+ done;
+kill_procs(Status, [Pid | Tail]) ->
+ exit(Pid, Status),
+ kill_procs(Status, Tail).
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+check_time_to_poll_table(Msg, ProcVars) ->
+ #dbs_subset{required_time_etsread = EtsreadTime,
+ required_time_dbs = DbsTime} = Msg,
+
+ UserSetPollInterval = ProcVars#process_variables.poll_interval,
+ WinP = ProcVars#process_variables.window_params,
+ WinId = WinP#window_params.window_id,
+
+ case too_short_pollinterval_chosen(UserSetPollInterval, EtsreadTime, DbsTime) of
+ true ->
+ EtsreadPid = ProcVars#process_variables.etsread_pid,
+ EtsreadPid ! #etsread_set_poll_interval{sender = self(),
+ interval = infinity},
+
+ TimeRequired = trunc(max_time_required(EtsreadTime, DbsTime) / 10 + 0.5) * 10 + 20,
+
+ gs:config(WinId, [beep]),
+ case get(error_msg_mode) of
+ normal ->
+ tv_utils:notify(WinId, "TV Notification",
+ ["The current poll interval is too short!"]),
+ Str = "to " ++ lists:flatten(io_lib:write(TimeRequired)) ++ " seconds!",
+ tv_utils:notify(WinId, "TV Notification", ["Setting the poll interval", Str]);
+ haiku ->
+ ErrMsg = ["Being way too short",
+ "The interval of polling",
+ "Is simply increased."],
+ tv_utils:notify(WinId, "TV Notification", ErrMsg)
+ end,
+ clear_message_buffer(),
+ EtsreadPid ! #etsread_set_poll_interval{sender = self(),
+ interval = TimeRequired},
+
+ ProcVars#process_variables{poll_interval = TimeRequired};
+ false ->
+ ProcVars
+ end.
+
+
+
+
+
+
+clear_message_buffer() ->
+ receive
+ #dbs_subset{} ->
+ clear_message_buffer()
+ after 100 ->
+ done
+ end.
+
+
+
+
+
+max_time_required(T1, T2) when is_number(T1), is_number(T2) ->
+ if
+ T1 > T2 ->
+ T1;
+ true ->
+ T2
+ end;
+max_time_required(T1, _T2) when is_number(T1) ->
+ T1;
+max_time_required(_T1, T2) ->
+ T2.
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+too_short_pollinterval_chosen(infinity, _EtsreadTime, _DbsTime) ->
+ false;
+too_short_pollinterval_chosen(undefined, _EtsreadTime, _DbsTime) ->
+ false;
+too_short_pollinterval_chosen(PollInt, EtsreadTime, _DbsTime) when EtsreadTime >= PollInt, is_number(EtsreadTime) ->
+ true;
+too_short_pollinterval_chosen(PollInt, _EtsreadTime, DbsTime) when DbsTime >= PollInt, is_number(DbsTime) ->
+ true;
+too_short_pollinterval_chosen(_PollInt, _EtsreadTime, _DbsTime) ->
+ false.
diff --git a/lib/tv/src/tv_pc_graph_ctrl.erl b/lib/tv/src/tv_pc_graph_ctrl.erl
new file mode 100644
index 0000000000..3fc3ded565
--- /dev/null
+++ b/lib/tv/src/tv_pc_graph_ctrl.erl
@@ -0,0 +1,120 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(tv_pc_graph_ctrl).
+
+
+
+-export([create_menu/4, win_conf/2]).
+
+
+-include("tv_int_msg.hrl").
+-include("tv_pc_int_def.hrl").
+
+
+
+
+
+
+
+
+%%%*********************************************************************
+%%% EXTERNAL FUNCTIONS
+%%%*********************************************************************
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+create_menu(PwPid, MenuTitle, TitleAccPos, MenuList) ->
+ PwPid ! #pw_create_menu{sender = self(),
+ menutitle = MenuTitle,
+ title_acc_pos = TitleAccPos,
+ menulist = MenuList
+ },
+ receive
+ #pw_create_menu_cfm{} ->
+ done
+ after 10000 ->
+ exit(error)
+ end.
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function: win_conf.
+%%
+%% Return Value: None.
+%%
+%% Description: Configures all objects in the window according to new coordinates.
+%%
+%% Parameters:
+%%======================================================================
+
+
+win_conf(Msg, ProcVars) ->
+ #pc_win_conf{width = NewWidth,
+ height = NewHeight} = Msg,
+
+ #process_variables{pd_pid = PdPid,
+ window_params = WinP} = ProcVars,
+
+ #window_params{window_width = OldWindowWidth,
+ window_height = OldWindowHeight} = WinP,
+
+
+ case {NewWidth, NewHeight} of
+ {OldWindowWidth, OldWindowHeight} ->
+ ProcVars;
+ _Other ->
+ PdPid ! #pd_win_conf{sender = self(),
+ width = NewWidth,
+ height = NewHeight
+ },
+ NewWinP = WinP#window_params{window_width = NewWidth,
+ window_height = NewHeight},
+
+ ProcVars#process_variables{window_params = NewWinP}
+ end.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/tv/src/tv_pc_int_def.hrl b/lib/tv/src/tv_pc_int_def.hrl
new file mode 100644
index 0000000000..22f8dcd5d8
--- /dev/null
+++ b/lib/tv/src/tv_pc_int_def.hrl
@@ -0,0 +1,62 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%%*********************************************************************
+%%%
+%%% Description: Include file for the pc parts of the table tool.
+%%%
+%%%*********************************************************************
+
+
+-define(HEAD_FILE, pc).
+-define(GRAPH_FUNC_FILE, tv_pc_graph_ctrl).
+-define(MENU_FUNC_FILE, tv_pc_menu_handling).
+
+
+
+-define(APPLICATION_NAME, "Table Visualizer").
+-define(DEFAULT_WINDOW_WIDTH, 750).
+-define(DEFAULT_WINDOW_HEIGHT, 600).
+-define(DEFAULT_MIN_WINDOW_WIDTH, 300).
+-define(DEFAULT_MIN_WINDOW_HEIGHT, 250).
+
+
+-record(window_params, {window_id,
+ window_width,
+ window_height
+ }).
+
+
+
+-record(process_variables, {parent_pid,
+ pw_pid,
+ pd_pid,
+ dbs_pid,
+ etsread_pid,
+ current_node,
+ local_node,
+ table_id = undefined,
+ table_type = ets,
+ table_name,
+ table_protection,
+ marked_row,
+ marked_object,
+ marked_color,
+ lists_as_strings = true,
+ poll_interval = infinity, % seconds or 'infinity'
+ window_params = #window_params{}
+ }).
diff --git a/lib/tv/src/tv_pc_menu_handling.erl b/lib/tv/src/tv_pc_menu_handling.erl
new file mode 100644
index 0000000000..16195bf91f
--- /dev/null
+++ b/lib/tv/src/tv_pc_menu_handling.erl
@@ -0,0 +1,485 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%%*********************************************************************
+%%%
+%%% Description: Part of pc handling the creation of menus, as well as
+%%% treating the signals these menus results in,
+%%% when chosen.
+%%%
+%%%*********************************************************************
+
+
+-module(tv_pc_menu_handling).
+
+
+
+-export([create_menus/1,
+ exit_button/1,
+ insert_object/1,
+ delete_object/1,
+ search_object/1,
+ open_table/7,
+ set_poll_interval/1,
+ poll_table/1,
+ sort_rising_order/1,
+ sort_falling_order/1,
+ no_sorting/1,
+ lists_as_strings/1,
+ lists_as_lists/1,
+ table_info/1,
+ help_button/1,
+ otp_help_button/1,
+ get_window_title/4]).
+
+
+
+
+
+-include("tv_int_def.hrl").
+-include("tv_int_msg.hrl").
+-include("tv_pc_int_def.hrl").
+
+
+
+
+
+
+
+
+%%%*********************************************************************
+%%% EXTERNAL FUNCTIONS
+%%%*********************************************************************
+
+
+%% Shortcuts currently used, in alphabetical order:
+%%
+%% c -> "Exit"
+%% d -> "Delete Object"
+%% f -> "Sort Falling Order"
+%% h -> "Help"
+%% i -> "Table Info"
+%% n -> "No Sorting"
+%% o -> "Edit Object"
+%% p -> "Poll Table"
+%% r -> "Sort Rising Order"
+%% s -> "Search Object"
+%% v -> "Set Poll Interval"
+%% x -> "Exit"
+
+
+create_menus(PwPid) ->
+ %% Due to a bug (or some other reason), only one of the radiobuttons belonging
+ %% to a specified group can be selected, even if different processes have created
+ %% the radiobuttons! This means that, if we have started more than one tv_main
+ %% process, selecting one radiobutton will affect the radiobuttons in the other
+ %% tv_main process(es)!!! Since this is a highly undesirable bahaviour, we have to
+ %% create unique group names (i.e., atoms).
+ %% (We need to group the radiobuttons, since otherwise all created by one process
+ %% belongs to the same group, which also is undesirable...)
+ SelfStr = pid_to_list(self()),
+ SortGroup = list_to_atom("sorting" ++ SelfStr),
+ ListGroup = list_to_atom("lists" ++ SelfStr),
+
+ % Order pw to create the 'File' menu.
+ ?GRAPH_FUNC_FILE:create_menu(PwPid,
+ " File ",
+ 1,
+ [{" Table Info ", normal, table_info, 7, i},
+ separator,
+ {" Close ", normal, exit_button, 1, c}
+ ]),
+ ?GRAPH_FUNC_FILE:create_menu(PwPid,
+ " Edit ",
+ 1,
+ [{" Edit Object... ", normal, insert_object, 1, o},
+ {" Delete Object ", normal, delete_object, 1, d}
+ ]),
+ ?GRAPH_FUNC_FILE:create_menu(PwPid,
+ " View ",
+ 1,
+ [{" Lists as Lists ",{radio,false,ListGroup},lists_as_lists,10,no_char},
+ {" Lists as Strings ",{radio,true,ListGroup},lists_as_strings,10,no_char}
+ ]),
+ % Order pw to create the 'Options' menu.
+ ?GRAPH_FUNC_FILE:create_menu(PwPid,
+ " Options ",
+ 1,
+ [{" Poll Table ", normal, poll_table, 1, p},
+ {" Poll Interval... ",normal,set_poll_interval,6,no_char},
+ separator,
+ {" Search Object ", normal, search_object, 1, s},
+ separator,
+ {" Sort Ascending Order ",{radio,false,SortGroup},sort_rising_order,6,no_char},
+ {" Sort Descending Order ",{radio,false,SortGroup},sort_falling_order,6,no_char},
+ {" No Sorting ",{radio,true,SortGroup},no_sorting,1,no_char}
+ ]).
+
+
+
+
+
+exit_button(_ProcVars) ->
+ exit(normal).
+
+
+
+help_button(ProcVars) ->
+ WinP = ProcVars#process_variables.window_params,
+ HelpFile = filename:join([code:lib_dir(tv), "doc", "html", "index.html"]),
+ tool_utils:open_help(WinP#window_params.window_id, HelpFile),
+ ProcVars.
+
+
+
+
+otp_help_button(ProcVars) ->
+ WinP = ProcVars#process_variables.window_params,
+ IndexFile = filename:join([code:root_dir(), "doc", "index.html"]),
+
+ tool_utils:open_help(WinP#window_params.window_id, IndexFile),
+ ProcVars.
+
+
+
+
+table_info(ProcVars) ->
+ #process_variables{table_id = TableId,
+ current_node = Node,
+ local_node = LocalNode,
+ table_type = Type,
+ parent_pid = ParentPid} = ProcVars,
+
+ case TableId of
+ undefined ->
+ done;
+ _OtherValue ->
+ ParentPid ! {tv_start_infowin, TableId, Node, LocalNode, Type}
+ end,
+ ProcVars.
+
+
+
+sort_rising_order(ProcVars) ->
+ request_sort_settings(ProcVars#process_variables.pd_pid, true, false),
+ ProcVars.
+
+
+sort_falling_order(ProcVars) ->
+ request_sort_settings(ProcVars#process_variables.pd_pid, true, true),
+ ProcVars.
+
+
+no_sorting(ProcVars) ->
+ request_sort_settings(ProcVars#process_variables.pd_pid, false, false),
+ ProcVars.
+
+
+set_poll_interval(ProcVars) ->
+ #process_variables{etsread_pid = EtsreadPid,
+ poll_interval = PollInterval} = ProcVars,
+
+ case tv_poll_dialog:start(PollInterval) of
+ cancel ->
+ ProcVars;
+ NewPollInterval ->
+ EtsreadPid ! #etsread_set_poll_interval{sender = self(),
+ interval = NewPollInterval},
+ ProcVars#process_variables{poll_interval = NewPollInterval}
+ end.
+
+
+
+poll_table(ProcVars) ->
+ EtsreadPid = ProcVars#process_variables.etsread_pid,
+ EtsreadPid ! #etsread_poll_table{sender = self()},
+ ProcVars.
+
+
+search_object(ProcVars) ->
+ DbsPid = ProcVars#process_variables.dbs_pid,
+ DbsPid ! #dbs_search_req{sender=self()},
+ ProcVars.
+
+
+
+lists_as_strings(ProcVars) ->
+ PdPid = ProcVars#process_variables.pd_pid,
+ PdPid ! #pc_list_info{sender=self(), lists_as_strings=true},
+ DbsPid = ProcVars#process_variables.dbs_pid,
+ DbsPid ! #pc_list_info{sender=self(), lists_as_strings=true},
+ ProcVars#process_variables{lists_as_strings=true}.
+
+
+
+
+lists_as_lists(ProcVars) ->
+ PdPid = ProcVars#process_variables.pd_pid,
+ PdPid ! #pc_list_info{sender=self(), lists_as_strings=false},
+ DbsPid = ProcVars#process_variables.dbs_pid,
+ DbsPid ! #pc_list_info{sender=self(), lists_as_strings=false},
+ ProcVars#process_variables{lists_as_strings=false}.
+
+
+
+
+
+
+insert_object(ProcVars) ->
+ #process_variables{pd_pid = PdPid,
+ current_node = Node,
+ local_node = LocalNode,
+ table_type = TabType,
+ table_name = TabName,
+ table_protection = Protection,
+ window_params = WinP} = ProcVars,
+
+ case Protection of
+ public ->
+ case TabType of
+ mnesia ->
+ case catch tv_mnesia_rpc:table_info(Node, LocalNode, TabName, attributes) of
+ nodedown ->
+ handle_error(nodedown);
+ no_table ->
+ handle_error(nodedown);
+ mnesia_not_started ->
+ handle_error(mnesia_not_started);
+ {unexpected_error,Reason} ->
+ handle_error({unexpected_error,Reason});
+ AttrList ->
+ PdPid ! #pd_rec_edit{sender = self(),
+ attributes = AttrList
+ }
+ end;
+ ets ->
+ PdPid ! #pd_rec_edit{sender = self(),
+ attributes = [tuple]
+ }
+ end;
+ _OtherProtection ->
+ WinId = WinP#window_params.window_id,
+ gs:config(WinId, [beep]),
+ ErrMsg =
+ case get(error_msg_mode) of
+ normal ->
+ ["The table is protected and",
+ " cannot be edited."];
+ haiku ->
+ ["The table you see",
+ "Is cunningly protected:",
+ "You can only watch."]
+ end,
+ tv_utils:notify(WinId, "TV Notification", ErrMsg)
+ end,
+ ProcVars.
+
+
+
+
+
+
+delete_object(ProcVars) ->
+ #process_variables{dbs_pid = DbsPid,
+ table_protection = Protection,
+ marked_row = MarkedRow,
+ marked_object = MarkedObject,
+ marked_color = MarkedColor,
+ window_params = WinP} = ProcVars,
+
+ case MarkedRow of
+ undefined ->
+ done;
+ _AnyRow ->
+ case Protection of
+ public ->
+ DbsPid ! #dbs_delete_object{sender = self(),
+ object = MarkedObject,
+ color = MarkedColor,
+ obj_no = MarkedRow};
+ _OtherProtection ->
+ WinId = WinP#window_params.window_id,
+ gs:config(WinId, [beep]),
+ ErrMsg =
+ case get(error_msg_mode) of
+ normal ->
+ ["The table is protected and",
+ " cannot be edited."];
+ haiku ->
+ ["The table you see",
+ "Is cunningly protected:",
+ "You can only watch."]
+ end,
+ tv_utils:notify(WinId, "TV Notification", ErrMsg)
+ end
+ end,
+ ProcVars.
+
+
+
+
+
+
+open_table(CurrNode, LocalNode, TableId, TableType, TableName, Raise, ProcVars) ->
+ #process_variables{dbs_pid = DbsPid,
+ etsread_pid = EtsreadPid,
+ pw_pid = PwPid,
+ pd_pid = PdPid,
+ poll_interval = PollInterval,
+ window_params = WinP} = ProcVars,
+
+ case Raise of
+ true ->
+ gs:config(WinP#window_params.window_id, [raise]);
+ false ->
+ done
+ end,
+
+ {Type, KeyPos, Protection} = init_etsread(EtsreadPid, DbsPid, CurrNode, LocalNode, TableId,
+ TableType, PollInterval),
+ WinTitle = get_window_title(TableType, CurrNode, TableId, TableName),
+ PwPid ! #pw_set_window_title{sender = self(),
+ win_title = WinTitle},
+ Writable =
+ case Protection of
+ public ->
+ true;
+ _Other ->
+ false
+ end,
+ RecordName =
+ case TableType of
+ mnesia ->
+ tv_mnesia_rpc:table_info(CurrNode, LocalNode, TableId, record_name);
+ ets ->
+ undefined
+ end,
+ PdPid ! #pd_new_table{sender = self(),
+ table_type = TableType,
+ table_name = TableName,
+ record_name = RecordName,
+ writable = Writable},
+ init_dbs(DbsPid, Type, KeyPos, EtsreadPid),
+ ProcVars#process_variables{current_node = CurrNode,
+ local_node = LocalNode,
+ table_id = TableId,
+ table_type = TableType,
+ table_name = TableName,
+ table_protection = Protection}.
+
+
+
+
+
+
+get_window_title(ets, Node, TableId, TableName) ->
+ NameStr = lists:flatten(io_lib:write(TableName)),
+ TableStr = case TableId of
+ {TableName, _Pid} ->
+ NameStr;
+ TableName ->
+ NameStr;
+ _Other ->
+ lists:flatten(io_lib:write(TableId)) ++ " (" ++ NameStr ++ ")"
+ end,
+
+ WinTitleSuffix = " Node: " ++ atom_to_list(Node),
+ "ETS: " ++ TableStr ++ WinTitleSuffix;
+get_window_title(mnesia, Node, _TableId, TableName) ->
+ TableNameStr = lists:flatten(io_lib:write(TableName)),
+ WinTitleSuffix = " Node: " ++ atom_to_list(Node),
+ "Mnesia: " ++ TableNameStr ++ WinTitleSuffix.
+
+
+
+
+%%%*********************************************************************
+%%% INTERNAL FUNCTIONS
+%%%*********************************************************************
+
+
+
+init_etsread(EtsreadPid, DbsPid, Node, LocalNode, TableId, TableType, PollInterval) ->
+ EtsreadPid ! #etsread_deblock{sender = self(),
+ dbs_pid = DbsPid,
+ node = Node,
+ local_node = LocalNode,
+ table_id = TableId,
+ table_type = TableType,
+ poll_interval = PollInterval
+ },
+ receive
+ #etsread_deblock_cfm{type=Type, keypos=KeyPos, protection=Protection} ->
+ {Type, KeyPos, Protection}
+ after 10000 ->
+ exit(error)
+ end.
+
+
+
+
+init_dbs(DbsPid, Type, KeyPos, EtsreadPid) ->
+ DbsPid ! #dbs_deblock{sender = self(),
+ etsread_pid = EtsreadPid,
+ type = Type,
+ keypos = KeyPos,
+ sublist_length = ?ITEMS_TO_DISPLAY
+ },
+ receive
+ #dbs_deblock_cfm{} ->
+ done
+ after 10000 ->
+ exit(error)
+ end.
+
+
+
+
+
+
+request_sort_settings(PdPid, Sorting, Reverse) ->
+ PdPid ! #pd_get_sort_settings{sender = self(),
+ sorting = Sorting,
+ reverse = Reverse
+ }.
+
+
+
+
+
+
+handle_error(mnesia_not_started) ->
+ gs:window(errorwin, gs:start(), []),
+ gs:config(errorwin, [beep]),
+ case get(error_msg_mode) of
+ normal ->
+ tv_utils:notify(errorwin, "TV Notification", ["Mnesia not started!"]);
+ haiku ->
+ tv_utils:notify(errorwin, "TV Notification", ["Mnesia is stopped.",
+ "We wish to reach all data",
+ "But we never will."])
+ end,
+ gs:destroy(errorwin);
+handle_error(nodedown) ->
+ done; %% Main process handles this!
+handle_error({unexpected_error,Cause}) ->
+ gs:window(errorwin, gs:start(), []),
+ io:format("Unexpected error: ~p~n", [Cause]),
+ gs:config(errorwin, [beep]),
+ gs:destroy(errorwin).
+
+
diff --git a/lib/tv/src/tv_pd.erl b/lib/tv/src/tv_pd.erl
new file mode 100644
index 0000000000..ea14bf67b1
--- /dev/null
+++ b/lib/tv/src/tv_pd.erl
@@ -0,0 +1,1122 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%%*********************************************************************
+%%%
+%%% Description: Code for pd, i.e., the data displaying part of the table
+%%% tool.
+%%%
+%%%*********************************************************************
+
+
+-module(tv_pd).
+
+
+
+-export([pd/2]).
+
+
+
+
+-include("tv_int_def.hrl").
+-include("tv_int_msg.hrl").
+-include("tv_pd_int_def.hrl").
+-include("tv_pd_int_msg.hrl").
+
+
+
+
+
+%%%*********************************************************************
+%%% EXTERNAL FUNCTIONS
+%%%*********************************************************************
+
+
+
+
+%%======================================================================
+%% Function: pd.
+%%
+%% Return Value: None.
+%%
+%% Description: Process controlling the display part of the window,
+%% i.e., showing diagrams and handling the scale used for scrolling.
+%%
+%% Parameters: None.
+%%======================================================================
+
+
+pd(Master, ErrMsgMode) ->
+ process_flag(trap_exit, true),
+ put(error_msg_mode, ErrMsgMode),
+ PgPid = spawn_link(tv_pg, pg, [self()]),
+ PbPid = spawn_link(tv_pb, pb, [self()]),
+
+ ProcVars = #process_variables{master_pid = Master,
+ pg_pid = PgPid,
+ pb_pid = PbPid},
+ blocked(ProcVars).
+
+
+
+
+
+
+
+%%%********************************************************************
+%%% INTERNAL FUNCTIONS
+%%%********************************************************************
+
+
+
+
+
+%%======================================================================
+%% Function: blocked.
+%%
+%% Return Value: None.
+%%
+%% Description: When started or explicitly blocked, pd enters this state,
+%% where nothing is performed until the module explicitly is
+%% deblocked.
+%%
+%% Parameters:
+%%======================================================================
+
+
+blocked(ProcVars) ->
+ receive
+ Msg ->
+ case Msg of
+
+ #pd_deblock{} ->
+ deblock(Msg, ProcVars);
+
+
+ {error_msg_mode, Mode} ->
+ put(error_msg_mode, Mode),
+ blocked(ProcVars);
+
+
+ _Other ->
+ blocked(ProcVars)
+ end
+ end.
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function: deblock.
+%%
+%% Return Value: None.
+%%
+%% Description: When deblocked, a canvas and scale shall be created according to
+%% specification received in pd_deblock message.
+%%
+%% Parameters: Rec: received pd_deblock message.
+%%======================================================================
+
+
+
+deblock(Msg, ProcVars) ->
+ #pd_deblock{win = WindowId,
+ win_width = WindowWidth,
+ win_height = WindowHeight} = Msg,
+
+ NewProcVars = ?DISP_FUNC_FILE:init_display(WindowId, WindowWidth, WindowHeight,
+ ProcVars),
+ receive
+
+ #pg_ready{} ->
+ Sender = Msg#pd_deblock.sender,
+ Sender ! #pd_deblock_cfm{sender = self()},
+ deblocked_loop(NewProcVars)
+
+ end.
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function: deblocked_loop.
+%%
+%% Return Value: None.
+%%
+%% Description: Eternal (well, almost) loop, receiving messages and
+%% handling them.
+%%
+%% Parameters: Master: Pid to the 'pc' process.
+%% Win: Id of the window created.
+%%======================================================================
+
+
+
+deblocked_loop(ProcVars) ->
+ receive
+ Msg ->
+ case Msg of
+
+ {gs, Id, Event, Data, Args} ->
+ NewProcVars = gs_messages({Id, Event, Data, Args}, ProcVars),
+ deblocked_loop(NewProcVars);
+
+ _Other ->
+ NewProcVars = tv_messages(Msg, ProcVars),
+ deblocked_loop(NewProcVars)
+ end
+ end.
+
+
+
+
+
+tv_messages(Msg, ProcVars) ->
+ WinId = ProcVars#process_variables.window_id,
+
+ case Msg of
+ #pg_cell_marked{} ->
+ mark_busy(WinId),
+ NewProcVars = handle_cell_marked(Msg, ProcVars),
+ mark_nonbusy(WinId),
+ NewProcVars;
+
+ #pc_data{} ->
+ mark_busy(WinId),
+ NewProcVars = show_data(Msg, ProcVars),
+ mark_nonbusy(WinId),
+ NewProcVars;
+
+ #pc_list_info{} ->
+ handle_list_info(Msg, ProcVars);
+
+ #pb_col_marked{} ->
+ mark_busy(WinId),
+ NewProcVars = handle_col_marked(Msg, ProcVars),
+ mark_nonbusy(WinId),
+ NewProcVars;
+
+ #pb_row_marked{} ->
+ mark_busy(WinId),
+ NewProcVars = handle_row_marked(Msg, ProcVars),
+ mark_nonbusy(WinId),
+ NewProcVars;
+
+ #pb_new_colwidth{} ->
+ mark_busy(WinId),
+ NewProcVars = resize_column(Msg, ProcVars),
+ mark_nonbusy(WinId),
+ NewProcVars;
+
+ #pd_get_sort_settings{sorting = Sorting, reverse = Reverse} ->
+ mark_busy(WinId),
+ NewProcVars =
+ case send_sort_info_signal(Sorting, Reverse, ProcVars) of
+ ignore ->
+ ProcVars;
+ TempNewProcVars ->
+ set_sort_col(Sorting, TempNewProcVars)
+ end,
+ mark_nonbusy(WinId),
+ NewProcVars;
+
+ #pd_new_table{table_type=TabType,table_name=TabName,
+ record_name=RecName,writable=Writable} ->
+ mark_busy(WinId),
+ ToolP = ProcVars#process_variables.toolbar_params,
+ ?DISP_FUNC_FILE:update_toolbar_label(notext, ToolP, undefined, undefined, Writable),
+ mark_nonbusy(WinId),
+ ProcVars#process_variables{table_type = TabType,
+ table_name = TabName,
+ record_name = RecName,
+ writable = Writable};
+
+ #pd_win_conf{} ->
+ mark_busy(WinId),
+ NewProcVars = resize_window(Msg, ProcVars),
+ mark_nonbusy(WinId),
+ NewProcVars;
+
+ #pd_rec_edit{} ->
+ mark_busy(WinId),
+ NewProcVars = open_rec_edit(Msg, ProcVars),
+ mark_nonbusy(WinId),
+ NewProcVars;
+
+
+ {updated_object, UpdObj} ->
+ get_updated_elem2(true, UpdObj, ProcVars),
+ ProcVars;
+
+ {new_object, NewObj} ->
+ get_updated_elem2(true, NewObj, ProcVars),
+ ProcVars;
+
+ {error_msg_mode, Mode} ->
+ put(error_msg_mode, Mode),
+ ProcVars;
+
+ {'EXIT', Pid, Reason} ->
+ exit_signals({Pid, Reason}, ProcVars);
+
+ _Other ->
+ ProcVars
+ end.
+
+
+
+
+
+
+exit_signals(ExitInfo, ProcVars) ->
+ #process_variables{master_pid = MasterPid,
+ pg_pid = PgPid,
+ pb_pid = PbPid,
+ rec_pid = RecPid} = ProcVars,
+
+ case ExitInfo of
+ {MasterPid, _Reason} ->
+ exit(normal);
+ {PgPid, _Reason} ->
+ exit(normal);
+ {PbPid, _Reason} ->
+ exit(normal);
+ {RecPid, _Reason} ->
+ ProcVars#process_variables{rec_pid = undefined};
+ _Other ->
+ ProcVars
+ end.
+
+
+
+
+open_rec_edit(Msg, ProcVars) ->
+ #pd_rec_edit{attributes = AttrList} = Msg,
+
+ #process_variables{rec_pid = RecPid,
+ table_type = TabType,
+ table_name = TabName,
+ record_name = RecordName,
+ lists_as_strings = ListsAsStr,
+ mark_params = MarkP} = ProcVars,
+
+ #mark_params{marked_object = MarkedObject} = MarkP,
+
+ TabOrRecName =
+ case TabType of
+ mnesia ->
+ RecordName;
+ ets ->
+ TabName
+ end,
+
+ case RecPid of
+ undefined ->
+ NewRecPid =
+ case MarkedObject of
+ undefined ->
+ tv_rec_edit:start(TabType, TabOrRecName, AttrList, ListsAsStr,
+ get(error_msg_mode));
+ _Other ->
+ AttrVals =
+ case TabType of
+ mnesia ->
+ tl(tuple_to_list(MarkedObject));
+ ets ->
+ [MarkedObject]
+ end,
+ tv_rec_edit:start(TabType, TabOrRecName, AttrList, AttrVals, ListsAsStr,
+ get(error_msg_mode))
+ end,
+ ProcVars#process_variables{rec_pid = NewRecPid};
+ _AnyPid ->
+ RecPid ! raise,
+ ProcVars
+ end.
+
+
+
+
+
+
+
+gs_messages(Msg, ProcVars) ->
+
+ case Msg of
+
+ {editentry, keypress, _Data, ['Tab' | _T]} ->
+ gs:config(editentry, [{select, {0,100000000}}]),
+ ProcVars;
+
+ {editentry, keypress, _Data, ['Return' | _T]} ->
+ get_updated_elem(ProcVars),
+ ProcVars;
+
+ {Id, enter, {toolbar, Btn, Str}, _} ->
+ gs:config(Id, [{motion, true}]),
+ NewProcVars = handle_toolbar_buttons(Id, Btn, Str, false, 0, 0,
+ ProcVars),
+ NewProcVars;
+
+
+ {_Id, buttonpress, _Data, [3 | _Rest]} ->
+ ProcVars;
+
+
+ {_Id, buttonpress, vscale, [MouseBtn | _Tail]} ->
+ WinId = ProcVars#process_variables.window_id,
+ mark_busy(WinId),
+ NewProcVars = ?DISP_FUNC_FILE:scroll_vertically(MouseBtn, ProcVars),
+ mark_nonbusy(WinId),
+ NewProcVars;
+
+
+ % The order of messages from gs ought to be
+ % 1. 'buttonpress'
+ % 2. 'click' and
+ % 3. 'buttonrelease'
+ % However, quite often the 'click' message comes last, meaning we have
+ % to check for this. :-(
+
+ {_Id, click, vscale, [NewScalePos | _Tail]} ->
+ WinId = ProcVars#process_variables.window_id,
+ mark_busy(WinId),
+ NewProcVars = ?DISP_FUNC_FILE:perform_vertical_scroll(NewScalePos,
+ ProcVars),
+ mark_nonbusy(WinId),
+ NewProcVars;
+
+
+ {_Id, buttonpress, hscale, [MouseBtn | _Tail]} ->
+ WinId = ProcVars#process_variables.window_id,
+ mark_busy(WinId),
+ NewProcVars = ?DISP_FUNC_FILE:scroll_horizontally(MouseBtn, ProcVars),
+ mark_nonbusy(WinId),
+ NewProcVars;
+
+
+ {_Id, click, hscale, [NewScalePos | _Tail]} ->
+ WinId = ProcVars#process_variables.window_id,
+ mark_busy(WinId),
+ NewProcVars = ?DISP_FUNC_FILE:perform_horizontal_scroll(NewScalePos,
+ ProcVars),
+ mark_nonbusy(WinId),
+ NewProcVars;
+
+
+ {_Id, click, {toolbar, poll_table, _Str}, _Arg} ->
+ WinId = ProcVars#process_variables.window_id,
+ mark_busy(WinId),
+ PcPid = ProcVars#process_variables.master_pid,
+ PcPid ! #pc_poll_table{sender = self()},
+ mark_nonbusy(WinId),
+ ProcVars;
+
+
+ {_Id, click, {toolbar, select_browser, _Str}, _Arg} ->
+ PcPid = ProcVars#process_variables.master_pid,
+ PcPid ! #pc_select{sender = self()},
+ ProcVars;
+
+
+ {_Id, click, {toolbar, help_button, _Str}, _Arg} ->
+ PcPid = ProcVars#process_variables.master_pid,
+ PcPid ! #pc_help{sender = self()},
+ ProcVars;
+
+
+
+ {_Id, click, {toolbar, insert_object, _Str}, _Arg} ->
+ WinId = ProcVars#process_variables.window_id,
+ mark_busy(WinId),
+ PcPid = ProcVars#process_variables.master_pid,
+ PcPid ! {pc_edit_object, self()},
+ mark_nonbusy(WinId),
+ ProcVars;
+
+
+ {_Id, click, {toolbar, search_object, _Str}, _Arg} ->
+ WinId = ProcVars#process_variables.window_id,
+ mark_busy(WinId),
+ PcPid = ProcVars#process_variables.master_pid,
+ PcPid ! #pc_search_req{sender = self()},
+ mark_nonbusy(WinId),
+ ProcVars;
+
+
+ {_Id, click, {toolbar, sort_rising_order, _Str}, _Arg} ->
+ WinId = ProcVars#process_variables.window_id,
+ mark_busy(WinId),
+ NewProcVars = case send_sort_info_signal(true, false, ProcVars) of
+ ignore ->
+ ProcVars;
+ TempNewProcVars ->
+ set_sort_col(true, TempNewProcVars)
+ end,
+ mark_nonbusy(WinId),
+ NewProcVars;
+
+
+ {_Id, click, {toolbar, sort_falling_order, _Str}, _Arg} ->
+ WinId = ProcVars#process_variables.window_id,
+ mark_busy(WinId),
+ NewProcVars = case send_sort_info_signal(true, true, ProcVars) of
+ ignore ->
+ ProcVars;
+ TempNewProcVars ->
+ set_sort_col(true, TempNewProcVars)
+ end,
+ mark_nonbusy(WinId),
+ NewProcVars;
+
+
+ {_Id, click, {toolbar, no_sorting, _Str}, _Arg} ->
+ NewProcVars = case send_sort_info_signal(false, false, ProcVars) of
+ ignore ->
+ ProcVars;
+ TempNewProcVars ->
+ set_sort_col(false, TempNewProcVars)
+ end,
+ NewProcVars;
+
+
+ {Id, click, {toolbar, table_info, _Str}, _Arg} ->
+ ToolP = ProcVars#process_variables.toolbar_params,
+ F = ToolP#toolbar_params.pop_up_frame_id,
+ gs:config(F, [{y, -30}]),
+ gs:config(Id, [{motion, false}]),
+ PcPid = ProcVars#process_variables.master_pid,
+ PcPid ! #pc_show_table_info{sender = self()},
+ ProcVars;
+
+
+ {Id, click, {labelbtn, pop_up}, _Arg} ->
+ gs:config(Id, [{data, {labelbtn, pop_down}}]),
+ NewProcVars = ?DISP_FUNC_FILE:show_toolbar_editor(ProcVars),
+ NewProcVars;
+
+
+ {Id, click, {labelbtn, pop_down}, _Arg} ->
+ gs:config(Id, [{data, {labelbtn, pop_up}}]),
+ NewProcVars = ?DISP_FUNC_FILE:hide_toolbar_editor(ProcVars),
+ NewProcVars;
+
+
+ _OtherMessage ->
+ ProcVars
+
+ end.
+
+
+
+
+
+get_updated_elem(ProcVars) ->
+ EditedStr = gs:read(editentry, text),
+ case tv_db_search:string_to_term(EditedStr) of
+ {error, {_Reason, Msg}} ->
+ gs:config(editentry, [beep]),
+ gs:window(pdwin, gs:start(), []),
+ tv_utils:notify(pdwin, "TV Notification", Msg),
+ gs:destroy(pdwin),
+ ProcVars;
+ {ok, NewTerm} ->
+ get_updated_elem2(false, NewTerm, ProcVars)
+ end.
+
+
+
+
+
+get_updated_elem2(FromRecEdit, NewTerm, ProcVars) ->
+ #process_variables{table_type = TableType,
+ record_name = RecordName,
+ mark_params = MarkP,
+ master_pid = PcPid} = ProcVars,
+
+ #mark_params{marked_object = ObjToUpdate,
+ marked_color = ObjColor,
+ virtual_row_no = VirtualRow,
+ cell_col_no = VirtualCol} = MarkP,
+
+ case ObjToUpdate of
+ undefined ->
+ case new_object_ok(TableType, RecordName, NewTerm) of
+ true ->
+ PcPid ! #pd_new_object{sender = self(),
+ object = NewTerm},
+ ProcVars;
+ {false, Msg} ->
+ gs:window(pdwin, gs:start(), []),
+ tv_utils:notify(pdwin, "TV Notification", Msg),
+ gs:destroy(pdwin),
+ ProcVars
+ end;
+ _AnyObj ->
+ %% We need to know if the object has been deleted!
+ NewObj =
+ case VirtualCol of
+ undefined ->
+ NewTerm;
+ _AnyCol when FromRecEdit ->
+ NewTerm;
+ _AnyCol ->
+ if
+ is_tuple(ObjToUpdate) ->
+ erlang:setelement(VirtualCol, ObjToUpdate, NewTerm);
+ true ->
+ NewTerm
+ end
+ end,
+ %% Is the update OK?
+ case update_ok(TableType, ObjToUpdate, NewObj) of
+ true ->
+ PcPid ! #pd_updated_object{sender = self(),
+ object = NewObj,
+ old_object = ObjToUpdate,
+ old_color = ObjColor,
+ obj_no = VirtualRow},
+ ProcVars;
+ false ->
+ gs:window(pdwin, gs:start(), []),
+ case get(error_msg_mode) of
+ normal ->
+ tv_utils:notify(pdwin, "TV Notification",
+ ["The record name cannot be changed!"]);
+ haiku ->
+ tv_utils:notify(pdwin, "TV Notification",
+ ["The attempt to change",
+ "The permanent record name",
+ "Is simply ignored."])
+ end,
+ gs:destroy(pdwin),
+ ProcVars
+ end
+ end.
+
+
+
+
+new_object_ok(ets, _RecordName, NewTerm) when is_tuple(NewTerm) ->
+ true;
+new_object_ok(ets, _RecordName, _NewTerm) ->
+ Msg = case get(error_msg_mode) of
+ normal ->
+ ["Object is not a tuple!"];
+ haiku ->
+ ["Yes, it is a term.",
+ "It is pretty, but it's not",
+ "A proper tuple."]
+ end,
+ {false, Msg};
+new_object_ok(mnesia, RecordName, NewTerm) when is_tuple(NewTerm) ->
+ NewRecName = element(1, NewTerm),
+ case NewRecName of
+ RecordName ->
+ true;
+ _OtherName ->
+ Msg = case get(error_msg_mode) of
+ normal ->
+ ["Erroneous record name!"];
+ haiku ->
+ ["The attempt to use",
+ "An invalid record name",
+ "Is simply ignored."]
+ end,
+ {false, Msg}
+ end;
+new_object_ok(mnesia, _RecordName, _NewTerm) ->
+ Msg = case get(error_msg_mode) of
+ normal ->
+ ["Object is not a record!"];
+ haiku ->
+ ["Yes, it is a term.",
+ "It is pretty, but it's not",
+ "The proper record."]
+ end,
+ {false, Msg}.
+
+
+
+
+update_ok(ets, _ObjectToUpdate, _NewObject) ->
+ true;
+update_ok(mnesia, ObjectToUpdate, NewObject) ->
+ OldRecName = element(1, ObjectToUpdate),
+ NewRecName = element(1, NewObject),
+ case NewRecName of
+ OldRecName ->
+ true;
+ _Other ->
+ false
+ end.
+
+
+
+
+handle_toolbar_buttons(Id, Btn, Str, LabelShown, X, Y, ProcVars) ->
+ WinId = ProcVars#process_variables.window_id,
+ ToolP = ProcVars#process_variables.toolbar_params,
+ F = ToolP#toolbar_params.pop_up_frame_id,
+
+ receive
+
+ {gs, Id, motion, _Data, [NewX, NewY | _]} ->
+ handle_toolbar_buttons(Id, Btn, Str, LabelShown, NewX, NewY,
+ ProcVars);
+
+ {gs, editentry, keypress, _Data, ['Tab' | _T]} ->
+ gs:config(editentry, [{select, {0,100000000}}]),
+ handle_toolbar_buttons(Id, Btn, Str, LabelShown, X, Y, ProcVars);
+
+ {gs, editentry, keypress, _Data, ['Return' | _T]} ->
+ get_updated_elem(ProcVars),
+ handle_toolbar_buttons(Id, Btn, Str, LabelShown, X, Y, ProcVars);
+
+ {gs, Id, leave, {toolbar, Btn, Str}, _Arg} ->
+ gs:config(F, [{y, -30}]),
+ gs:config(Id, [{motion, false}]),
+ ProcVars;
+
+ {gs, Id, click, {toolbar, poll_table, _Str}, _Arg} ->
+ mark_busy(WinId),
+ gs:config(F, [{y, -30}]),
+ gs:config(Id, [{motion, false}]),
+ PcPid = ProcVars#process_variables.master_pid,
+ PcPid ! #pc_poll_table{sender = self()},
+ mark_nonbusy(WinId),
+ ProcVars;
+
+ {gs, Id, click, {toolbar, select_browser, _Str}, _Arg} ->
+ gs:config(F, [{y, -30}]),
+ gs:config(Id, [{motion, false}]),
+ PcPid = ProcVars#process_variables.master_pid,
+ PcPid ! #pc_select{sender = self()},
+ ProcVars;
+
+ {gs, Id, click, {toolbar, help_button, _Str}, _Arg} ->
+ gs:config(F, [{y, -30}]),
+ gs:config(Id, [{motion, false}]),
+ PcPid = ProcVars#process_variables.master_pid,
+ PcPid ! #pc_help{sender = self()},
+ ProcVars;
+
+ {gs, Id, click, {toolbar, insert_object, _Str}, _Arg} ->
+ mark_busy(WinId),
+ gs:config(F, [{y, -30}]),
+ gs:config(Id, [{motion, false}]),
+ PcPid = ProcVars#process_variables.master_pid,
+ PcPid ! {pc_edit_object, self()},
+ mark_nonbusy(WinId),
+ ProcVars;
+
+
+ {gs, Id, click, {toolbar, search_object, _Str}, _Arg} ->
+ mark_busy(WinId),
+ gs:config(F, [{y, -30}]),
+ gs:config(Id, [{motion, false}]),
+ PcPid = ProcVars#process_variables.master_pid,
+ PcPid ! #pc_search_req{sender = self()},
+ mark_nonbusy(WinId),
+ ProcVars;
+
+ {gs, Id, click, {toolbar, sort_rising_order, _Str}, _Arg} ->
+ mark_busy(WinId),
+ gs:config(F, [{y, -30}]),
+ gs:config(Id, [{motion, false}]),
+ NewProcVars =
+ case send_sort_info_signal(true, false, ProcVars) of
+ ignore ->
+ ProcVars;
+ TempNewProcVars ->
+ set_sort_col(true, TempNewProcVars)
+ end,
+ mark_nonbusy(WinId),
+ NewProcVars;
+
+ {gs, Id, click, {toolbar, sort_falling_order, _Str}, _Arg} ->
+ mark_busy(WinId),
+ gs:config(F, [{y, -30}]),
+ gs:config(Id, [{motion, false}]),
+ NewProcVars =
+ case send_sort_info_signal(true, true, ProcVars) of
+ ignore ->
+ ProcVars;
+ TempNewProcVars ->
+ set_sort_col(true, TempNewProcVars)
+ end,
+ mark_nonbusy(WinId),
+ NewProcVars;
+
+ {gs, Id, click, {toolbar, no_sorting, _Str}, _Arg} ->
+ gs:config(F, [{y, -30}]),
+ gs:config(Id, [{motion, false}]),
+ NewProcVars =
+ case send_sort_info_signal(false, false, ProcVars) of
+ ignore ->
+ ProcVars;
+ TempNewProcVars ->
+ set_sort_col(false, TempNewProcVars)
+ end,
+ NewProcVars;
+
+ {gs, Id, click, {toolbar, table_info, _Str}, _Arg} ->
+ gs:config(F, [{y, -30}]),
+ gs:config(Id, [{motion, false}]),
+ PcPid = ProcVars#process_variables.master_pid,
+ PcPid ! #pc_show_table_info{sender = self()},
+ ProcVars;
+
+ {'EXIT', Pid, Reason} ->
+ exit_signals({Pid, Reason}, ProcVars),
+ handle_toolbar_buttons(Id, Btn, Str, LabelShown, X, Y, ProcVars);
+
+ OtherMsg ->
+ NewProcVars = tv_messages(OtherMsg, ProcVars),
+ handle_toolbar_buttons(Id, Btn, Str, LabelShown, X, Y, NewProcVars)
+
+ after 600 ->
+ case LabelShown of
+ false ->
+ FrameP = ProcVars#process_variables.frame_params,
+ L = ToolP#toolbar_params.pop_up_label_id,
+
+ #frame_params{toolbar_frame_width = TWidth,
+ toolbar_frame_height = THeight} = FrameP,
+
+ BtnHeight = gs:read(Id, height),
+ BtnXpos = gs:read(Id, x),
+ BtnYpos = gs:read(Id, y),
+ FrameHeight = gs:read(F, height),
+ FontUsed = gs:read(L, font),
+ {StringWidth, _H} = gs:read(L, {font_wh, {FontUsed, Str}}),
+
+ Width = StringWidth + 6,
+ Xpos = BtnXpos + X,
+ LblXpos = if
+ Xpos + Width > TWidth ->
+ Xpos - Width;
+ true ->
+ Xpos
+ end,
+ % Ypos = BtnYpos + Y + 15,
+ Ypos = BtnYpos + BtnHeight + 6,
+ LblYpos = if
+ Ypos + FrameHeight > THeight ->
+ Ypos - FrameHeight - 25;
+ true ->
+ Ypos
+ end,
+ gs:config(L, [{width, Width - 2},
+ {label, {text, Str}}]),
+ gs:config(F, [{width, Width},
+ {x, LblXpos},
+ {y, LblYpos}
+ ]);
+ true ->
+ done
+ end,
+ handle_toolbar_buttons(Id, Btn, Str, true, X, Y, ProcVars)
+ end.
+
+
+
+
+
+
+set_sort_col(SortingOn, ProcVars) ->
+ #process_variables{pb_pid = PbPid,
+ mark_params = MarkP} = ProcVars,
+
+ SortCol = case SortingOn of
+ true ->
+ MarkP#mark_params.col_no;
+ false ->
+ undefined
+ end,
+ PbPid ! #pb_set_sort_col{sender = self(),
+ virtual_col = SortCol
+ },
+ remove_all_marks(SortCol, ProcVars).
+
+
+
+
+
+send_sort_info_signal(Sorting, Reverse, ProcVars) ->
+ #process_variables{master_pid = PcPid,
+ mark_params = MarkP} = ProcVars,
+
+ SortColNo = MarkP#mark_params.col_no,
+
+ PcPid ! #pc_set_sorting_mode{sender = self(),
+ sorting = Sorting,
+ reverse = Reverse,
+ sort_key_no = SortColNo
+ },
+ receive
+ #pc_set_sorting_mode_cfm{sort_key_no = FinalSortColNo} ->
+ NewMarkP = MarkP#mark_params{col_no = FinalSortColNo},
+ ProcVars#process_variables{mark_params = NewMarkP};
+
+ #pd_ignore{} ->
+ ignore
+
+ end.
+
+
+
+
+
+show_data(Msg, ProcVars) ->
+ #pc_data{scale_pos = Pos,
+ scale_range = Range,
+ list_range = MaxValue,
+ elementlist = List,
+ list_of_keys = KeyList,
+ max_elem_size = MaxElemSize,
+ marked_row = MarkedRowData} = Msg,
+
+ ?DISP_FUNC_FILE:display_data(Pos, Range, MaxValue, List, KeyList, MaxElemSize,
+ MarkedRowData, ProcVars).
+
+
+
+
+
+
+handle_list_info(Msg, ProcVars) ->
+ ListAsStr = Msg#pc_list_info.lists_as_strings,
+ PgPid = ProcVars#process_variables.pg_pid,
+ PgPid ! #pg_list_info{sender = self(),
+ lists_as_strings = ListAsStr},
+ ProcVars#process_variables{lists_as_strings = ListAsStr}.
+
+
+
+
+
+handle_col_marked(Msg, ProcVars) ->
+ #pb_col_marked{col_marked = ColMarked,
+ virtual_col = VirtualCol} = Msg,
+
+ #process_variables{master_pid = MasterPid,
+ pg_pid = PgPid,
+ rec_pid = RecPid,
+ writable = Writable,
+ toolbar_params = ToolP,
+ mark_params = MarkP} = ProcVars,
+ SortCol = MarkP#mark_params.sort_col_no,
+
+ PgPid ! #pg_remove_marks{sender = self()},
+
+ case ColMarked of
+ true ->
+ PgPid ! #pg_col_marked{sender = self(),
+ virtual_col = VirtualCol};
+ false ->
+ done
+ end,
+
+ MasterPid ! #pc_marked_row{sender = self(),
+ row_no = undefined,
+ object = undefined,
+ color = undefined
+ },
+
+ ?DISP_FUNC_FILE:update_toolbar_label(notext, ToolP, undefined, undefined, Writable),
+ send_to_rec_edit(RecPid, insert_mode),
+
+ NewMarkP =
+ if
+ ColMarked ->
+ MarkP#mark_params{col_no = VirtualCol};
+ true ->
+ if
+ SortCol =:= undefined ->
+ MarkP;
+ true ->
+ MarkP#mark_params{col_no = SortCol}
+ end
+ end,
+ ProcVars#process_variables{mark_params = NewMarkP}.
+
+
+
+
+
+
+remove_all_marks(SortCol, ProcVars) ->
+ #process_variables{master_pid = MasterPid,
+ pb_pid = PbPid,
+ pg_pid = PgPid,
+ toolbar_params = ToolP} = ProcVars,
+
+ PgPid ! #pg_remove_marks{sender = self()},
+ PbPid ! #pb_remove_marks{sender = self()},
+ MasterPid ! #pc_marked_row{sender = self(),
+ row_no = undefined,
+ object = undefined,
+ color = undefined
+ },
+%% ?DISP_FUNC_FILE:update_toolbar_label(notext, ToolP, undefined, undefined, Writable),
+ ?DISP_FUNC_FILE:update_toolbar_editor(ToolP#toolbar_params.editor_id, notext),
+%% send_to_rec_edit(RecPid, insert_mode),
+ ProcVars#process_variables{mark_params = #mark_params{sort_col_no = SortCol,
+ cell_col_no = undefined,
+ row_no = undefined,
+ virtual_row_no = undefined,
+ marked_object = undefined,
+ marked_color = undefined}
+ }.
+
+
+
+
+
+
+handle_row_marked(Msg, ProcVars) ->
+ #pb_row_marked{row_marked = RowMarked,
+ virtual_row = VirtualRow,
+ real_row = RealRow} = Msg,
+
+ #process_variables{master_pid = MasterPid,
+ rec_pid = RecPid,
+ pg_pid = PgPid,
+ data_list = DataList,
+ color_list = ColorList,
+ writable = Writable,
+ toolbar_params = ToolP,
+ mark_params = MarkP} = ProcVars,
+
+ PgPid ! #pg_remove_marks{sender = self()},
+
+ case RowMarked of
+ true ->
+ PgPid ! #pg_row_marked{sender = self(),
+ virtual_row = VirtualRow};
+ false ->
+ done
+ end,
+
+ {DataElement, NewMarkP} =
+ if
+ RowMarked ->
+ {MarkedRowOrCol, RowObj} =
+ ?DISP_FUNC_FILE:get_data_element(row, DataList, RealRow, undefined),
+
+ MarkedRowColor =
+ case MarkedRowOrCol of
+ notext ->
+ undefined;
+ _OtherObject ->
+ lists:nth(RealRow, ColorList)
+ end,
+ MasterPid ! #pc_marked_row{sender = self(),
+ row_no = VirtualRow,
+ object = RowObj,
+ color = MarkedRowColor
+ },
+ send_to_rec_edit(RecPid, {update_mode,RowObj}),
+ {MarkedRowOrCol, MarkP#mark_params{virtual_row_no = VirtualRow,
+ row_no = RealRow,
+ cell_col_no = undefined,
+ col_no = undefined,
+ marked_object = RowObj,
+ marked_color = MarkedRowColor}};
+ true ->
+ MasterPid ! #pc_marked_row{sender = self(),
+ row_no = undefined,
+ object = undefined,
+ color = undefined
+ },
+ send_to_rec_edit(RecPid, insert_mode),
+ {notext, MarkP#mark_params{virtual_row_no = undefined,
+ row_no = undefined,
+ cell_col_no = undefined,
+ col_no = undefined,
+ marked_object = undefined,
+ marked_color = undefined}}
+ end,
+
+ ?DISP_FUNC_FILE:update_toolbar_label(DataElement, ToolP, VirtualRow,
+ undefined, Writable),
+ ProcVars#process_variables{mark_params = NewMarkP}.
+
+
+
+
+
+handle_cell_marked(Msg, ProcVars) ->
+ #pg_cell_marked{cell_marked = CellMarked,
+ virtual_col = VirtualCol,
+ real_row = RealRow,
+ virtual_row = VirtualRow} = Msg,
+
+ % We are interested in the real row number, since we only have a sublist
+ % stored in pd.
+ ?DISP_FUNC_FILE:marked_cell(CellMarked, VirtualCol, RealRow, VirtualRow,
+ ProcVars).
+
+
+
+
+resize_window(Msg, ProcVars) ->
+ #pd_win_conf{width = NewWindowWidth,
+ height = NewWindowHeight} = Msg,
+
+ ?DISP_FUNC_FILE:resize_display(NewWindowWidth, NewWindowHeight, ProcVars).
+
+
+
+
+resize_column(Msg, ProcVars) ->
+ #pb_new_colwidth{real_col = RealCol,
+ virtual_col = VirtualCol,
+ xdiff = Xdiff} = Msg,
+
+ ?DISP_FUNC_FILE:resize_column(RealCol, VirtualCol, Xdiff, ProcVars).
+
+
+
+
+mark_busy(Id) ->
+ gs:config(Id, [{cursor, busy}]).
+
+
+
+
+mark_nonbusy(Id) ->
+ gs:config(Id, [{cursor, arrow}]).
+
+
+
+
+send_to_rec_edit(undefined, _Msg) ->
+ done;
+send_to_rec_edit(RecPid, Msg) ->
+ RecPid ! Msg.
+
diff --git a/lib/tv/src/tv_pd_display.erl b/lib/tv/src/tv_pd_display.erl
new file mode 100644
index 0000000000..f5a30cb640
--- /dev/null
+++ b/lib/tv/src/tv_pd_display.erl
@@ -0,0 +1,1059 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%%*********************************************************************
+%%%
+%%% Description: Part of pd controlling the graphics.
+%%%
+%%%*********************************************************************
+
+-module(tv_pd_display).
+
+
+
+
+-export([init_display/4,
+ display_data/8,
+ resize_display/3,
+ resize_column/4,
+ scroll_horizontally/2,
+ scroll_vertically/2,
+ perform_horizontal_scroll/2,
+ perform_vertical_scroll/2,
+ marked_cell/5,
+ update_toolbar_label/5,
+ update_toolbar_editor/2,
+ get_data_element/4,
+ hide_toolbar_editor/1,
+ show_toolbar_editor/1]).
+
+
+
+
+
+-include("tv_int_def.hrl").
+-include("tv_int_msg.hrl").
+-include("tv_pd_int_def.hrl").
+-include("tv_pd_int_msg.hrl").
+
+
+
+
+
+
+
+%%%*********************************************************************
+%%% EXTERNAL FUNCTIONS
+%%%*********************************************************************
+
+
+
+%%======================================================================
+%% Function: init_display.
+%%
+%% Return Value: Id of the display (here:canvas) created.
+%%
+%% Description: Creates the canvas and the scale.
+%%
+%% Parameters: Id of the window the display shall be created in.
+%%======================================================================
+
+
+init_display(WindowId, WindowWidth, WindowHeight, ProcVars) ->
+ % Get all necessary window parameters!
+ #process_variables{pg_pid = PgPid,
+ pb_pid = PbPid,
+ frame_params = FrameP,
+ scale_params = ScaleP,
+ toolbar_params = ToolP} = ProcVars,
+
+ NewFrameP = tv_pd_frames:create_display_frames(WindowId, WindowWidth,
+ WindowHeight, FrameP),
+
+ #frame_params{grid_frame_id = GridParentId,
+ grid_frame_width = GridParentWidth,
+ grid_frame_height = GridParentHeight} = NewFrameP,
+
+ PgPid ! #pg_init_grid{sender = self(),
+ parent_id = GridParentId,
+ width = GridParentWidth,
+ height = GridParentHeight,
+ xpos = ?VBTN_WIDTH - 1,
+ ypos = ?KEY_MARK_AREA_HEIGHT + ?HBTN_HEIGHT - 1,
+ nof_rows = ?NOF_GRIDROWS,
+ row_height = ?ROW_HEIGHT
+ },
+
+
+ receive
+ #pg_col_info{first_col_shown = FirstColShown,
+ width_of_cols_shown = ColsShown,
+ nof_rows_shown = NofRowsShown} ->
+
+ PbPid ! #pb_init_btns{sender = self(),
+ parent_id = GridParentId,
+ parent_width = GridParentWidth,
+ parent_height = GridParentHeight,
+ ypos = ?KEY_MARK_AREA_HEIGHT,
+ hbtn_height = ?HBTN_HEIGHT,
+ resbtn_width = ?RESBTN_WIDTH,
+ vbtn_width = ?VBTN_WIDTH,
+ nof_rows = ?NOF_GRIDROWS,
+ row_height = ?ROW_HEIGHT,
+ first_col_shown = FirstColShown,
+ cols_shown = ColsShown
+ },
+
+ NewScaleP = tv_pd_scale:init_scale(NewFrameP, ScaleP),
+
+ NewToolP = init_toolbar(NewFrameP, ToolP),
+
+ ProcVars#process_variables{window_id = WindowId,
+ window_width = WindowWidth,
+ window_height = WindowHeight,
+ first_col_shown = FirstColShown,
+ nof_rows_shown = NofRowsShown,
+ cols_shown = ColsShown,
+ frame_params = NewFrameP,
+ scale_params = NewScaleP,
+ toolbar_params = NewToolP
+ }
+ end.
+
+
+
+
+
+resize_display(NewWinW, NewWinH, ProcVars) ->
+ #process_variables{pg_pid = PgPid,
+ pb_pid = PbPid,
+ color_list = ColorList,
+ first_row_shown = FirstRowShown,
+ frame_params = FrameP,
+ scale_params = ScaleP,
+ toolbar_params = ToolP} = ProcVars,
+
+ NewFrameP = tv_pd_frames:resize_display_frames(NewWinW, NewWinH, FrameP),
+
+ #frame_params{grid_frame_width = GridParentWidth,
+ grid_frame_height = GridParentHeight} = NewFrameP,
+
+ PgPid ! #pg_resize_grid{sender = self(),
+ width = GridParentWidth,
+ height = GridParentHeight
+ },
+
+ receive
+ #pg_col_info{first_col_shown = FirstColShown,
+ width_of_cols_shown = ColsShown,
+ nof_rows_shown = NofRowsShown} ->
+
+ PbPid ! #pb_update_hbtns{sender = self(),
+ parent_width = GridParentWidth,
+ parent_height = GridParentHeight,
+ first_col_shown = FirstColShown,
+ cols_shown = ColsShown
+ },
+
+ PbPid ! #pb_update_vbtns{sender = self(),
+ color_list = ColorList,
+ first_row_shown = FirstRowShown,
+ nof_rows_shown = NofRowsShown,
+ blinking_enabled = false
+ },
+
+ NewScaleP = tv_pd_scale:resize_scale(NewFrameP, ScaleP),
+
+ NewToolP = resize_toolbar(NewFrameP, ToolP),
+
+ ProcVars#process_variables{window_width = NewWinW,
+ window_height = NewWinH,
+ first_col_shown = FirstColShown,
+ nof_rows_shown = NofRowsShown,
+ cols_shown = ColsShown,
+ frame_params = NewFrameP,
+ scale_params = NewScaleP,
+ toolbar_params = NewToolP
+ }
+ end.
+
+
+
+
+
+
+
+resize_column(RealCol, VirtualCol, Xdiff, ProcVars) ->
+ #process_variables{pg_pid = PgPid,
+ pb_pid = PbPid,
+ frame_params = FrameP} = ProcVars,
+
+ PgPid ! #pg_resize_grid_col{sender = self(),
+ real_col_no = RealCol,
+ virtual_col_no = VirtualCol,
+ xdiff = Xdiff
+ },
+
+ #frame_params{grid_frame_width = GridFrameWidth,
+ grid_frame_height = GridFrameHeight} = FrameP,
+ receive
+ #pg_col_info{first_col_shown = FirstColShown,
+ width_of_cols_shown = ColsShown,
+ nof_rows_shown = NofRowsShown} ->
+
+ PbPid ! #pb_update_hbtns{parent_width = GridFrameWidth,
+ parent_height = GridFrameHeight,
+ first_col_shown = FirstColShown,
+ cols_shown = ColsShown
+ },
+
+ ProcVars#process_variables{first_col_shown = FirstColShown,
+ nof_rows_shown = NofRowsShown,
+ cols_shown = ColsShown
+ }
+ end.
+
+
+
+
+
+
+
+
+display_data(Pos, Range, _MaxValue, List, KeyList, MaxElemSize, MarkedRowData,ProcVars) ->
+ #process_variables{master_pid = PcPid,
+ rec_pid = RecPid,
+ pg_pid = PgPid,
+ pb_pid = PbPid,
+ writable = Writable,
+ sorting_on = SortingOn,
+ nof_rows_shown = NofRowsShown,
+ scale_params = ScaleP,
+ toolbar_params = ToolP,
+ mark_params = MarkP} = ProcVars,
+
+ {DataList, ColorList} = split_dblist(List, [], []),
+
+ NewMarkP = update_marks(SortingOn, DataList, ColorList, MarkedRowData, Pos, NofRowsShown,
+ Writable, Range, PcPid, PgPid, RecPid, ToolP, MarkP),
+
+ PgPid ! #pg_data{sender = self(),
+ data = DataList,
+ first_row_shown = Pos
+ },
+
+ PbPid ! #pb_update_vbtns{sender = self(),
+ color_list = ColorList,
+ first_row_shown = Pos,
+ nof_rows_shown = NofRowsShown,
+ blinking_enabled = false
+ },
+
+ PbPid ! #pb_key_info{sender = self(),
+ list_of_keys = KeyList
+ },
+
+ % May be new number of elements in the total list!
+ ?SCALE_FUNC_FILE:set_scale_range(vscale, Range, ScaleP),
+ % May be new vertical scale position required!
+ NewScaleP = ?SCALE_FUNC_FILE:set_scale_pos(vscale, Pos, ScaleP),
+ % May be new maximum size of elements!
+ ?SCALE_FUNC_FILE:set_scale_range(hscale, {1, MaxElemSize}, NewScaleP),
+
+ ProcVars#process_variables{data_list = DataList,
+ color_list = ColorList,
+ first_row_shown = Pos,
+ initialising = false,
+ scale_params = NewScaleP,
+ mark_params = NewMarkP
+ }.
+
+
+
+
+
+
+
+scroll_vertically(MouseBtn, ProcVars) ->
+ #process_variables{scale_params = ScaleP} = ProcVars,
+
+ OldScalePos = ScaleP#scale_params.vscale_pos,
+ NewScalePos = get_new_scalepos(MouseBtn, OldScalePos),
+
+ case NewScalePos of
+ OldScalePos ->
+ ProcVars;
+ NewValue ->
+ perform_vertical_scroll(NewValue, ProcVars)
+ end.
+
+
+
+
+
+
+
+scroll_horizontally(MouseBtn, ProcVars) ->
+ #process_variables{scale_params = ScaleP} = ProcVars,
+
+ OldScalePos = ScaleP#scale_params.hscale_pos,
+ NewScalePos = get_new_scalepos(MouseBtn, OldScalePos),
+
+ case NewScalePos of
+ OldScalePos ->
+ ProcVars;
+ NewValue ->
+ perform_horizontal_scroll(NewValue, ProcVars)
+ end.
+
+
+
+
+
+
+
+
+perform_vertical_scroll(NewScalePos, ProcVars) ->
+ #process_variables{master_pid = MasterPid,
+ initialising = Init,
+ scale_params = ScaleP} = ProcVars,
+
+ %% To avoid erroneous scrollbar signals during creation of the display.
+ case Init of
+ true ->
+ done;
+ false ->
+ MasterPid ! #pc_data_req{sender = self(),
+ element = NewScalePos,
+ nof_elements = ?NOF_GRIDROWS}
+ end,
+
+ % Since the order of click/buttonrelease messages isn't
+ % precise, set the scale to the returned pos (may otherwise
+ % differ one unit).
+ NewScaleP = ?SCALE_FUNC_FILE:set_scale_pos(vscale,
+ NewScalePos,
+ ScaleP),
+
+ ProcVars#process_variables{scale_params = NewScaleP}.
+
+
+
+
+
+
+
+perform_horizontal_scroll(NewScalePos, ProcVars) ->
+ #process_variables{pg_pid = PgPid,
+ pb_pid = PbPid,
+ frame_params = FrameP,
+ scale_params = ScaleP} = ProcVars,
+
+ % Since the order of click/buttonrelease messages isn't
+ % precise, set the scale to the returned pos (may otherwise
+ % differ one unit).
+ NewScaleP = ?SCALE_FUNC_FILE:set_scale_pos(hscale,
+ NewScalePos,
+ ScaleP),
+
+ PgPid ! #pg_horizontal_scroll{sender = self(),
+ leftmost_virtual_col = NewScalePos
+ },
+
+ #frame_params{grid_frame_width = GridFrameWidth,
+ grid_frame_height = GridFrameHeight} = FrameP,
+ receive
+ #pg_col_info{first_col_shown = FirstColShown,
+ width_of_cols_shown = ColsShown,
+ nof_rows_shown = NofRowsShown} ->
+
+ PbPid ! #pb_update_hbtns{parent_width = GridFrameWidth,
+ parent_height = GridFrameHeight,
+ first_col_shown = FirstColShown,
+ cols_shown = ColsShown
+ },
+
+ ProcVars#process_variables{first_col_shown = FirstColShown,
+ cols_shown = ColsShown,
+ nof_rows_shown = NofRowsShown,
+ scale_params = NewScaleP
+ }
+ end.
+
+
+
+
+
+
+
+
+marked_cell(true, VirtualCol, RealRow, VirtualRow, ProcVars) ->
+ #process_variables{master_pid = MasterPid,
+ rec_pid = RecPid,
+ data_list = DataList,
+ color_list = ColorList,
+ writable = Writable,
+ mark_params = MarkP,
+ toolbar_params = ToolP} = ProcVars,
+
+ {DataElement, MarkedRowObject} = get_data_element(cell, DataList, RealRow, VirtualCol),
+ update_toolbar_label(DataElement, ToolP, VirtualRow, VirtualCol, Writable),
+ send_to_rec_edit(RecPid, {update_mode,MarkedRowObject}),
+
+ MarkedRowColor = lists:nth(RealRow, ColorList),
+
+ MasterPid ! #pc_marked_row{sender = self(),
+ row_no = VirtualRow,
+ object = MarkedRowObject,
+ color = MarkedRowColor
+ },
+ NewMarkP = MarkP#mark_params{cell_col_no = VirtualCol,
+ row_no = RealRow,
+ virtual_row_no = VirtualRow,
+ marked_object = MarkedRowObject,
+ marked_color = MarkedRowColor
+ },
+ ProcVars#process_variables{mark_params = NewMarkP
+ };
+marked_cell(false, VirtualCol, _RealRow, VirtualRow, ProcVars) ->
+ #process_variables{master_pid = MasterPid,
+ rec_pid = RecPid,
+ pb_pid = PbPid,
+ writable = Writable,
+ mark_params = MarkP} = ProcVars,
+
+ PbPid ! #pb_remove_marks{sender = self()},
+
+ case VirtualRow of
+ undefined ->
+ done;
+ _AnyRow ->
+ update_toolbar_label(notext, ProcVars#process_variables.toolbar_params,
+ VirtualRow, VirtualCol, Writable),
+ send_to_rec_edit(RecPid, insert_mode)
+ end,
+ MasterPid ! #pc_marked_row{sender = self(),
+ %% row_no = VirtualRow
+ row_no = undefined,
+ object = undefined,
+ color = undefined
+ },
+ NewMarkP = MarkP#mark_params{cell_col_no = undefined,
+ row_no = undefined,
+ virtual_row_no = undefined,
+ marked_object = undefined,
+ marked_color = undefined
+ },
+ ProcVars#process_variables{mark_params = NewMarkP
+ }.
+
+
+
+
+
+
+
+
+update_toolbar_label(notext, ToolP, _VirtualRowNo, _VirtualColNo, Writable) ->
+ #toolbar_params{row_col_label_id = RowColLblId,
+ fg_label_id = FgLblId,
+ editor_id = EdId} = ToolP,
+ gs:config(RowColLblId, [{label, {text,""}}]),
+ gs:config(FgLblId, [{enable,true}]),
+ gs:config(FgLblId, [{delete, {0,1000000000}}]),
+ gs:config(FgLblId, [{insert, {0, ""}}]),
+ case Writable of
+ true ->
+ gs:config(FgLblId, [{cursor, text},
+ {setfocus, true}]);
+ false ->
+ gs:config(FgLblId, [{enable, false},
+ {cursor, arrow},
+ {setfocus, false}])
+ end,
+ update_toolbar_editor(EdId, notext);
+update_toolbar_label({DataToShow}, ToolP, VirtualRowNo, VirtualColNo, Writable) ->
+ #toolbar_params{row_col_label_id = RowColLblId,
+ fg_label_id = FgLblId,
+ editor_id = EdId} = ToolP,
+
+ case VirtualRowNo of
+ undefined ->
+ %% No row - nothing can possibly be marked!
+ case Writable of
+ true ->
+ gs:config(FgLblId, [{setfocus,true},
+ {cursor, text}]);
+ false ->
+ gs:config(FgLblId, [{enable,false},
+ {setfocus, false},
+ {cursor, arrow}])
+ end;
+ _AnyRow ->
+ RowStr = "R" ++ integer_to_list(VirtualRowNo),
+ ColStr = case VirtualColNo of
+ undefined ->
+ "";
+ _AnyCol ->
+ " x C" ++ integer_to_list(VirtualColNo)
+ end,
+ DataStr = lists:flatten(tv_io_lib:format("~p", [DataToShow])),
+ gs:config(RowColLblId, [{label, {text,RowStr++ColStr}}]),
+ gs:config(FgLblId, [{enable,true}]),
+ gs:config(FgLblId, [{delete, {0,10000000}}]),
+ gs:config(FgLblId, [{insert, {0,DataStr}}]),
+ case Writable of
+ true ->
+ gs:config(FgLblId, [{setfocus,true},
+ {cursor, text}]);
+ false ->
+ gs:config(FgLblId, [{enable,false},
+ {setfocus, false},
+ {cursor, arrow}])
+ end,
+ update_toolbar_editor(EdId, {DataToShow})
+ end.
+
+
+
+
+
+
+
+
+get_data_element(row, DataList, RowNo, _VirtualCol) ->
+ if
+ length(DataList) < RowNo ->
+ {notext, undefined};
+ true ->
+ RowObj = lists:nth(RowNo, DataList),
+ {{RowObj}, RowObj}
+ end;
+get_data_element(cell, DataList, RowNo, ColNo) ->
+ %% It's the responsibility of pg to ensure that there is a data item
+ %% for the cell marked, meaning we don't *have* to check the length of
+ %% the data items. However, since we in the future may want to edit
+ %% even empty cells, we check it!
+ if
+ length(DataList) < RowNo ->
+ {notext, undefined};
+ true ->
+ DataItem = lists:nth(RowNo, DataList),
+ if
+ is_tuple(DataItem) ->
+ if size(DataItem) < ColNo ->
+ {notext, DataItem};
+ true ->
+ {{element(ColNo, DataItem)}, DataItem}
+ end;
+ true ->
+ {{DataItem}, DataItem}
+ end
+ end.
+
+
+
+
+
+
+
+
+show_toolbar_editor(ProcVars) ->
+ #process_variables{frame_params = FrameP,
+ toolbar_params = ToolP} = ProcVars,
+
+ #frame_params{toolbar_frame_height = THeight} = FrameP,
+
+ #toolbar_params{editor_frame_id = EdFrameId} = ToolP,
+
+ Xpos = 0,
+ Ypos = THeight - 8 - ?ROW_COL_LBL_HEIGHT + 1,
+ gs:config(EdFrameId, [{x, Xpos},
+ {y, Ypos}
+ ]),
+ ProcVars.
+
+
+
+
+
+
+
+
+hide_toolbar_editor(ProcVars) ->
+ #process_variables{toolbar_params = ToolP} = ProcVars,
+
+ #toolbar_params{editor_frame_id = EdFrameId} = ToolP,
+
+ Xpos = 0,
+ Ypos = (-1) * gs:read(EdFrameId, height) - 50,
+ gs:config(EdFrameId, [{x, Xpos},
+ {y, Ypos}
+ ]),
+ ProcVars.
+
+
+
+
+
+
+%%%********************************************************************
+%%% INTERNAL FUNCTIONS
+%%%********************************************************************
+
+
+
+
+
+update_toolbar_editor(EdId, notext) ->
+ gs:config(EdId, [{enable, true}]),
+ gs:config(EdId, [clear]),
+ gs:config(EdId, [{enable, false}]);
+update_toolbar_editor(EdId, {DataToShow}) ->
+ Str = io_lib:format("~n~p~n", [DataToShow]),
+ gs:config(EdId, [{enable, true}]),
+ gs:config(EdId, [clear]),
+ gs:config(EdId, [{overwrite, {insert, Str}}]),
+ gs:config(EdId, [{enable, false}]).
+
+
+
+
+
+
+update_marks(true, _DataList, _ColorList, _MarkedRowData,
+ _Pos, _NofRowsShown, _Writable, _Range, PcPid, PgPid, RecPid, ToolP, MarkP) ->
+ PgPid ! #pg_remove_marks{sender = self()},
+ %% Too much trouble trying to find the marked object again!
+ %% On the other hand, is the mark based on the row number
+ %% or the row content? Probably different strategies now, depending
+ %% on where in the code we are... :-(
+ %% update_toolbar_label(notext, ToolP, undefined, undefined, Writable),
+ update_toolbar_editor(ToolP#toolbar_params.editor_id, notext),
+ send_to_rec_edit(RecPid, insert_mode),
+ PcPid ! #pc_marked_row{sender = self(),
+ row_no = undefined,
+ object = undefined,
+ color = undefined
+ },
+ MarkP#mark_params{cell_col_no = undefined,
+ row_no = undefined,
+ virtual_row_no = undefined,
+ marked_object = undefined,
+ marked_color = undefined
+ };
+update_marks(false, DataList, ColorList, MarkedRowData,
+ Pos, NofRowsShown, Writable, Range, PcPid, PgPid, RecPid, ToolP, MarkP) ->
+ #mark_params{cell_col_no = CellColNo,
+ virtual_row_no = VirtualRowNo} = MarkP,
+
+ % Marked row data contains the color also!
+ {RowData, RowColors} = split_dblist(MarkedRowData, [], []),
+
+ case VirtualRowNo of
+ undefined ->
+ MarkP;
+ _AnyRow ->
+ if
+ VirtualRowNo > element(2, Range) ->
+ %% Mark outside the existing list! Uh-uh, remove the mark immediately! 8-0
+ update_marks(true, DataList, ColorList, MarkedRowData, Pos, NofRowsShown,
+ Writable, Range, PcPid, PgPid, RecPid, ToolP, MarkP);
+ true ->
+ {DataElement, RowObj} = choose_data_to_show(VirtualRowNo, CellColNo, RowData,
+ DataList, Pos),
+ {_, RowObjColor} = choose_data_to_show(VirtualRowNo, CellColNo, RowColors,
+ ColorList, Pos),
+ case DataElement of
+ notext ->
+ %% send_to_rec_edit(RecPid, insert_mode);
+ done;
+ _OtherElement ->
+ %% send_to_rec_edit(RecPid, {update_mode, RowObj})
+ send_to_rec_edit(RecPid, {reset_info, RowObj})
+ end,
+
+ %% case RowObj of
+ %% OldMarkedObj ->
+ %% done;
+ %% _NewObj ->
+ %% update_toolbar_label(DataElement, ToolP, VirtualRowNo,
+ %% CellColNo, Writable)
+ %% end,
+
+ %% update_toolbar_label(DataElement,ToolP,VirtualRowNo,CellColNo,Writable),
+
+ update_toolbar_editor(ToolP#toolbar_params.editor_id, DataElement),
+ MarkP#mark_params{marked_object = RowObj,
+ marked_color = RowObjColor}
+ end
+ end.
+
+
+
+
+
+choose_data_to_show(VirtualRowNo, undefined, _RowData, DataList, Pos) when VirtualRowNo >= Pos, VirtualRowNo =< (Pos + length(DataList) - 1) ->
+ get_data_element(row, DataList, VirtualRowNo - Pos + 1, undefined);
+choose_data_to_show(_VirtualRowNo, undefined, RowData, _DataList, _Pos) ->
+ get_data_element(row, RowData, 1, undefined);
+choose_data_to_show(VirtualRowNo, CellColNo, _RowData, DataList, Pos)
+ when VirtualRowNo >= Pos, VirtualRowNo =< (Pos + length(DataList) - 1) ->
+ get_data_element(cell, DataList, VirtualRowNo - Pos + 1, CellColNo);
+choose_data_to_show(_VirtualRowNo, CellColNo, RowData, _DataList, _Pos) ->
+ get_data_element(cell, RowData, 1, CellColNo).
+
+
+
+
+
+
+get_new_scalepos(Btn, LastScalePos) ->
+ receive
+ {gs, _Id, click, _Data, [NewScalePos | _T]} ->
+ get_new_scalepos(Btn, NewScalePos);
+
+ {gs, _Id, buttonrelease, _Data, [Btn | _T]} ->
+ LastScalePos;
+
+ {gs, _Id, buttonrelease, _Data, _Args} ->
+ get_new_scalepos(Btn, LastScalePos);
+
+ {gs, _Id, buttonpress, _Data, _Args} ->
+ get_new_scalepos(Btn, LastScalePos)
+
+ end.
+
+
+
+
+
+
+
+split_dblist([], DataAcc, ColorAcc) ->
+ {lists:reverse(DataAcc), lists:reverse(ColorAcc)};
+split_dblist([{Data, Color} | Tail], DataAcc, ColorAcc) ->
+ split_dblist(Tail, [Data | DataAcc], [Color | ColorAcc]).
+
+
+
+
+
+
+
+
+init_toolbar(FrameP, ToolP) ->
+ #frame_params{display_id = DispId,
+ toolbar_frame_id = TId,
+ toolbar_frame_width = TWidth,
+ toolbar_frame_height = THeight,
+ grid_frame_width = GWidth} = FrameP,
+
+ NewToolP = init_toolbar_btns(TId, ToolP),
+ {RowColLblId, BgLabelId, FgLabelId, BtnId} =
+ init_toolbar_label(TId, TWidth, THeight, GWidth),
+
+ PopUpFrame = gs:frame(TId, [{width, 80},
+ {height, 20},
+ {x, 0},
+ {y, -30},
+ {bg, {0, 0, 0}}
+ ]),
+
+ PopUpLabel = gs:label(PopUpFrame, [{width, 78},
+ {height, 18},
+ {bg, {255,255,190}},
+ {x,1},
+ {y,1},
+ {align, center},
+ {label, {text,""}},
+ {font,{screen,12}}]),
+
+ {EditorFrameId, EditorId} = init_toolbar_editor(DispId, TWidth, THeight),
+
+ NewToolP#toolbar_params{parent_id = TId,
+ row_col_label_id = RowColLblId,
+ bg_label_id = BgLabelId,
+ fg_label_id = FgLabelId,
+ label_btn_id = BtnId,
+ pop_up_frame_id = PopUpFrame,
+ pop_up_label_id = PopUpLabel,
+ editor_frame_id = EditorFrameId,
+ editor_id = EditorId
+ }.
+
+
+
+
+
+
+init_toolbar_btns(TId, ToolP) ->
+ PicDir = code:priv_dir(tv),
+% PicDir = "../priv",
+ % Toolbar btns are 25x25, the bitmaps are 20x20.
+ create_one_toolbar_btn(TId, 1, PicDir ++ "/edit1.xbm",
+ {toolbar, insert_object, "Edit Object"}),
+ create_one_toolbar_btn(TId, 3, PicDir ++ "/search.xbm",
+ {toolbar, search_object, "Search Object"}),
+ create_one_toolbar_btn(TId, 5, PicDir ++ "/sort.xbm",
+ {toolbar, sort_rising_order, "Sort Ascending"}),
+ create_one_toolbar_btn(TId, 6, PicDir ++ "/no_sort.xbm",
+ {toolbar, no_sorting,"No Sorting"}),
+ create_one_toolbar_btn(TId, 7, PicDir ++ "/sort_reverse.xbm",
+ {toolbar, sort_falling_order,"Sort Descending"}),
+ create_one_toolbar_btn(TId, 9, PicDir ++ "/poll.xbm",
+ {toolbar, poll_table,"Poll Table"}),
+ create_one_toolbar_btn(TId, 11, PicDir ++ "/info.xbm",
+ {toolbar, table_info,"Table Info"}),
+ create_one_toolbar_btn(TId, 13, PicDir ++ "/help.xbm",
+ {toolbar, help_button, "Help"}),
+ ToolP.
+
+
+
+
+
+
+
+
+create_one_toolbar_btn(ParentId, N, Image, Data) ->
+ BtnWidth = 25,
+ BtnHeight = 25,
+ StartXpos = 0,
+ BtnXpos = StartXpos + ((N - 1) * BtnWidth),
+ BtnYpos = 2,
+ BgColor = ?DEFAULT_BG_COLOR,
+ FgColor = {178,34,34}, % Firebrick
+
+ gs:button(ParentId, [{width, BtnWidth},
+ {height, BtnHeight},
+ {x, BtnXpos},
+ {y, BtnYpos},
+ {enter, true},
+ {leave, true},
+ {label, {image, Image}},
+ {data, Data},
+ {fg, FgColor},
+ {bg, BgColor}
+ ]).
+
+
+
+
+
+resize_toolbar(FrameP, ToolP) ->
+ #frame_params{toolbar_frame_width = TWidth,
+ toolbar_frame_height = THeight,
+ grid_frame_width = GWidth} = FrameP,
+
+ #toolbar_params{bg_label_id = BgId,
+ fg_label_id = FgId,
+ row_col_label_id = RowColId,
+ label_btn_id = BtnId,
+ editor_frame_id = FrId,
+ editor_id = EdId} = ToolP,
+
+ resize_toolbar_label(BgId, FgId, RowColId, BtnId, TWidth, THeight, GWidth),
+ resize_toolbar_editor(FrId, EdId, TWidth, THeight),
+ ToolP.
+
+
+
+
+
+
+
+
+init_toolbar_label(ParentId, ParentWidth, ParentHeight, GWidth) ->
+ {BgWidth, BgHeight, BgXpos, BgYpos, FgWidth, FgHeight, FgXpos, FgYpos, BtnWidth,
+ BtnHeight, BtnXpos, BtnYpos} =
+ get_toolbar_label_coords(ParentWidth, ParentHeight),
+
+ BgId = gs:label(ParentId, [{width, BgWidth},
+ {height, BgHeight},
+ {x, BgXpos},
+ {y, BgYpos},
+ {bg, {0, 0, 0}},
+ {fg, {0, 0, 0}}
+ ]),
+
+
+ RowColLblHeight = ?ROW_COL_LBL_HEIGHT,
+ RowColLblWidth = GWidth - ?VBTN_WIDTH,
+ RowColLblYpos = BgYpos + RowColLblHeight + 18,
+
+ RowColLblId = gs:label(ParentId, [{width, RowColLblWidth},
+ {height, RowColLblHeight},
+ {x, ?VBTN_WIDTH},
+ {y, RowColLblYpos},
+ {bg, ?DEFAULT_BG_COLOR},
+ {fg, {178,34,34}},
+ {align,center},
+ {font,{screen,12}},
+ {label, {text,""}}
+ ]),
+
+ FgId = gs:entry(editentry, ParentId, [{width, FgWidth},
+ {height, FgHeight},
+ {x, FgXpos},
+ {y, FgYpos},
+ {bg, {255,255,255}},
+ {fg, {0,0,0}},
+ {bw, 1},
+ {font,{screen,12}},
+ {justify, left},
+ {cursor, arrow},
+ {setfocus, false},
+ {enable, false},
+ {keypress,true}
+ ]),
+
+ PicDir = code:priv_dir(tv),
+ BtnId = gs:button(ParentId, [{width, BtnWidth},
+ {height, BtnHeight},
+ {x, BtnXpos},
+ {y, BtnYpos},
+ {bg, ?DEFAULT_BG_COLOR},
+ {fg, {0, 0, 0}},
+ {label, {image, PicDir ++ "/more.xbm"}},
+ {data, {labelbtn, pop_up}}
+ ]),
+
+ {RowColLblId, BgId, FgId, BtnId}.
+
+
+
+
+
+
+
+init_toolbar_editor(DispId, TWidth, THeight) ->
+ {BgWidth, BgHeight, BgXpos, BgYpos, Width, Height, Xpos, Ypos} =
+ get_toolbar_editor_coords(TWidth, THeight),
+
+ EditorFrame = gs:frame(DispId, [{width, BgWidth},
+ {height, BgHeight},
+ {x, BgXpos},
+ {y, BgYpos},
+ {bg, {0, 0, 0}}
+ ]),
+
+ Editor = gs:editor(EditorFrame, [{width, Width},
+ {height, Height},
+ {x, Xpos},
+ {y, Ypos},
+ {vscroll, right},
+ {wrap, word},
+ {bg, {255, 255, 255}},
+ {fg, {0, 0, 0}},
+ {enable, false}
+ ]),
+
+ {EditorFrame, Editor}.
+
+
+
+
+
+
+
+get_toolbar_editor_coords(TWidth, _THeight) ->
+ BgWidth = TWidth,
+ BgHeight = 200,
+ BgXpos = 0,
+ BgYpos = (-1) * BgHeight - 50,
+ FgWidth = BgWidth - 2,
+ FgHeight = BgHeight - 2,
+ FgXpos = 1,
+ FgYpos = 1,
+
+ {BgWidth, BgHeight, BgXpos, BgYpos, FgWidth, FgHeight, FgXpos, FgYpos}.
+
+
+
+
+
+
+resize_toolbar_editor(FrId, EdId, TWidth, THeight) ->
+ {BgWidth, BgHeight, _BgXpos, _BgYpos, FgWidth, FgHeight, _FgXpos, _FgYpos} =
+ get_toolbar_editor_coords(TWidth, THeight),
+ gs:config(FrId, [{width, BgWidth},
+ {height, BgHeight}
+ ]),
+
+ gs:config(EdId, [{width, FgWidth},
+ {height, FgHeight}
+ ]).
+
+
+
+
+
+
+resize_toolbar_label(BgId, FgId, RowColId, BtnId, ParentWidth, ParentHeight, GWidth) ->
+ {BgWidth, BgHeight, _BgXpos, _BgYpos, FgWidth, FgHeight, _FgXpos, _FgYpos, _BtnWidth,
+ _BtnHeight, BtnXpos, BtnYpos} =
+ get_toolbar_label_coords(ParentWidth, ParentHeight),
+
+ gs:config(RowColId, [{width, GWidth - ?VBTN_WIDTH}]),
+
+ gs:config(BgId, [{width, BgWidth},
+ {height, BgHeight}
+ ]),
+
+ gs:config(BtnId, [{x, BtnXpos},
+ {y, BtnYpos}
+ ]),
+
+ gs:config(FgId, [{width, FgWidth},
+ {height, FgHeight}
+ ]).
+
+
+
+
+
+get_toolbar_label_coords(ParentWidth, ParentHeight) ->
+ BtnWidth = 19,
+ BgWidth = ParentWidth,
+ BgHeight = 26,
+ BgXpos = 0,
+ BgYpos = ParentHeight - BgHeight - 8 - ?ROW_COL_LBL_HEIGHT + 2,
+ FgHeight = BgHeight - 2,
+ FgWidth = BgWidth - BtnWidth - 3,
+ FgXpos = BgXpos + 1,
+ FgYpos = BgYpos + 1,
+ BtnHeight = BgHeight - 2,
+ BtnXpos = FgWidth + 2,
+ BtnYpos = BgYpos + 1,
+
+ {BgWidth, BgHeight, BgXpos, BgYpos, FgWidth, FgHeight, FgXpos, FgYpos, BtnWidth,
+ BtnHeight, BtnXpos, BtnYpos}.
+
+
+
+
+
+
+send_to_rec_edit(undefined, _Msg) ->
+ done;
+send_to_rec_edit(RecPid, Msg) ->
+ RecPid ! Msg.
+
+
+
+
diff --git a/lib/tv/src/tv_pd_frames.erl b/lib/tv/src/tv_pd_frames.erl
new file mode 100644
index 0000000000..4e091ac9f0
--- /dev/null
+++ b/lib/tv/src/tv_pd_frames.erl
@@ -0,0 +1,480 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(tv_pd_frames).
+
+
+
+-export([create_display_frames/4, resize_display_frames/3]).
+
+
+
+
+-include("tv_int_def.hrl").
+-include("tv_pd_int_def.hrl").
+
+
+
+
+
+
+
+%%%*********************************************************************
+%%% EXTERNAL FUNCTIONS
+%%%*********************************************************************
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+create_display_frames(WindowId, WindowWidth, WindowHeight, FrameP) ->
+ {DisplayId, DisplayWidth, DisplayHeight} =
+ create_frame(WindowId,
+ get_display_coords(WindowWidth, WindowHeight),
+ ?DEFAULT_BG_COLOR,
+ 0),
+
+ {ToolbarId, ToolbarWidth, ToolbarHeight} = create_toolbar_frame(DisplayId,
+ DisplayWidth),
+
+ {SheetFrameId, SheetBgFrameId, SheetFrameWidth, SheetFrameHeight} =
+ create_sheet_frames(DisplayId,
+ DisplayWidth,
+ DisplayHeight),
+
+ {GridFrameId, GridBgFrameId, GridFrameWidth, GridFrameHeight} =
+ create_grid_frames(SheetFrameId,
+ SheetFrameWidth,
+ SheetFrameHeight),
+
+
+ FrameP#frame_params{display_id = DisplayId,
+ toolbar_frame_id = ToolbarId,
+ toolbar_frame_width = ToolbarWidth,
+ toolbar_frame_height = ToolbarHeight,
+ sheet_frame_id = SheetFrameId,
+ sheet_frame_width = SheetFrameWidth,
+ sheet_frame_height = SheetFrameHeight,
+ sheet_bgframe_id = SheetBgFrameId,
+ grid_frame_id = GridFrameId,
+ grid_frame_width = GridFrameWidth,
+ grid_frame_height = GridFrameHeight,
+ grid_bgframe_id = GridBgFrameId
+ }.
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+resize_display_frames(NewW, NewH, FrameP) ->
+ #frame_params{display_id = DispId,
+ toolbar_frame_id = ToolbarId,
+ sheet_frame_id = SheetFgId,
+ sheet_bgframe_id = SheetBgId,
+ grid_frame_id = GridFgId,
+ grid_bgframe_id = GridBgId} = FrameP,
+
+ {NewDispW, NewDispH} = config_frame(DispId, get_display_coords(NewW, NewH)),
+ {NewToolW, NewToolH} = resize_toolbar(ToolbarId, NewDispW),
+ {NewSheetFgW, NewSheetFgH} = resize_sheet_frames(SheetFgId, SheetBgId, NewDispW,
+ NewDispH),
+
+ {NewGridFgW, NewGridFgH} = resize_grid_frames(GridFgId, GridBgId, NewSheetFgW,
+ NewSheetFgH),
+
+ FrameP#frame_params{toolbar_frame_width = NewToolW,
+ toolbar_frame_height = NewToolH,
+ sheet_frame_width = NewSheetFgW,
+ sheet_frame_height = NewSheetFgH,
+ grid_frame_width = NewGridFgW,
+ grid_frame_height = NewGridFgH
+ }.
+
+
+
+
+
+
+
+
+%%%********************************************************************
+%%% INTERNAL FUNCTIONS
+%%%********************************************************************
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+config_frame(Id, {Width, Height, Xpos, Ypos}) ->
+ gs:config(Id, [{width, Width},
+ {height, Height},
+ {x, Xpos},
+ {y, Ypos}
+ ]),
+ {Width, Height}.
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+create_frame(ParentId, {Width, Height, Xpos, Ypos}, Color, BorderWidth) ->
+ Id = gs:frame(ParentId, [{width, Width},
+ {height, Height},
+ {x, Xpos},
+ {y, Ypos},
+ {bw, BorderWidth},
+ {bg, Color}
+ ]),
+ {Id, Width, Height}.
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+create_grid_frames(SheetFrameId, SheetFrameWidth, SheetFrameHeight) ->
+ {BgId, _W, _H} =
+ create_frame(SheetFrameId,
+ get_grid_frame_coords(bg, SheetFrameWidth, SheetFrameHeight),
+ ?BLACK,
+ 0),
+ {FgId, FgWidth, FgHeight} =
+ create_frame(SheetFrameId,
+ get_grid_frame_coords(fg, SheetFrameWidth, SheetFrameHeight),
+ ?DEFAULT_BG_COLOR,
+ 0),
+ {FgId, BgId, FgWidth, FgHeight}.
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+create_sheet_frames(DispId, DispWidth, DispHeight) ->
+ {BgId, _W, _H} = create_frame(DispId,
+ get_sheet_frame_coords(bg, DispWidth, DispHeight),
+ ?BLACK,
+ 0),
+ {FgId, FgWidth, FgHeight} =
+ create_frame(DispId,
+ get_sheet_frame_coords(fg, DispWidth, DispHeight),
+ ?DEFAULT_BG_COLOR,
+ 0),
+ {FgId, BgId, FgWidth, FgHeight}.
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+create_toolbar_frame(DispId, DispWidth) ->
+ create_frame(DispId, get_toolbar_coords(DispWidth), ?DEFAULT_BG_COLOR, 0).
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+get_display_coords(WindowWidth, WindowHeight) ->
+ Xpos = 4,
+ {WindowWidth - 2 * Xpos, WindowHeight - ?MENUBAR_HEIGHT - Xpos, Xpos, ?MENUBAR_HEIGHT}.
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+get_grid_frame_coords(bg, FrameWidth, FrameHeight) ->
+ get_grid_frame_coords2(FrameWidth, FrameHeight, 0);
+get_grid_frame_coords(fg, FrameWidth, FrameHeight) ->
+ get_grid_frame_coords2(FrameWidth, FrameHeight, 1).
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+get_grid_frame_coords2(FrameWidth, FrameHeight, BorderWidth) ->
+ Xpos = 0,
+ Ypos = 0,
+ Width = FrameWidth - ?VSCALE_WIDTH - Xpos - BorderWidth,
+ Height = FrameHeight - ?HSCALE_HEIGHT - Ypos - BorderWidth,
+ {Width, Height, Xpos, Ypos}.
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+get_sheet_frame_coords(bg, FrameWidth, FrameHeight) ->
+ get_sheet_frame_coords2(FrameWidth, FrameHeight, 0);
+get_sheet_frame_coords(fg, FrameWidth, FrameHeight) ->
+ get_sheet_frame_coords2(FrameWidth, FrameHeight, 1).
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+get_sheet_frame_coords2(FrameWidth, FrameHeight, BorderWidth) ->
+ Xpos = BorderWidth,
+ Ypos = ?TOOLBAR_HEIGHT + BorderWidth,
+ Width = FrameWidth - 2 * BorderWidth,
+ Height = FrameHeight - Ypos - ?MISC_AREA_HEIGHT - BorderWidth,
+ {Width, Height, Xpos, Ypos}.
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+get_toolbar_coords(DispWidth) ->
+ Xpos = 0,
+ {DispWidth - 2 * Xpos, ?TOOLBAR_HEIGHT, Xpos, 0}.
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+resize_grid_frames(FgId, BgId, ParentWidth, ParentHeight) ->
+ config_frame(BgId, get_grid_frame_coords(bg, ParentWidth, ParentHeight)),
+ config_frame(FgId, get_grid_frame_coords(fg, ParentWidth, ParentHeight)).
+
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+resize_sheet_frames(FgId, BgId, ParentWidth, ParentHeight) ->
+ config_frame(BgId, get_sheet_frame_coords(bg, ParentWidth, ParentHeight)),
+ config_frame(FgId, get_sheet_frame_coords(fg, ParentWidth, ParentHeight)).
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+resize_toolbar(Id, DispWidth) ->
+ config_frame(Id, get_toolbar_coords(DispWidth)).
+
+
+
diff --git a/lib/tv/src/tv_pd_int_def.hrl b/lib/tv/src/tv_pd_int_def.hrl
new file mode 100644
index 0000000000..2c76bef892
--- /dev/null
+++ b/lib/tv/src/tv_pd_int_def.hrl
@@ -0,0 +1,139 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%%*********************************************************************
+%%%
+%%% Description: Internal definitions for the pd part of the table tool.
+%%%
+%%%*********************************************************************
+
+-define(SCALE_FUNC_FILE, tv_pd_scale).
+-define(DISP_FUNC_FILE, tv_pd_display).
+
+
+-define(SCALE_WIDTH, 75).
+-define(VSCALE_WIDTH, 75).
+-define(HSCALE_HEIGHT, 75).
+-define(MENUBAR_HEIGHT, 30).
+-define(TOOLBAR_HEIGHT, 84). %% 97
+-define(DISPLAY_HEIGHT, 849).
+-define(MISC_AREA_HEIGHT, 0).
+-define(GRID_HEIGHT, 849).
+-define(NOF_GRIDROWS, 35). %% 29
+-define(NOF_GRIDCOLS, 10).
+-define(DEFAULT_COLWIDTH, 100).
+-define(ROW_HEIGHT, 20). %% 24
+-define(VBTN_WIDTH, 55). %% 18
+-define(HBTN_HEIGHT, 20).
+-define(RESBTN_WIDTH, 5).
+-define(DEFAULT_GRID_BGCOLOR, {255,255,255}).
+-define(DEFAULT_GRID_FGCOLOR, {0,0,0}).
+-define(GRID_MARK_COLOR, {0,255,255}).
+-define(GRID_FONT, {courier,12}).
+
+-define(ROW_COL_LBL_WIDTH, 140).
+-define(ROW_COL_LBL_HEIGHT, 14).
+
+
+
+-define(KEY_MARK_AREA_HEIGHT, 21).
+
+
+-define(DEFAULT_BG_COLOR, {217,217,217}).
+-define(DEFAULT_ROW_COLOR, {178,34,34}). % Firebrick!
+-define(DEFAULT_GRID_COLOR, {0,0,0}).
+-define(LIGHT_GRAY, {226,226,226}).
+-define(DARK_VIOLET, {148,0,211}).
+-define(FIREBRICK, {178,34,34}).
+-define(ANTIQUE_WHITE, {255,255,235}).
+
+
+-record(frame_params, {display_id,
+ toolbar_frame_id,
+ toolbar_frame_width,
+ toolbar_frame_height,
+ sheet_frame_id,
+ sheet_frame_width,
+ sheet_frame_height,
+ sheet_bgframe_id,
+ grid_frame_id,
+ grid_frame_width,
+ grid_frame_height,
+ grid_bgframe_id
+ }).
+
+
+
+
+-record(scale_params, {vscale_id,
+ vscale_pos = 0,
+ hscale_id,
+ hscale_pos = 0
+ }).
+
+
+
+
+-record(mark_params, {cell_id,
+ cell_col_no, % Virtual number!
+ row_no, % Real number!
+ virtual_row_no,
+ col_no, % Virtual number!
+ sort_col_no,
+ marked_object,
+ marked_color
+ }).
+
+
+
+-record(toolbar_params, {parent_id,
+ row_col_label_id,
+ bg_label_id,
+ fg_label_id,
+ label_btn_id,
+ pop_up_frame_id,
+ pop_up_label_id,
+ editor_frame_id,
+ editor_id
+ }).
+
+
+-record(process_variables, {master_pid,
+ pg_pid,
+ pb_pid,
+ rec_pid,
+ window_id,
+ window_width,
+ window_height,
+ initialising = true,
+ table_type,
+ table_name,
+ record_name,
+ writable = false,
+ lists_as_strings = true,
+ sorting_on = false,
+ first_col_shown = 1,
+ first_row_shown = 1,
+ nof_rows_shown,
+ cols_shown = [],
+ data_list = [],
+ color_list = [],
+ frame_params = #frame_params{},
+ scale_params = #scale_params{},
+ mark_params = #mark_params{},
+ toolbar_params = #toolbar_params{}
+ }).
diff --git a/lib/tv/src/tv_pd_int_msg.hrl b/lib/tv/src/tv_pd_int_msg.hrl
new file mode 100644
index 0000000000..faf23a9376
--- /dev/null
+++ b/lib/tv/src/tv_pd_int_msg.hrl
@@ -0,0 +1,433 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+
+
+%%%*********************************************************************
+%%% MESSAGES OWNED BY PG
+%%%*********************************************************************
+
+
+
+%%======================================================================
+%% Message:
+%%
+%% Function:
+%%
+%% Data:
+%%======================================================================
+
+
+-record(pg_init_grid, {sender,
+ parent_id,
+ width,
+ height,
+ xpos,
+ ypos,
+ nof_rows,
+ row_height
+ }).
+
+
+
+-record(pg_list_info, {sender,
+ lists_as_strings}).
+
+
+%%======================================================================
+%% Message:
+%%
+%% Function:
+%%
+%% Data:
+%%======================================================================
+
+
+-record(pg_col_info, {sender,
+ first_col_shown,
+ width_of_cols_shown,
+ nof_rows_shown
+ }).
+
+
+
+
+
+%%======================================================================
+%% Message:
+%%
+%% Function:
+%%
+%% Data:
+%%======================================================================
+
+
+-record(pg_col_marked, {sender,
+ virtual_col
+ }).
+
+
+
+
+
+
+%%======================================================================
+%% Message:
+%%
+%% Function:
+%%
+%% Data:
+%%======================================================================
+
+
+-record(pg_row_marked, {sender,
+ virtual_row
+ }).
+
+
+
+
+
+
+
+%%======================================================================
+%% Message:
+%%
+%% Function:
+%%
+%% Data:
+%%======================================================================
+
+-record(pg_data, {sender,
+ data,
+ first_row_shown
+ }).
+
+
+
+
+
+
+%%======================================================================
+%% Message:
+%%
+%% Function:
+%%
+%% Data:
+%%======================================================================
+
+-record(pg_cell_marked, {sender,
+ cell_marked, % true or false
+ real_col,
+ real_row,
+ virtual_col,
+ virtual_row,
+ cell_text
+ }).
+
+
+
+
+%%======================================================================
+%% Message:
+%%
+%% Function:
+%%
+%% Data:
+%%======================================================================
+
+-record(pg_resize_grid, {sender,
+ width,
+ height
+ }).
+
+
+
+
+%%======================================================================
+%% Message:
+%%
+%% Function:
+%%
+%% Data:
+%%======================================================================
+
+-record(pg_resize_grid_col, {sender,
+ real_col_no,
+ virtual_col_no,
+ xdiff
+ }).
+
+
+
+
+
+%%======================================================================
+%% Message:
+%%
+%% Function:
+%%
+%% Data:
+%%======================================================================
+
+-record(pg_horizontal_scroll, {sender,
+ leftmost_virtual_col
+ }).
+
+
+
+
+
+%%======================================================================
+%% Message:
+%%
+%% Function:
+%%
+%% Data:
+%%======================================================================
+
+
+-record(pg_ready, {sender}).
+
+
+
+
+
+%%======================================================================
+%% Message:
+%%
+%% Function:
+%%
+%% Data:
+%%======================================================================
+
+
+-record(pg_remove_marks, {sender}).
+
+
+
+
+
+%%======================================================================
+%% Message:
+%%
+%% Function:
+%%
+%% Data:
+%%======================================================================
+
+
+-record(pg_mark_col, {sender,
+ virtual_col,
+ real_col
+ }).
+
+
+
+
+
+%%======================================================================
+%% Message:
+%%
+%% Function:
+%%
+%% Data:
+%%======================================================================
+
+
+-record(pg_mark_row, {sender,
+ virtual_row,
+ real_row
+ }).
+
+
+
+
+
+
+%%%*********************************************************************
+%%% MESSAGES OWNED BY PB
+%%%*********************************************************************
+
+
+
+%%======================================================================
+%% Message:
+%%
+%% Function:
+%%
+%% Data:
+%%======================================================================
+
+-record(pb_init_btns, {sender,
+ parent_id,
+ parent_width,
+ parent_height,
+ ypos,
+ hbtn_height,
+ resbtn_width,
+ vbtn_width,
+ nof_rows,
+ row_height,
+ first_col_shown,
+ cols_shown
+ }).
+
+
+
+
+%%======================================================================
+%% Message:
+%%
+%% Function:
+%%
+%% Data:
+%%======================================================================
+
+
+-record(pb_remove_marks, {sender}).
+
+
+
+
+
+%%======================================================================
+%% Message:
+%%
+%% Function:
+%%
+%% Data:
+%%======================================================================
+
+
+-record(pb_update_hbtns, {sender,
+ parent_width,
+ parent_height,
+ first_col_shown,
+ cols_shown
+ }).
+
+
+
+
+%%======================================================================
+%% Message:
+%%
+%% Function:
+%%
+%% Data:
+%%======================================================================
+
+
+-record(pb_update_vbtns, {sender,
+ color_list,
+ first_row_shown,
+ nof_rows_shown,
+ blinking_enabled
+ }).
+
+
+
+
+
+%%======================================================================
+%% Message:
+%%
+%% Function:
+%%
+%% Data:
+%%======================================================================
+
+
+-record(pb_key_info, {sender,
+ list_of_keys
+ }).
+
+
+
+
+%%======================================================================
+%% Message:
+%%
+%% Function:
+%%
+%% Data:
+%%======================================================================
+
+
+-record(pb_new_colwidth, {sender,
+ real_col,
+ virtual_col,
+ xdiff
+ }).
+
+
+
+
+
+%%======================================================================
+%% Message:
+%%
+%% Function:
+%%
+%% Data:
+%%======================================================================
+
+
+-record(pb_col_marked, {sender,
+ col_marked, % 'true' or 'false'
+ real_col,
+ virtual_col
+ }).
+
+
+
+
+%%======================================================================
+%% Message:
+%%
+%% Function:
+%%
+%% Data:
+%%======================================================================
+
+
+-record(pb_row_marked, {sender,
+ row_marked, % 'true' or 'false'
+ real_row,
+ virtual_row
+ }).
+
+
+
+
+%%======================================================================
+%% Message:
+%%
+%% Function:
+%%
+%% Data:
+%%======================================================================
+
+
+-record(pb_set_sort_col, {sender,
+ virtual_col
+ }).
+
+
+
+
diff --git a/lib/tv/src/tv_pd_scale.erl b/lib/tv/src/tv_pd_scale.erl
new file mode 100644
index 0000000000..c94e57f468
--- /dev/null
+++ b/lib/tv/src/tv_pd_scale.erl
@@ -0,0 +1,303 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%%*********************************************************************
+%%%
+%%% Description: Part of pd controlling the scale, i.e., the scrollbar
+%%% imitation.
+%%%
+%%%*********************************************************************
+
+
+-module(tv_pd_scale).
+
+
+
+-export([init_scale/2,
+ resize_scale/2,
+ set_scale_range/3,
+ set_scale_pos/3]).
+
+
+
+-include("tv_int_def.hrl").
+-include("tv_pd_int_def.hrl").
+
+
+
+
+
+
+%%%*********************************************************************
+%%% EXTERNAL FUNCTIONS
+%%%*********************************************************************
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+init_scale(FrameP, ScaleP) ->
+ #frame_params{sheet_frame_id = SheetFrameId,
+ sheet_frame_width = SheetFrameWidth,
+ sheet_frame_height = SheetFrameHeight,
+ grid_frame_width = GridFrameWidth,
+ grid_frame_height = GridFrameHeight} = FrameP,
+
+ VScaleId = create_scale(vscale, SheetFrameId, SheetFrameWidth, GridFrameHeight),
+ HScaleId = create_scale(hscale, SheetFrameId, GridFrameWidth, SheetFrameHeight),
+
+ ScaleP#scale_params{vscale_id = VScaleId,
+ vscale_pos = 0,
+ hscale_id = HScaleId,
+ hscale_pos = 0
+ }.
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+resize_scale(FrameP, ScaleP) ->
+ #frame_params{sheet_frame_width = SheetFrameWidth,
+ sheet_frame_height = SheetFrameHeight,
+ grid_frame_width = GridFrameWidth,
+ grid_frame_height = GridFrameHeight} = FrameP,
+
+ #scale_params{vscale_id = VScaleId,
+ hscale_id = HScaleId} = ScaleP,
+
+ config_scale(vscale, VScaleId, SheetFrameWidth, GridFrameHeight),
+ config_scale(hscale, HScaleId, GridFrameWidth, SheetFrameHeight),
+ ScaleP.
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+set_scale_range(vscale, Range, ScaleP) ->
+ {Lo, Hi} = Range,
+ NewRange = if
+ Lo > Hi ->
+ {Hi, Hi};
+ true ->
+ Range
+ end,
+ VScaleId = ScaleP#scale_params.vscale_id,
+ gs:config(VScaleId, [{range, NewRange}]);
+set_scale_range(hscale, Range, ScaleP) ->
+ {Lo, Hi} = Range,
+ NewRange = if
+ Lo > Hi ->
+ {Hi, Hi};
+ true ->
+ Range
+ end,
+ HScaleId = ScaleP#scale_params.hscale_id,
+ gs:config(HScaleId, [{range, NewRange}]).
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+set_scale_pos(_ScaleName, undefined, ScaleP) ->
+ ScaleP;
+set_scale_pos(vscale, NewPos, ScaleP) ->
+ ScaleId = ScaleP#scale_params.vscale_id,
+ gs:config(ScaleId, [{pos, NewPos}]),
+ ScaleP#scale_params{vscale_pos = NewPos};
+set_scale_pos(hscale, NewPos, ScaleP) ->
+ ScaleId = ScaleP#scale_params.hscale_id,
+ gs:config(ScaleId, [{pos, NewPos}]),
+ ScaleP#scale_params{hscale_pos = NewPos}.
+
+
+
+
+
+
+
+%%%********************************************************************
+%%% INTERNAL FUNCTIONS
+%%%********************************************************************
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+config_scale(ScaleName, ScaleId, FrameWidth, FrameHeight) ->
+ {Width, Height, Xpos, Ypos} = get_scale_coords(ScaleName,
+ FrameWidth,
+ FrameHeight),
+ gs:config(ScaleId, [{height, Height},
+ {width, Width},
+ {x, Xpos},
+ {y, Ypos}
+ ]).
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+create_scale(ScaleName, FrameId, FrameWidth, FrameHeight) ->
+ {Width, Height, Xpos, Ypos} = get_scale_coords(ScaleName,
+ FrameWidth,
+ FrameHeight),
+ {Orientation, Range} = case ScaleName of
+ vscale ->
+ {vertical, {1, 1}};
+ hscale ->
+ {horizontal, {1, 1}}
+ end,
+ gs:scale(FrameId, [{data, ScaleName},
+ {orient, Orientation},
+ {buttonpress, true},
+ {buttonrelease, true},
+ {height, Height},
+ {width, Width},
+ {x, Xpos},
+ {y, Ypos},
+ {bg, ?DEFAULT_BG_COLOR},
+ {fg, {0, 0, 0}},
+ {range, Range}
+ ]).
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+get_scale_coords(hscale, FrameWidth, FrameHeight) ->
+ Height = ?HSCALE_HEIGHT,
+ Xpos = ?VBTN_WIDTH - 3, % Subtracting 3 makes it look better!
+ Ypos = FrameHeight - Height,
+ Width = FrameWidth - Xpos + 5, % Adding 5 for better look!
+ {Width, Height, Xpos, Ypos};
+get_scale_coords(vscale, FrameWidth, FrameHeight) ->
+ Width = ?VSCALE_WIDTH,
+ Xpos = (FrameWidth - Width),
+ Ypos = ?HBTN_HEIGHT - 3, % Subtracting 3 makes it look better!
+ Height = FrameHeight - Ypos + 5, % Adding 5 for better look!
+ {Width, Height, Xpos, Ypos}.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/tv/src/tv_pg.erl b/lib/tv/src/tv_pg.erl
new file mode 100644
index 0000000000..ba8782392b
--- /dev/null
+++ b/lib/tv/src/tv_pg.erl
@@ -0,0 +1,429 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(tv_pg).
+
+
+
+-export([pg/1]).
+
+
+-include("tv_int_def.hrl").
+-include("tv_pg_int_def.hrl").
+-include("tv_pd_int_msg.hrl").
+
+
+
+
+
+
+
+
+%%%*********************************************************************
+%%% EXTERNAL FUNCTIONS
+%%%*********************************************************************
+
+
+
+
+%%======================================================================
+%% Function: pg.
+%%
+%% Return Value: None.
+%%
+%% Description: Process controlling the grid part of the display.
+%%
+%% Parameters: None.
+%%======================================================================
+
+
+pg(ParentPid) ->
+ process_flag(trap_exit, true),
+ ProcVars = #process_variables{parent_pid = ParentPid},
+ loop(ProcVars).
+
+
+
+
+
+
+
+%%%********************************************************************
+%%% INTERNAL FUNCTIONS
+%%%********************************************************************
+
+
+
+
+
+%%======================================================================
+%% Function: loop.
+%%
+%% Return Value: None.
+%%
+%% Description: Eternal (well, almost) loop, receiving messages and
+%% handling them.
+%%
+%% Parameters:
+%%======================================================================
+
+
+
+loop(ProcVars) ->
+ receive
+ Msg ->
+ case Msg of
+
+
+ #pg_data{} ->
+ GridId = mark_busy(ProcVars),
+ NewProcVars = update_grid_data(Msg, ProcVars),
+ mark_nonbusy(GridId),
+ loop(NewProcVars);
+
+ #pg_list_info{lists_as_strings=ListAsStr} ->
+ NewProcVars = tv_pg_gridfcns:handle_list_info(ListAsStr, ProcVars),
+ loop(NewProcVars);
+
+ #pg_horizontal_scroll{} ->
+ GridId = mark_busy(ProcVars),
+ NewProcVars = scroll_grid_horizontally(Msg, ProcVars),
+ mark_nonbusy(GridId),
+ loop(NewProcVars);
+
+ #pg_remove_marks{} ->
+ GridId = mark_busy(ProcVars),
+ NewProcVars = tv_pg_gridfcns:remove_marks(ProcVars),
+ mark_nonbusy(GridId),
+ loop(NewProcVars);
+
+ #pg_col_marked{} ->
+ GridId = mark_busy(ProcVars),
+ NewProcVars = mark_grid_col(Msg, ProcVars),
+ mark_nonbusy(GridId),
+ loop(NewProcVars);
+
+ #pg_row_marked{} ->
+ GridId = mark_busy(ProcVars),
+ NewProcVars = mark_grid_row(Msg, ProcVars),
+ mark_nonbusy(GridId),
+ loop(NewProcVars);
+
+ #pg_resize_grid_col{} ->
+ GridId = mark_busy(ProcVars),
+ NewProcVars = resize_grid_column(Msg, ProcVars),
+ mark_nonbusy(GridId),
+ loop(NewProcVars);
+
+ #pg_resize_grid{} ->
+ GridId = mark_busy(ProcVars),
+ NewProcVars = resize_grid(Msg, ProcVars),
+ mark_nonbusy(GridId),
+ loop(NewProcVars);
+
+ #pg_init_grid{} ->
+ GridId = mark_busy(ProcVars),
+ NewProcVars = init_grid(Msg, ProcVars),
+ mark_nonbusy(GridId),
+ PdPid = ProcVars#process_variables.parent_pid,
+ PdPid ! #pg_ready{sender = self()},
+ loop(NewProcVars);
+
+ {gs, Id, Event, Data, Args} ->
+ GridId = mark_busy(ProcVars),
+ NewProcVars = gs_messages({Id, Event, Data, Args}, ProcVars),
+ mark_nonbusy(GridId),
+ loop(NewProcVars);
+
+
+ {'EXIT', Pid, Reason} ->
+ ParentPid = ProcVars#process_variables.parent_pid,
+ exit_signals({Pid, Reason}, ParentPid, ProcVars),
+ loop(ProcVars);
+
+ _Other ->
+ loop(ProcVars)
+ end
+ end.
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+exit_signals(ExitInfo, ParentPid, _ProcVars) ->
+ case ExitInfo of
+ {ParentPid, _Reason} ->
+ exit(normal);
+ _Other ->
+ done
+ end.
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+gs_messages(Msg, ProcVars) ->
+
+ case Msg of
+
+ {Id, buttonpress, {gridcell, RealCol, RealRow, _FrameId}, [1 | _]} ->
+ NewProcVars = tv_pg_gridfcns:mark_cell_and_notify(Id, RealCol,
+ RealRow, ProcVars),
+ NewProcVars;
+
+
+ _OtherMessage ->
+ ProcVars
+
+ end.
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+init_grid(Msg, ProcVars) ->
+ #pg_init_grid{parent_id = ParentId,
+ width = Width,
+ height = Height,
+ xpos = Xpos,
+ ypos = Ypos,
+ nof_rows = NofRows,
+ row_height = RowHeight} = Msg,
+ tv_pg_gridfcns:init_grid(ParentId, Width, Height, Xpos, Ypos, NofRows,
+ RowHeight, ProcVars).
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+resize_grid(Msg, ProcVars) ->
+ #pg_resize_grid{width = Width,
+ height = Height} = Msg,
+ tv_pg_gridfcns:resize_grid(Width, Height, ProcVars).
+
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+resize_grid_column(Msg, ProcVars) ->
+ #pg_resize_grid_col{real_col_no = RealCol,
+ virtual_col_no = VirtualCol,
+ xdiff = Xdiff} = Msg,
+ tv_pg_gridfcns:resize_grid_column(RealCol, VirtualCol, Xdiff, ProcVars).
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+scroll_grid_horizontally(Msg, ProcVars) ->
+ FirstColShown = ?COMM_FUNC_FILE:max(1, Msg#pg_horizontal_scroll.leftmost_virtual_col),
+ tv_pg_gridfcns:scroll_grid_horizontally(FirstColShown, ProcVars).
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+update_grid_data(Msg, ProcVars) ->
+ #pg_data{data = Data,
+ first_row_shown = FirstRowShown} = Msg,
+ tv_pg_gridfcns:update_grid_data(Data, FirstRowShown, ProcVars).
+
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+mark_grid_col(Msg, ProcVars) ->
+ #pg_col_marked{virtual_col = VirtualCol} = Msg,
+ tv_pg_gridfcns:mark_col(VirtualCol, ProcVars).
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+mark_grid_row(Msg, ProcVars) ->
+ #pg_row_marked{virtual_row = VirtualRow} = Msg,
+ tv_pg_gridfcns:mark_row(VirtualRow, ProcVars).
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+mark_busy(ProcVars) ->
+ GridP = ProcVars#process_variables.grid_params,
+ GridId = GridP#grid_params.fg_frame,
+ gs:config(GridId, [{cursor, busy}]),
+ GridId.
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+mark_nonbusy(GridId) ->
+ gs:config(GridId, [{cursor, arrow}]).
+
diff --git a/lib/tv/src/tv_pg_gridfcns.erl b/lib/tv/src/tv_pg_gridfcns.erl
new file mode 100644
index 0000000000..809403fd96
--- /dev/null
+++ b/lib/tv/src/tv_pg_gridfcns.erl
@@ -0,0 +1,1939 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(tv_pg_gridfcns).
+
+
+
+
+-export([init_grid/8,
+ resize_grid/3,
+ resize_grid_column/4,
+ update_grid_data/3,
+ scroll_grid_horizontally/2,
+ mark_cell_and_notify/4,
+ remove_marks/1,
+ mark_col/2,
+ mark_row/2,
+ handle_list_info/2
+ ]).
+
+
+
+
+
+-include("tv_pd_int_msg.hrl").
+-include("tv_pg_int_def.hrl").
+
+
+
+
+
+
+
+%%%*********************************************************************
+%%% EXTERNAL FUNCTIONS
+%%%*********************************************************************
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+init_grid(GridParentId, GridWidth,
+ GridHeight, GridXpos, GridYpos, NofRows, RowHeight, ProcVars) ->
+
+ % Get the size and ID of the grid-parent frame, i.e., the
+ % grid-frame! Do not confuse the base-frames below with
+ % the grid-frame!
+
+ #process_variables{parent_pid = ParentPid,
+ grid_params = GridP} = ProcVars,
+
+ #grid_params{fg_color = GridFgColor,
+ nof_cols = NofCols,
+ col_width = DefaultColWidth,
+ first_col_shown = FirstColShown,
+ col_widths = ColWidths} = GridP,
+
+ % Create the two frames the column frames are placed on!
+ % These two frames defines the size of the grid.
+ BgFrame = create_base_frame(GridParentId, GridWidth, GridHeight,
+ GridXpos, GridYpos, GridFgColor),
+ FgFrame = create_base_frame(BgFrame, GridWidth - 1, GridHeight - 1,
+ 0, 0, GridFgColor),
+
+ % Compute the the colwidths necessary to cover the grid.
+ ColsShown = compute_cols_shown(FirstColShown, ColWidths, GridWidth, NofCols,
+ DefaultColWidth),
+ NofRowsShown = compute_rows_shown(GridHeight, RowHeight),
+
+ % Tell parent about the width of columns shown!
+ ParentPid ! #pg_col_info{sender = self(),
+ first_col_shown = FirstColShown,
+ width_of_cols_shown = ColsShown,
+ nof_rows_shown = NofRowsShown
+ },
+
+ NewNofCols = max(length(ColsShown), NofCols),
+
+ % The GridColWidths list shall contain the current width of each frame.
+ NewColWidths = update_col_widths(ColsShown, ColWidths, FirstColShown,
+ DefaultColWidth),
+
+ % Create column frames, one for each column, and rows (labels) on each frame.
+ {FrameIdList, ColLabelList} = create_col_frames(NewNofCols, NofRows, RowHeight,
+ FgFrame, GridP, [], []),
+
+ % Get lists of label-ID's for each row. (When we created the column frames,
+ % we got the id's of labels placed on each column, i.e., vertically.
+ % However, most often we want the id's for one row, i.e., label id's
+ % horisontally.)
+ RowIdList = get_row_ids(NofRows, ColLabelList, []),
+
+ % Update the grid_params record with the new values!
+ NewGridP = GridP#grid_params{bg_frame = BgFrame,
+ fg_frame = FgFrame,
+ grid_width = GridWidth,
+ grid_height = GridHeight,
+ grid_xpos = GridXpos,
+ grid_ypos = GridYpos,
+ nof_cols = NewNofCols,
+ col_widths = NewColWidths,
+ cols_shown = ColsShown,
+ nof_rows = NofRows,
+ row_height = RowHeight,
+ nof_rows_shown = NofRowsShown,
+ col_frame_ids = FrameIdList,
+ col_ids = ColLabelList,
+ row_ids = RowIdList,
+ row_data_list = lists:duplicate(NofRows, notext)
+ },
+
+ ProcVars#process_variables{grid_parent_id = GridParentId,
+ grid_params = NewGridP}.
+
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+resize_grid(NewWidth, NewHeight, ProcVars) ->
+ #process_variables{parent_pid = ParentPid,
+ grid_params = GridP,
+ mark_params = MarkP} = ProcVars,
+
+ #grid_params{bg_frame = BgFrame,
+ fg_frame = FgFrame,
+ nof_cols = NofCols,
+ nof_rows = NofRows,
+ col_width = DefaultColWidth,
+ first_col_shown = FirstColShown,
+ col_widths = ColWidths,
+ row_height = RowHeight,
+ col_frame_ids = ColFrameIds,
+ col_ids = ColIds,
+ row_ids = RowIds,
+ bg_color = BgColor,
+ fg_color = FgColor,
+ row_data_list = RowDataList,
+ lists_as_strings = ListAsStr} = GridP,
+
+ gs:config(BgFrame, [{width, NewWidth},
+ {height, NewHeight}
+ ]),
+ gs:config(FgFrame, [{width, NewWidth - 1},
+ {height, NewHeight - 1}
+ ]),
+
+ ColsShown = compute_cols_shown(FirstColShown, ColWidths, NewWidth, NofCols,
+ DefaultColWidth),
+
+ NofRowsShown = compute_rows_shown(NewHeight, RowHeight),
+
+
+ % Tell parent about the width of columns shown!
+ ParentPid ! #pg_col_info{sender = self(),
+ first_col_shown = FirstColShown,
+ width_of_cols_shown = ColsShown,
+ nof_rows_shown = NofRowsShown
+ },
+
+ NewColWidths = update_col_widths(ColsShown, ColWidths, FirstColShown,
+ DefaultColWidth),
+
+ NofColsShown = length(ColsShown),
+ {NewNofCols, NewColFrameIds, NewColIds, NewRowIds} =
+ check_nof_cols(ColsShown, (NofColsShown - NofCols), ColFrameIds, ColIds,
+ RowIds, NofRows, RowHeight, FgColor, BgColor ),
+
+ clear_fields(lists:nthtail(NofColsShown, NewColIds),
+ lists:nthtail(NofRowsShown, NewRowIds)),
+
+ RowsToUpdate = lists:sublist(NewRowIds, NofRowsShown),
+
+ refresh_visible_rows(RowsToUpdate, FirstColShown, NofColsShown, RowDataList, ListAsStr),
+
+ NewGridP = GridP#grid_params{grid_width = NewWidth,
+ grid_height = NewHeight,
+ nof_cols = NewNofCols,
+ nof_rows_shown = NofRowsShown,
+ cols_shown = ColsShown,
+ col_widths = NewColWidths,
+ col_frame_ids = NewColFrameIds,
+ col_ids = NewColIds,
+ row_ids = NewRowIds
+ },
+
+ refresh_marks(NewGridP, MarkP),
+
+ ProcVars#process_variables{grid_params = NewGridP}.
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+resize_grid_column(RealCol, VirtualCol, Xdiff, ProcVars) ->
+ #process_variables{parent_pid = ParentPid,
+ grid_params = GridP,
+ mark_params = MarkP} = ProcVars,
+
+ #grid_params{grid_width = GridWidth,
+ first_col_shown = FirstColShown,
+ nof_cols = NofCols,
+ col_widths = ColWidths,
+ col_frame_ids = ColFrameIds,
+ col_ids = ColIds,
+ col_width = DefaultColWidth,
+ row_ids = RowIds,
+ max_col_width = MaxColWidth,
+ min_col_width = MinColWidth,
+ nof_rows = NofRows,
+ nof_rows_shown = NofRowsShown,
+ row_height = RowHeight,
+ bg_color = BgColor,
+ fg_color = FgColor,
+ row_data_list = RowDataList,
+ lists_as_strings = ListAsStr} = GridP,
+
+ % Get new width!
+ Width = min(MaxColWidth, max((lists:nth(VirtualCol, ColWidths) + Xdiff),
+ MinColWidth)),
+
+ % Resize the column.
+ NewWidthOfCol = resize_one_column(RealCol, Width, ColFrameIds, MaxColWidth,
+ MinColWidth),
+
+ % Update the ColWidths list.
+ TempColWidths = lists:sublist(ColWidths, VirtualCol - 1) ++
+ [NewWidthOfCol | lists:nthtail(VirtualCol, ColWidths)],
+
+ % Check the other columns, whether a new column has to be created.
+ ColsShown = compute_cols_shown(FirstColShown, TempColWidths, GridWidth,
+ NofCols, DefaultColWidth),
+
+ % Get the final ColWidths list, after all updates!
+ NewColWidths = update_col_widths(ColsShown, TempColWidths, FirstColShown,
+ DefaultColWidth),
+
+ % Tell parent about the width of columns shown!
+ ParentPid ! #pg_col_info{sender = self(),
+ first_col_shown = FirstColShown,
+ width_of_cols_shown = ColsShown,
+ nof_rows_shown = NofRowsShown
+ },
+
+ % Get the new number of columns (may have changed).
+ NofColsShown = length(ColsShown),
+ {NewNofCols, NewColFrameIds, NewColIds, NewRowIds} =
+ check_nof_cols(ColsShown, (NofColsShown - NofCols), ColFrameIds, ColIds,
+ RowIds, NofRows, RowHeight, FgColor, BgColor ),
+
+ RowsToUpdate = lists:sublist(NewRowIds, NofRowsShown),
+ refresh_visible_rows(RowsToUpdate, FirstColShown, NofColsShown, RowDataList, ListAsStr),
+
+ NewGridP = GridP#grid_params{nof_cols = NewNofCols,
+ cols_shown = ColsShown,
+ col_widths = NewColWidths,
+ col_frame_ids = NewColFrameIds,
+ col_ids = NewColIds,
+ row_ids = NewRowIds
+ },
+
+ refresh_marks(NewGridP, MarkP),
+
+ ProcVars#process_variables{grid_params = NewGridP}.
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+handle_list_info(ListAsStr, ProcVars) ->
+ #process_variables{grid_params = GridP} = ProcVars,
+
+ #grid_params{first_col_shown = FirstColShown,
+ cols_shown = ColsShown,
+ nof_rows_shown = NofRowsShown,
+ row_data_list = RowDataList,
+ row_ids = RowIds,
+ lists_as_strings = OldListAsStr} = GridP,
+
+ case ListAsStr of
+ OldListAsStr ->
+ ProcVars;
+ _NewValue ->
+ NofColsShown = length(ColsShown),
+ RowsToUpdate = lists:sublist(RowIds, NofRowsShown),
+ refresh_visible_rows(RowsToUpdate, FirstColShown, NofColsShown,
+ RowDataList, ListAsStr),
+ NewGridP = GridP#grid_params{lists_as_strings = ListAsStr},
+ ProcVars#process_variables{grid_params = NewGridP}
+ end.
+
+
+
+
+update_grid_data(Data, FirstRowShown, ProcVars) ->
+ #process_variables{grid_params = GridP,
+ mark_params = MarkP} = ProcVars,
+
+ #grid_params{first_col_shown = FirstColShown,
+ cols_shown = ColsShown,
+ nof_rows = NofRows,
+ nof_rows_shown = NofRowsShown,
+ row_ids = RowIds,
+ lists_as_strings = ListAsStr} = GridP,
+
+ NofColsShown = length(ColsShown),
+ RowsToUpdate = lists:sublist(RowIds, NofRowsShown),
+
+ NewMarkP = move_marks(FirstColShown, FirstRowShown, GridP, MarkP),
+
+ update_visible_rows(RowsToUpdate, FirstColShown, NofColsShown, Data, ListAsStr),
+ NewRowDataList = make_row_data_list(1, NofRows, Data),
+
+ NewGridP = GridP#grid_params{first_row_shown = FirstRowShown,
+ row_data_list = NewRowDataList},
+
+ ProcVars#process_variables{grid_params = NewGridP,
+ mark_params = NewMarkP}.
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+scroll_grid_horizontally(NewFirstColShown, ProcVars) ->
+ #process_variables{parent_pid = ParentPid,
+ grid_params = GridP,
+ mark_params = MarkP} = ProcVars,
+
+ #grid_params{grid_width = Width,
+ nof_cols = NofCols,
+ nof_rows = NofRows,
+ nof_rows_shown = NofRowsShown,
+ first_row_shown = FirstRowShown,
+ col_width = DefaultColWidth,
+ max_col_width = MaxColWidth,
+ min_col_width = MinColWidth,
+ col_widths = ColWidths,
+ row_height = RowHeight,
+ col_frame_ids = ColFrameIds,
+ col_ids = ColIds,
+ row_ids = RowIds,
+ bg_color = BgColor,
+ fg_color = FgColor,
+ row_data_list = RowDataList,
+ lists_as_strings = ListAsStr} = GridP,
+
+ % Probably it is unnecessary to check whether any new columns shall be
+ % created or not, but what the heck, we don't want to crash...
+ ColsShown = compute_cols_shown(NewFirstColShown, ColWidths, Width, NofCols,
+ DefaultColWidth),
+ NofColsShown = length(ColsShown),
+
+ ParentPid ! #pg_col_info{sender = self(),
+ first_col_shown = NewFirstColShown,
+ width_of_cols_shown = ColsShown,
+ nof_rows_shown = NofRowsShown
+ },
+
+ NewMarkP = move_marks(NewFirstColShown, FirstRowShown, GridP, MarkP),
+
+ NewColWidths = update_col_widths(ColsShown, ColWidths, NewFirstColShown,
+ DefaultColWidth),
+
+ {NewNofCols, NewColFrameIds, NewColIds, NewRowIds} =
+ check_nof_cols(ColsShown, (NofColsShown - NofCols), ColFrameIds, ColIds,
+ RowIds, NofRows, RowHeight, FgColor, BgColor ),
+
+
+ RowsToUpdate = lists:sublist(NewRowIds, NofRowsShown),
+ resize_all_grid_columns(1, ColsShown, NewColFrameIds, MaxColWidth, MinColWidth),
+
+ refresh_visible_rows(RowsToUpdate, NewFirstColShown, NofColsShown, RowDataList, ListAsStr),
+
+ % Clear fields currently not visible.
+ clear_fields(lists:nthtail(NofColsShown, NewColIds),
+ lists:nthtail(NofRowsShown, NewRowIds)),
+
+
+ NewGridP = GridP#grid_params{nof_cols = NewNofCols,
+ cols_shown = ColsShown,
+ col_widths = NewColWidths,
+ col_frame_ids = NewColFrameIds,
+ col_ids = NewColIds,
+ row_ids = NewRowIds,
+ first_col_shown = NewFirstColShown
+ },
+
+ ProcVars#process_variables{grid_params = NewGridP,
+ mark_params = NewMarkP}.
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+mark_row(VirtualRow, ProcVars) ->
+ #process_variables{grid_params = GridP,
+ mark_params = MarkP} = ProcVars,
+
+ #grid_params{first_row_shown = FirstRowShown,
+ nof_rows_shown = NofRowsShown,
+ row_ids = RowIds} = GridP,
+
+ mark_row(VirtualRow, FirstRowShown, FirstRowShown + NofRowsShown - 1, RowIds,
+ ?GRID_MARK_COLOR),
+
+ NewMarkP = MarkP#mark_params{cell_id = undefined,
+ virtual_col = undefined,
+ virtual_row = VirtualRow
+ },
+
+ ProcVars#process_variables{mark_params = NewMarkP}.
+
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+mark_col(VirtualCol, ProcVars) ->
+ #process_variables{grid_params = GridP,
+ mark_params = MarkP} = ProcVars,
+
+ #grid_params{first_col_shown = FirstColShown,
+ cols_shown = ColsShown,
+ col_ids = ColIds} = GridP,
+
+ NofColsShown = length(ColsShown),
+ mark_col(VirtualCol, FirstColShown, FirstColShown + NofColsShown - 1, ColIds,
+ ?GRID_MARK_COLOR),
+
+ NewMarkP = MarkP#mark_params{cell_id = undefined,
+ virtual_col = VirtualCol,
+ virtual_row = undefined
+ },
+
+ ProcVars#process_variables{mark_params = NewMarkP}.
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+mark_cell_and_notify(CellId, RealCol, RealRow, ProcVars) ->
+ #process_variables{parent_pid = ParentPid,
+ grid_params = GridP,
+ mark_params = MarkP} = ProcVars,
+
+ #grid_params{first_col_shown = FirstColShown,
+ first_row_shown = FirstRowShown} = GridP,
+
+ OldCellId = MarkP#mark_params.cell_id,
+
+ VirtualCol = FirstColShown + RealCol - 1,
+ VirtualRow = FirstRowShown + RealRow - 1,
+
+ %% Right now, when the table tool only is passive, i.e., we cannot edit
+ %% the table content, we don't want to be able to mark empty cells.
+
+ {text, CellText} = gs:read(CellId, label),
+
+ CellMarked = case CellText of
+ "" -> false;
+ _AnyText when CellId=:=OldCellId -> false;
+ _AnyText -> true
+ end,
+
+ remove_marks(ProcVars),
+ update_marked_cells(CellId, OldCellId, CellMarked),
+
+ notify_about_cell_marked(ParentPid, CellMarked, RealCol, RealRow,
+ VirtualCol, VirtualRow, CellText),
+
+ NewMarkP = case CellMarked of
+ true ->
+ MarkP#mark_params{cell_id = CellId,
+ virtual_col = VirtualCol,
+ virtual_row = VirtualRow
+ };
+ false ->
+ MarkP#mark_params{cell_id = undefined,
+ virtual_col = 0,
+ virtual_row = undefined
+ }
+ end,
+
+ ProcVars#process_variables{mark_params = NewMarkP}.
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+remove_marks(ProcVars) ->
+ #process_variables{mark_params = MarkP,
+ grid_params = GridP} = ProcVars,
+
+ #grid_params{first_col_shown = FirstColShown,
+ cols_shown = ColsShown,
+ col_ids = ColIds,
+ first_row_shown = FirstRowShown,
+ nof_rows_shown = NofRowsShown,
+ row_ids = RowIds} = GridP,
+
+
+ #mark_params{cell_id = CellId,
+ virtual_col = VirtualCol,
+ virtual_row = VirtualRow} = MarkP,
+
+ case {VirtualCol, VirtualRow} of
+ {undefined, undefined} ->
+ update_marked_cells(CellId, CellId, false);
+ {_AnyCol, undefined} ->
+ NofColsShown = length(ColsShown),
+ unmark_col(VirtualCol, FirstColShown, FirstColShown + NofColsShown - 1,
+ ColIds);
+ {undefined, _AnyRow} ->
+ unmark_row(VirtualRow, FirstRowShown, FirstRowShown + NofRowsShown - 1,
+ RowIds);
+ _Other ->
+ update_marked_cells(CellId, CellId, false)
+ end,
+
+ NewMarkP = MarkP#mark_params{cell_id = undefined,
+ virtual_col = 0,
+ virtual_row = undefined
+ },
+ ProcVars#process_variables{mark_params = NewMarkP}.
+
+
+
+
+
+
+
+
+
+%%%*********************************************************************
+%%% INTERNAL FUNCTIONS
+%%%*********************************************************************
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+move_marks(FirstCol, FirstRow, GridP, MarkP) ->
+ #grid_params{first_col_shown = OldFirstCol,
+ cols_shown = ColsShown,
+ first_row_shown = OldFirstRow,
+ nof_rows_shown = NofRowsShown,
+ col_ids = ColIds,
+ row_ids = RowIds} = GridP,
+
+ #mark_params{virtual_col = VirtualCol,
+ virtual_row = VirtualRow} = MarkP,
+
+
+ case {VirtualCol, VirtualRow} of
+ {undefined, undefined} ->
+ NofColsShown = length(ColsShown),
+ move_marked_cell(FirstCol, FirstRow, NofColsShown,
+ NofRowsShown, RowIds, MarkP);
+ {_AnyCol, undefined} ->
+ NofColsShown = length(ColsShown),
+ OldLastCol = OldFirstCol + NofColsShown - 1,
+ LastCol = FirstCol + NofColsShown - 1,
+ move_marked_col(VirtualCol, OldFirstCol, OldLastCol,
+ FirstCol, LastCol, ColIds, MarkP);
+ {undefined, _AnyRow} ->
+ OldLastRow = OldFirstRow + NofRowsShown - 1,
+ LastRow = FirstRow + NofRowsShown - 1,
+ move_marked_row(VirtualRow, OldFirstRow, OldLastRow,
+ FirstRow, LastRow, RowIds, MarkP);
+ {_CellCol, _CellRow} ->
+ NofColsShown = length(ColsShown),
+ move_marked_cell(FirstCol, FirstRow, NofColsShown,
+ NofRowsShown, RowIds, MarkP)
+ end.
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+refresh_marks(GridP, MarkP) ->
+ #grid_params{first_col_shown = FirstCol,
+ cols_shown = ColsShown,
+ first_row_shown = FirstRow,
+ nof_rows_shown = NofRowsShown,
+ col_ids = ColIds,
+ row_ids = RowIds} = GridP,
+
+ #mark_params{virtual_col = VirtualCol,
+ virtual_row = VirtualRow} = MarkP,
+
+
+ case {VirtualCol, VirtualRow} of
+ {undefined, undefined} ->
+ NofColsShown = length(ColsShown),
+ move_marked_cell(FirstCol, FirstRow, NofColsShown, NofRowsShown,
+ RowIds, MarkP);
+ {_AnyCol, undefined} ->
+ NofColsShown = length(ColsShown),
+ LastCol = FirstCol + NofColsShown - 1,
+ mark_col(VirtualCol, FirstCol, LastCol, ColIds, ?GRID_MARK_COLOR);
+ {undefined, _AnyRow} ->
+ LastRow = FirstRow + NofRowsShown - 1,
+ mark_row(VirtualRow, FirstRow, LastRow, RowIds, ?GRID_MARK_COLOR);
+ {_CellCol, _CellRow} ->
+ NofColsShown = length(ColsShown),
+ move_marked_cell(FirstCol, FirstRow, NofColsShown, NofRowsShown,
+ RowIds, MarkP)
+ end.
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+move_marked_col(VirtualCol,
+ OldFirstCol, OldLastCol, FirstCol, LastCol, ColIds, MarkP) ->
+ unmark_col(VirtualCol, OldFirstCol, OldLastCol, ColIds),
+ mark_col(VirtualCol, FirstCol, LastCol, ColIds, ?GRID_MARK_COLOR),
+ MarkP#mark_params{cell_id = undefined}.
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+mark_col(VirtualCol, FirstCol, _LastCol, _ColIds, _Color) when VirtualCol < FirstCol ->
+ done;
+mark_col(VirtualCol, _FirstCol, LastCol, _ColIds, _Color) when VirtualCol > LastCol ->
+ done;
+mark_col(VirtualCol, FirstCol, _LastCol, ColIds, Color) ->
+ RealCol = VirtualCol - FirstCol + 1,
+ MarkedColIds = lists:nth(RealCol, ColIds),
+ mark_all_cells(MarkedColIds, Color).
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+unmark_col(VirtualCol, FirstCol, LastCol, ColIds) ->
+ mark_col(VirtualCol, FirstCol, LastCol, ColIds, ?DEFAULT_GRID_BGCOLOR).
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+mark_all_cells([], _Color) ->
+ done;
+mark_all_cells([CellId | T], Color) ->
+ gs:config(CellId, [{bg, Color}]),
+ mark_all_cells(T, Color).
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+mark_row(VirtualRow, FirstRow, _LastRow, _RowIds, _Color) when VirtualRow < FirstRow ->
+ done;
+mark_row(VirtualRow, _FirstRow, LastRow, _RowIds, _Color) when VirtualRow > LastRow ->
+ done;
+mark_row(VirtualRow, FirstRow, _LastRow, RowIds, Color) ->
+ RealRow = VirtualRow - FirstRow + 1,
+ MarkedRowIds = lists:nth(RealRow, RowIds),
+ mark_all_cells(MarkedRowIds, Color).
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+unmark_row(VirtualRow, FirstRow, LastRow, RowIds) ->
+ mark_row(VirtualRow, FirstRow, LastRow, RowIds, ?DEFAULT_GRID_BGCOLOR).
+
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+move_marked_row(VirtualRow,
+ OldFirstRow, OldLastRow, FirstRow, LastRow, RowIds, MarkP) ->
+ unmark_row(VirtualRow, OldFirstRow, OldLastRow, RowIds),
+ mark_row(VirtualRow, FirstRow, LastRow, RowIds, ?GRID_MARK_COLOR),
+ MarkP#mark_params{cell_id = undefined}.
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+move_marked_cell(FirstColShown,
+ FirstRowShown, NofColsShown, NofRowsShown, RowIds, MarkP) ->
+ #mark_params{cell_id = OldCellId,
+ virtual_col = VirtualCol,
+ virtual_row = VirtualRow} = MarkP,
+
+ case OldCellId of
+ undefined ->
+ MarkP;
+ _OtherId ->
+ NewRealCol = VirtualCol - FirstColShown + 1,
+ NewRealRow = VirtualRow - FirstRowShown + 1,
+ update_marked_cells(undefined, OldCellId, false),
+ case check_if_new_mark_visible(NewRealCol, NewRealRow,
+ NofColsShown, NofRowsShown) of
+ false ->
+ MarkP;
+ true ->
+ NewCellId = lists:nth(NewRealCol,
+ lists:nth(NewRealRow, RowIds)),
+ update_marked_cells(NewCellId, undefined, true),
+ MarkP#mark_params{cell_id = NewCellId}
+ end
+ end.
+
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+check_if_new_mark_visible(Col, _Row, NofCols, _NofRows) when Col > NofCols ->
+ false;
+check_if_new_mark_visible(Col, _Row, _NofCols, _NofRows) when Col =< 0 ->
+ false;
+check_if_new_mark_visible(_Col, Row, _NofCols, NofRows) when Row > NofRows ->
+ false;
+check_if_new_mark_visible(_Col, Row, _NofCols, _NofRows) when Row =< 0 ->
+ false;
+check_if_new_mark_visible(_Col, _Row, _NofCols, _NofRows) ->
+ true.
+
+
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+update_marked_cells(CellId, OldCellId, _MarkedCell) when CellId =:= OldCellId ->
+ gs:config(CellId, [{bg, ?DEFAULT_GRID_BGCOLOR}]);
+update_marked_cells(_CellId, undefined, false) ->
+ done;
+update_marked_cells(CellId, undefined, true) ->
+ gs:config(CellId, [{bg, ?GRID_MARK_COLOR}]);
+update_marked_cells(CellId, OldCellId, true) ->
+ gs:config(OldCellId, [{bg, ?DEFAULT_GRID_BGCOLOR}]),
+ gs:config(CellId, [{bg, ?GRID_MARK_COLOR}]);
+update_marked_cells(_CellId, OldCellId, false) ->
+ gs:config(OldCellId, [{bg, ?DEFAULT_GRID_BGCOLOR}]).
+
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+notify_about_cell_marked(Pid, Marked, RealCol, RealRow, VirtCol, VirtRow, Text) ->
+ Pid ! #pg_cell_marked{sender = self(),
+ cell_marked = Marked,
+ real_col = RealCol,
+ real_row = RealRow,
+ virtual_col = VirtCol,
+ virtual_row = VirtRow,
+ cell_text = Text
+ }.
+
+
+
+
+
+
+
+
+%%%---------------------------------------------------------------------
+%%% START of functions used to print data in the grid fields.
+%%%---------------------------------------------------------------------
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+refresh_visible_rows([], _FirstColShown, _NofColsShown, _DataList, _ListAsStr) ->
+ done;
+refresh_visible_rows(RowIds, _FirstColShown, _NofColsShown, [], _ListAsStr) ->
+ clear_cols_or_rows(RowIds);
+refresh_visible_rows([OneRowIds | RemRowIds], FirstColShown, NofColsShown,
+ [DataItemList | RemDataItemLists], ListAsStr) ->
+ NewDataItemList = get_data_sublist(DataItemList, FirstColShown, NofColsShown),
+ update_one_row(lists:sublist(OneRowIds, NofColsShown), NewDataItemList, ListAsStr),
+ refresh_visible_rows(RemRowIds, FirstColShown, NofColsShown, RemDataItemLists, ListAsStr).
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+update_visible_rows([], _FirstColShown, _NofColsShown, _DataList, _ListAsStr) ->
+ done;
+update_visible_rows(RowIds, _FirstColShown, _NofColsShown, [], _ListAsStr) ->
+ clear_cols_or_rows(RowIds);
+update_visible_rows([OneRowIds | RemRowIds], FirstColShown, NofColsShown,
+ [DataItem | RemData], ListAsStr) ->
+ % We convert the received item to a list! This way we know that
+ % '[notext]' shall be printed as 'notext', while 'notext' shall
+ % be printed as ''.
+ TempDataItemList = item_to_list(DataItem),
+ DataItemList = get_data_sublist(TempDataItemList, FirstColShown,
+ NofColsShown),
+ update_one_row(lists:sublist(OneRowIds, NofColsShown), DataItemList, ListAsStr),
+ update_visible_rows(RemRowIds, FirstColShown, NofColsShown, RemData, ListAsStr).
+
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+update_one_row(OneRowIds, [], _ListAsStr) ->
+ clear_one_col_or_row(OneRowIds);
+update_one_row([], _DataItemList, _ListAsStr) ->
+ done;
+update_one_row([LabelId | RemLabelIds], [notext | T], ListAsStr) ->
+ gs:config(LabelId, [{label, {text, ""}}
+ ]),
+ update_one_row(RemLabelIds, T, ListAsStr);
+update_one_row([LabelId | RemLabelIds], [DataElem | T], ListAsStr) ->
+ Str = case ListAsStr of
+ true ->
+ tv_io_lib:format(" ~p", [DataElem]);
+ false ->
+ " " ++ lists:flatten(tv_io_lib:write(DataElem))
+ end,
+ gs:config(LabelId, [{label, {text, Str}}
+ ]),
+ update_one_row(RemLabelIds, T, ListAsStr).
+
+
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+make_row_data_list(N, NofRows, []) when N > NofRows ->
+ [];
+make_row_data_list(N, NofRows, []) ->
+ % If NofRows == N, we get the empty list here!
+ lists:duplicate(NofRows- N, notext);
+make_row_data_list(N, NofRows, [_DataItem | _RemData]) when N > NofRows ->
+ [];
+make_row_data_list(N, NofRows, [DataItem | RemData]) ->
+ % We convert the received item to a list! This way we know that
+ % '[notext]' shall be printed as 'notext', while 'notext' shall
+ % be printed as ''.
+ [item_to_list(DataItem) | make_row_data_list(N + 1, NofRows, RemData)].
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+item_to_list(Item) when is_tuple(Item) ->
+ tuple_to_list(Item);
+item_to_list(Item) ->
+ [Item].
+
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+get_data_sublist(DataList, StartPos, Length) ->
+ case catch lists:sublist(DataList, StartPos, Length) of
+ {'EXIT', _Reason} ->
+ [];
+ Sublist ->
+ Sublist
+ end.
+
+
+
+
+
+
+
+%%%---------------------------------------------------------------------
+%%% END of functions used to print data in the grid fields.
+%%%---------------------------------------------------------------------
+
+
+
+
+
+%%%---------------------------------------------------------------------
+%%% START of functions used to resize the grid columns.
+%%%---------------------------------------------------------------------
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+resize_all_grid_columns(_RealCol, [], _ColFrameIds, _MaxColWidth, _MinColWidth) ->
+ done;
+resize_all_grid_columns(RealCol, [ColWidth | Tail], ColFrameIds, MaxColWidth, MinColWidth) ->
+
+ resize_one_column(RealCol, ColWidth, ColFrameIds, MaxColWidth, MinColWidth),
+ resize_all_grid_columns(RealCol + 1, Tail, ColFrameIds, MaxColWidth,
+ MinColWidth).
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+resize_one_column(RealCol, Width, ColFrameIds, MaxW, MinW) ->
+ NewWidthOfCol = min(MaxW, max(Width, MinW)),
+ case length(ColFrameIds) of
+ RealCol ->
+ done;
+ _Other ->
+ FrameId = lists:nth(RealCol + 1, ColFrameIds),
+ gs:config(FrameId, [{x, NewWidthOfCol + 1}])
+ end,
+ NewWidthOfCol.
+
+
+
+
+%%%---------------------------------------------------------------------
+%%% END of functions used to resize the grid columns.
+%%%---------------------------------------------------------------------
+
+
+
+
+
+
+%%%---------------------------------------------------------------------
+%%% START of functions used to update the grid.
+%%%---------------------------------------------------------------------
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+clear_fields(ColIds, RowIds) ->
+ clear_cols_or_rows(ColIds),
+ clear_cols_or_rows(RowIds).
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+clear_cols_or_rows([]) ->
+ done;
+clear_cols_or_rows([IdList | RemIdLists]) ->
+ clear_one_col_or_row(IdList),
+ clear_cols_or_rows(RemIdLists).
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+clear_one_col_or_row([]) ->
+ done;
+clear_one_col_or_row([LabelId | RemLabelIds]) ->
+ gs:config(LabelId, [{label, {text, ""}}
+ ]),
+ clear_one_col_or_row(RemLabelIds).
+
+
+
+
+
+%%%---------------------------------------------------------------------
+%%% END of functions used to update the grid.
+%%%---------------------------------------------------------------------
+
+
+
+
+
+
+%%%---------------------------------------------------------------------
+%%% START of functions used to compute the part of the grid that has to
+%%% be updated, as well as deciding whether a new column has to be added.
+%%% Old columns (i.e., columns not visible) are not removed, but they
+%%% shall not be updated until they once again becomes visible.
+%%%---------------------------------------------------------------------
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+check_nof_cols(_ColsShown, NofNewCols, ColFrameIds, ColIds, RowIds,
+ _NofRows, _RowHeight, _FgColor, _BgColor) when NofNewCols =< 0 ->
+ {length(ColFrameIds), ColFrameIds, ColIds, RowIds};
+check_nof_cols(ColsShown, NofNewCols, ColFrameIds, ColIds,
+ RowIds, NofRows, RowHeight, FgColor, BgColor) ->
+ NewColNo = length(ColFrameIds) + 1,
+ % We don't care about the pathological case where no columns have been
+ % created. If the gridwidth, or the columnwidth, was set to =< 0 during
+ % initialisation, then no columns will have been created. The program
+ % will probably also have crashed. If any smart jackass has set invalid
+ % values on these important parameters, then he can only blame himself.
+ ParentId = lists:nth((NewColNo - 1), ColFrameIds),
+ ParentColWidth = lists:nth((NewColNo - 1), ColsShown),
+ Xpos = ParentColWidth + 1,
+
+ {ColFrameId, LabelIds} = add_one_col_frame(ParentId, NewColNo, Xpos, FgColor,
+ BgColor, NofRows, RowHeight),
+
+ NewColFrameIds = ColFrameIds ++ [ColFrameId],
+ NewColIds = ColIds ++ [LabelIds],
+ NewRowIds = update_row_ids(RowIds, LabelIds),
+
+ check_nof_cols(ColsShown, NofNewCols - 1, NewColFrameIds, NewColIds, NewRowIds,
+ NofRows, RowHeight, FgColor, BgColor).
+
+
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+update_row_ids([], _LabelIds) ->
+ [];
+update_row_ids([OneRowIds | RemainingRows], [NewElemId | RemainingElemIds]) ->
+ [OneRowIds ++ [NewElemId] | update_row_ids(RemainingRows, RemainingElemIds)].
+
+
+
+
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+update_col_widths(ColsShown, ColWidths, FirstColShown, DefaultColWidth) ->
+ % What we do here is that we first (if necessary) add default
+ % column widths to the ColWidth list until it reaches to where
+ % ColsShown starts (vitually seen).
+ % In the second step we take the appropriate elements from the
+ % ColsShown list and add them to the ColWidths list, until it is
+ % of sufficient length.
+ % Of course this may seem unnecessary - it would suffice to just
+ % add default widths to the ColWidths list until it is long enough,
+ % since the compute_cols_shown function right now just adds default
+ % width columns to the ColsShown list, when the ColWidths list is empty.
+ % However, this could change (maybe we some other time want the last
+ % column to carry all remaining width, instead of adding new columns).
+ % Besides, we don't like hidden dependencies between functions!!!
+
+ NofColsShown = length(ColsShown),
+ NewColWidths = set_necessary_col_widths_length(FirstColShown, ColWidths,
+ DefaultColWidth),
+ % Now NofVirtualCols will always be equal to, or greater
+ % than, FirstColShown - 1.
+
+ NofVirtualCols = length(NewColWidths),
+ NecessaryNofVirtualCols = FirstColShown + (NofColsShown - 1),
+ if
+ NecessaryNofVirtualCols > NofVirtualCols ->
+ TailNo = NofVirtualCols - FirstColShown + 1, % Always >= 0 !!!
+ NewColWidths ++ lists:nthtail(TailNo, ColsShown);
+ true ->
+ NewColWidths
+ end.
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+set_necessary_col_widths_length(FirstColShown, ColWidths, DefaultColWidth) ->
+ % First check that (length(ColWidths) - FirstColShown) >= -1.
+ % If not, add elements so the relation holds true!
+ MissingDefaultWidthElems = FirstColShown - length(ColWidths),
+ if
+ MissingDefaultWidthElems > 1 ->
+ ColWidths ++ lists:duplicate(MissingDefaultWidthElems - 1,
+ DefaultColWidth);
+ true ->
+ ColWidths
+ end.
+
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+compute_rows_shown(GridHeight, RowHeight) ->
+ (GridHeight div RowHeight) + 1.
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+compute_cols_shown(FirstColShown, ColWidths, GridWidth, _NofCols, DefaultColWidth) ->
+ ColWidthsLength = length(ColWidths),
+ % Normally ColWidths shall be long enough, but just to make sure...
+ % (We could have chosen to update ColWidths here to, but right now
+ % we do it instead explicitly when resizeing the grid, changing the
+ % column size(s), and scrolling horizontally.)
+ UsedColWidths = if
+ ColWidthsLength < FirstColShown ->
+ [];
+ true ->
+ lists:nthtail(FirstColShown - 1, ColWidths)
+ end,
+ compute_cols_shown(UsedColWidths, GridWidth, DefaultColWidth).
+
+
+
+
+
+
+compute_cols_shown(_ColWidths, RemainingWidth, _DefColW) when RemainingWidth =< 0 ->
+ [];
+compute_cols_shown([], RemainingWidth, DefaultColWidth) ->
+ [DefaultColWidth | compute_cols_shown([], RemainingWidth - DefaultColWidth,
+ DefaultColWidth)];
+compute_cols_shown([VirtualColWidth | T], RemainingWidth, DefaultColWidth) ->
+ [VirtualColWidth | compute_cols_shown(T, RemainingWidth - VirtualColWidth,
+ DefaultColWidth)].
+
+
+
+
+
+%%%---------------------------------------------------------------------
+%%% END of functions used to compute the part of the grid that has to
+%%% be updated, as well as deciding whether a new column has to be added.
+%%%---------------------------------------------------------------------
+
+
+
+
+
+
+
+%%%---------------------------------------------------------------------
+%%% START of functions used to create the grid (baseframes, columns
+%%% and rows), as well as sorting the ID's appropriately.
+%%%---------------------------------------------------------------------
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+create_base_frame(ParentId, Width, Height, Xpos, Ypos, BgColor) ->
+ gs:frame(ParentId, [{width, Width},
+ {height, Height},
+ {x, Xpos},
+ {y, Ypos},
+ {bg, BgColor}
+ ]).
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+create_col_frames(0, _NofRows, _RowHeight, _ParentId, _GridP, ColFrameAcc, LabelAcc) ->
+ {lists:reverse(ColFrameAcc), lists:reverse(LabelAcc)};
+create_col_frames(N, NofRows, RowHeight, ParentId, GridP, ColFrameAcc, LabelAcc) ->
+ % Yes, it *IS* inefficient to copy GridP for each loop.
+ % However, it is only done once, and for a limited number of times,
+ % and we avoid having a lot of parameters!
+ #grid_params{bg_color = BgColor,
+ fg_color = FgColor,
+ nof_cols = NofCols,
+ col_width = ColWidth} = GridP,
+ Xpos = if
+ N =:= NofCols ->
+ 0;
+ true ->
+ ColWidth + 1
+ end,
+
+ ColNo = NofCols - N + 1,
+ {ColFrameId, LabelIds} = add_one_col_frame(ParentId, ColNo, Xpos, FgColor,
+ BgColor, NofRows, RowHeight),
+ create_col_frames(N - 1, NofRows, RowHeight, ColFrameId, GridP,
+ [ColFrameId | ColFrameAcc], [LabelIds | LabelAcc]).
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+add_one_col_frame(ParentId, ColNo, Xpos, FgColor, BgColor, NofRows, RowHeight) ->
+ ColFrameId = create_one_col_frame(ParentId, Xpos, FgColor),
+ FirstRowYpos = 1,
+ FirstRowNo = 1,
+ LabelIds = create_rows_on_frame(ColFrameId, FirstRowNo, NofRows, RowHeight,
+ FirstRowYpos, FgColor, BgColor, ColNo, []),
+ {ColFrameId, LabelIds}.
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+create_one_col_frame(ParentId, Xpos, BgColor) ->
+ ColFrameWidth = 1200,
+ ColFrameHeight = 900,
+ Ypos = 0,
+ gs:frame(ParentId, [{width, ColFrameWidth},
+ {height, ColFrameHeight},
+ {x, Xpos},
+ {y, Ypos},
+ {bg, BgColor}
+ ]).
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+create_rows_on_frame(_FrameId, RowNo, NofRows, _H, _Y, _Fg, _Bg, _ColNo, Acc) when RowNo > NofRows ->
+ lists:reverse(Acc);
+create_rows_on_frame(FrameId, RowNo, NofRows, H, Y, Fg, Bg, ColNo, RAcc) ->
+ Width = 1200,
+ R = gs:label(FrameId, [{width, Width},
+ {height, H},
+ {x, 1},
+ {y, Y},
+ {bg, Bg},
+ {fg, Fg},
+ {align, w},
+ {buttonpress, true},
+ {data, {gridcell, ColNo, RowNo, FrameId}}
+ ]),
+ NextRowNo = RowNo + 1,
+ NextY = Y + H +1,
+ create_rows_on_frame(FrameId, NextRowNo, NofRows, H, NextY, Fg, Bg, ColNo,
+ [R | RAcc]).
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+get_row_ids(0, _Cols, RowAcc) ->
+ RowAcc;
+get_row_ids(RowNo, Cols, RowAcc) ->
+ Row = extract_ids_for_one_row(RowNo, Cols),
+ get_row_ids(RowNo - 1, Cols, [Row | RowAcc]).
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+extract_ids_for_one_row(_N, []) ->
+ [];
+extract_ids_for_one_row(N, [ColIds | Tail]) ->
+ [lists:nth(N, ColIds) | extract_ids_for_one_row(N, Tail)].
+
+
+
+%%%---------------------------------------------------------------------
+%%% END of functions used to create the grid.
+%%%---------------------------------------------------------------------
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+max(A, B) when A > B ->
+ A;
+max(_, B) ->
+ B.
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+min(A, B) when A < B ->
+ A;
+min(_, B) ->
+ B.
+
diff --git a/lib/tv/src/tv_pg_int_def.hrl b/lib/tv/src/tv_pg_int_def.hrl
new file mode 100644
index 0000000000..6f88053d47
--- /dev/null
+++ b/lib/tv/src/tv_pg_int_def.hrl
@@ -0,0 +1,92 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%%*********************************************************************
+%%%
+%%% Description: Internal definitions for the pd part of the table tool.
+%%%
+%%%*********************************************************************
+
+
+-define(GRIDFUNCS, tv_pg_gridfcns).
+
+
+
+-define(DEFAULT_COLFRAME_HEIGHT, 870).
+-define(DEFAULT_COLWIDTH, 100).
+-define(DEFAULT_GRID_BGCOLOR, {255, 255, 255}). % white
+-define(DEFAULT_GRID_FGCOLOR, {0, 0, 0}). % black
+-define(GRID_MARK_COLOR, {200, 255, 255}).
+-define(GRID_FONT, {courier, 12}).
+
+
+
+-define(DEFAULT_BG_COLOR, {217, 217, 217}).
+-define(DEFAULT_ROW_COLOR, {178, 34, 34}). % Firebrick!
+-define(DEFAULT_GRID_COLOR, {0, 0, 0}).
+-define(LIGHT_GRAY, {226, 226, 226}).
+-define(DARK_VIOLET, {148, 0, 211}).
+-define(FIREBRICK, {178, 34, 34}).
+-define(ANTIQUE_WHITE, {255, 255, 235}).
+
+
+
+
+-record(grid_params, {bg_frame,
+ fg_frame,
+ grid_width,
+ grid_height = ?DEFAULT_COLFRAME_HEIGHT, % Actual height,
+ % not the height
+ % shown!
+ grid_xpos,
+ grid_ypos,
+ bg_color = ?DEFAULT_GRID_BGCOLOR,
+ fg_color = ?DEFAULT_GRID_FGCOLOR,
+ nof_cols = 10,
+ nof_rows,
+ nof_rows_shown,
+ row_height,
+ col_width = ?DEFAULT_COLWIDTH,
+ first_col_shown = 1,
+ first_row_shown = 1,
+ max_col_width = 1200,
+ min_col_width = 5,
+ col_widths = [],
+ cols_shown = [],
+ col_frame_ids = [],
+ col_ids = [],
+ row_ids = [],
+ row_data_list = [],
+ current_max_value,
+ lists_as_strings = true
+ }).
+
+
+
+-record(mark_params, {cell_id,
+ virtual_col,
+ virtual_row
+ }).
+
+
+
+
+-record(process_variables, {parent_pid,
+ grid_parent_id,
+ grid_params = #grid_params{},
+ mark_params = #mark_params{}
+ }).
diff --git a/lib/tv/src/tv_poll_dialog.erl b/lib/tv/src/tv_poll_dialog.erl
new file mode 100644
index 0000000000..8d41251266
--- /dev/null
+++ b/lib/tv/src/tv_poll_dialog.erl
@@ -0,0 +1,357 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%%*********************************************************************
+%%%
+%%% Description: Code for the "set poll interval" dialog with the user.
+%%%
+%%%*********************************************************************
+
+-module(tv_poll_dialog).
+
+
+
+-export([start/1, init/2]).
+
+
+
+-include("tv_int_msg.hrl").
+
+
+
+-define(WINDOW_WIDTH, 305).
+-define(WINDOW_HEIGHT, 185).
+
+-define(DEFAULT_BG_COLOR, {217, 217, 217}).
+
+
+
+
+
+
+%%%*********************************************************************
+%%% EXTERNAL FUNCTIONS
+%%%*********************************************************************
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+start(Pos) ->
+ Pid = self(),
+ ProcPid = spawn_link(?MODULE, init, [Pid, Pos]),
+ receive_answer(ProcPid).
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+init(Pid, Pos) ->
+ process_flag(trap_exit, true),
+ {ScalePos, ScaleRange, Poll, Color} = case Pos of
+ infinity ->
+ {0, {20, 20}, false, {255, 255, 255}};
+ _Other ->
+ {Pos, {20, 300}, true, {0, 0, 0}}
+ end,
+ S = gs:start(),
+ Win = gs:window(S, [{width, ?WINDOW_WIDTH},
+ {height, ?WINDOW_HEIGHT},
+ {bg, ?DEFAULT_BG_COLOR},
+ {title, "[TV] Set Poll Interval"},
+ {configure, true},
+ {destroy, true}
+ ]),
+
+ NoPollBtn = gs:radiobutton(Win, [{height, 30},
+ {width, 143},
+ {x, 10},
+ {y, 10},
+ {bg, ?DEFAULT_BG_COLOR},
+ {fg, {0, 0, 0}},
+ {value, no_poll},
+ {label, {text, "Manual Polling"}},
+ {select, not(Poll)}
+ ]),
+
+ PollBtn = gs:radiobutton(Win, [{height, 30},
+ {width, 163},
+ {x, 10},
+ {y, 60},
+ {bg, ?DEFAULT_BG_COLOR},
+ {fg, {0, 0, 0}},
+ {value, poll},
+ {label, {text, "Automatic Polling"}},
+ {select, Poll}
+ ]),
+
+ Lbl = gs:label(Win, [{label, {text, "Poll Interval (seconds):"}},
+ {align, center},
+ {bg, ?DEFAULT_BG_COLOR},
+ {fg, Color},
+ {width, 183},
+ {height, 30},
+ {x, 10},
+ {y, 100}
+ ]),
+
+ Scale = gs:scale(Win, [{bg, ?DEFAULT_BG_COLOR},
+ {fg, Color},
+ {orient, horizontal},
+ {range, ScaleRange},
+ {pos, ScalePos},
+ {width, 285},
+ {height, 50},
+ {x, 10},
+ {y, 130}
+ ]),
+
+ OkBtn = gs:button(Win, [{label, {text, "OK"}},
+ {bg, ?DEFAULT_BG_COLOR},
+ {fg, {0, 0, 0}},
+ {align, center},
+ {width, 60},
+ {height, 30},
+ {x, 230},
+ {y, 10}
+ ]),
+
+ CancelBtn = gs:button(Win, [{label, {text, "Cancel"}},
+ {bg, ?DEFAULT_BG_COLOR},
+ {fg, {0, 0, 0}},
+ {align, center},
+ {width, 60},
+ {height, 30},
+ {x, 230},
+ {y, 60}
+ ]),
+
+ gs:config(Win, {map, true}),
+ browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn, CancelBtn, Poll, Pos).
+
+
+
+
+
+
+
+%%%*********************************************************************
+%%% INTERNAL FUNCTIONS
+%%%*********************************************************************
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+receive_answer(ProcPid) ->
+ receive_answer(ProcPid, undefined, undefined, undefined, undefined).
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+receive_answer(ProcPid, DataReqMsg, WinConfMsg, MarkedRowMsg, SubsetMsg) ->
+ receive Msg ->
+ case Msg of
+
+ {browser, ProcPid, cancel} ->
+ PcPid = self(),
+ PcPid ! DataReqMsg,
+ PcPid ! WinConfMsg,
+ PcPid ! MarkedRowMsg,
+ PcPid ! SubsetMsg,
+ cancel;
+
+ {browser, ProcPid, {true, PollInterval}} ->
+ PcPid = self(),
+ PcPid ! DataReqMsg,
+ PcPid ! WinConfMsg,
+ PcPid ! MarkedRowMsg,
+ PcPid ! SubsetMsg,
+ PollInterval;
+
+ {browser, ProcPid, {false, _Pollinterval}} ->
+ PcPid = self(),
+ PcPid ! DataReqMsg,
+ PcPid ! WinConfMsg,
+ PcPid ! MarkedRowMsg,
+ PcPid ! SubsetMsg,
+ infinity;
+
+ #pc_data_req{} ->
+ receive_answer(ProcPid, Msg, WinConfMsg, MarkedRowMsg, SubsetMsg);
+
+ #pc_win_conf{} ->
+ receive_answer(ProcPid, DataReqMsg, Msg, MarkedRowMsg, SubsetMsg);
+
+ #pc_marked_row{} ->
+ receive_answer(ProcPid, DataReqMsg, WinConfMsg, Msg, SubsetMsg);
+
+ #dbs_subset{} ->
+ receive_answer(ProcPid, DataReqMsg, WinConfMsg, MarkedRowMsg, Msg);
+
+ #pc_menu_msg{data = exit_button} ->
+ self() ! Msg,
+ cancel;
+
+ #pc_set_sorting_mode{sender = Sender} ->
+ Sender ! #pd_ignore{sender = self()},
+ ProcPid ! raise_and_beep,
+ receive_answer(ProcPid, DataReqMsg, WinConfMsg, MarkedRowMsg, SubsetMsg);
+
+ {'EXIT', _Sender, _Reason} ->
+ self() ! Msg,
+ cancel;
+
+ _Other ->
+ ProcPid ! raise_and_beep,
+ receive_answer(ProcPid, DataReqMsg, WinConfMsg, MarkedRowMsg, SubsetMsg)
+ end
+ end.
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn, CancelBtn, Poll, Pos) ->
+ receive
+ {gs, Scale, click, _, [NewPos | _]} ->
+ browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn,
+ CancelBtn, Poll, NewPos);
+
+ {gs, NoPollBtn, click, _, _} ->
+ gs:config(Lbl, [{fg, {255, 255, 255}}]),
+ gs:config(Scale, [{fg, {255, 255, 255}}, {pos, 0}, {range, {20, 20}}]),
+ receive
+ {gs, Scale, click, _, _} ->
+ done
+ after 500 ->
+ done
+ end,
+ browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn,
+ CancelBtn, false, Pos);
+
+ {gs, PollBtn, click, _, _} ->
+ gs:config(Lbl, [{fg, {0, 0, 0}}]),
+ gs:config(Scale, [{fg, {0, 0, 0}}, {pos, Pos}, {range, {20, 300}}]),
+ receive
+ {gs, Scale, click, _, _} ->
+ done
+ after 500 ->
+ done
+ end,
+ browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn,
+ CancelBtn, true, Pos);
+
+ {gs, OkBtn, click, _, _} ->
+ Pid ! {browser, self(), {Poll, Pos}};
+
+ {gs, CancelBtn, click, _, _} ->
+ Pid ! {browser, self(), cancel};
+
+ {gs, _, destroy, _, _} ->
+ Pid ! {browser, self(), cancel};
+
+
+ {gs, Win, configure, _, _} ->
+ gs:config(Win, [{width, ?WINDOW_WIDTH},
+ {height, ?WINDOW_HEIGHT}
+ ]),
+ browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn,
+ CancelBtn, Poll, Pos);
+
+
+ raise_and_beep ->
+ gs:config(Win, [raise,
+ beep]),
+ browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn,
+ CancelBtn, Poll, Pos);
+
+
+ {'EXIT', _Sender, _Reason} ->
+ Pid ! {browser, self(), cancel};
+
+
+ _Other ->
+ io:format("Poll dialog received message ~w ~n", [_Other]),
+ browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn,
+ CancelBtn, Poll, Pos)
+
+ end.
+
diff --git a/lib/tv/src/tv_pw.erl b/lib/tv/src/tv_pw.erl
new file mode 100644
index 0000000000..8b3186e090
--- /dev/null
+++ b/lib/tv/src/tv_pw.erl
@@ -0,0 +1,327 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%%*********************************************************************
+%%%
+%%% Description: Code for pw, the window controlling part of the table tool.
+%%%
+%%%*********************************************************************
+
+
+-module(tv_pw).
+
+
+
+-export([pw/1]).
+
+
+
+
+-include("tv_int_def.hrl").
+-include("tv_int_msg.hrl").
+-include("tv_pw_int_def.hrl").
+
+
+
+
+
+
+
+%%%*********************************************************************
+%%% EXTERNAL FUNCTIONS
+%%%*********************************************************************
+
+
+
+
+%%======================================================================
+%% Function: pw.
+%%
+%% Return Value: None.
+%%
+%% Description: Process controlling the graphical window, as well as the
+%% menubuttons.
+%%
+%% Parameters: None.
+%%======================================================================
+
+
+
+pw(Master) ->
+ process_flag(trap_exit, true),
+ ProcVars = #process_variables{master_pid = Master},
+ blocked(ProcVars).
+
+
+
+
+
+
+
+
+
+%%%********************************************************************
+%%% INTERNAL FUNCTIONS
+%%%********************************************************************
+
+
+
+
+
+%%======================================================================
+%% Function: blocked.
+%%
+%% Return Value: None.
+%%
+%% Description: When started or explicitly blocked, pw enters this state,
+%% where nothing is performed until the module explicitly is
+%% deblocked.
+%%
+%% Parameters:
+%%======================================================================
+
+
+blocked(ProcVars) ->
+ receive
+ Msg ->
+ case Msg of
+ #pw_deblock{} ->
+ deblock(Msg, ProcVars);
+ _Other ->
+ blocked(ProcVars)
+ end
+ end.
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function: deblocked.
+%%
+%% Return Value: None.
+%%
+%% Description: When deblocked, a window shall be created according to
+%% specification received in pw_deblock message.
+%%
+%% Parameters: Rec: received pw_deblock message.
+%%======================================================================
+
+
+
+deblock(Msg, ProcVars) ->
+ #process_variables{window_params = WinP,
+ menu_params = MenuP} = ProcVars,
+
+ NewWinP = ?WIN_FUNC_FILE:create_window(Msg, WinP),
+ NewMenuP = ?WIN_FUNC_FILE:create_menubar(NewWinP, MenuP),
+
+ Sender = Msg#pw_deblock.sender,
+ Sender ! #pw_deblock_cfm{sender = self(),
+ win_id = NewWinP#window_params.window_id
+ },
+
+ NewProcVars = ProcVars#process_variables{window_params = NewWinP,
+ menu_params = NewMenuP
+ },
+ deblocked_loop(NewProcVars).
+
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+deblocked_loop(ProcVars) ->
+ receive
+ Msg ->
+ case Msg of
+
+ {gs, Id, Event, Data, Args} ->
+ NewProcVars = gs_messages({Id, Event, Data, Args}, ProcVars),
+ deblocked_loop(NewProcVars);
+
+ % Messages from pc!
+ #pw_select_menu{menu=Menu} ->
+ gs:config(Menu, [{select,true}]),
+ deblocked_loop(ProcVars);
+
+ #pw_create_menu{} ->
+ NewProcVars = ?WIN_FUNC_FILE:create_menu(Msg, ProcVars),
+ % Send confirmation...
+ Sender = Msg#pw_create_menu.sender,
+ Sender ! #pw_create_menu_cfm{sender = self()},
+ deblocked_loop(NewProcVars);
+
+ #pw_set_window_title{win_title = WinTitle} ->
+ WinP = ProcVars#process_variables.window_params,
+ gs:config(WinP#window_params.window_id, [{title, "[TV] " ++ WinTitle}]),
+ NewWinP = WinP#window_params{window_title = WinTitle},
+ NewProcVars = ProcVars#process_variables{window_params = NewWinP},
+ deblocked_loop(NewProcVars);
+
+ #pw_deblock{} ->
+ deblock(Msg, ProcVars);
+
+ % Exit signals!
+ {'EXIT', Pid, Reason} ->
+ MasterPid = ProcVars#process_variables.master_pid,
+ exit_signals({Pid, Reason}, MasterPid),
+ deblocked_loop(ProcVars);
+
+ _Other ->
+ deblocked_loop(ProcVars)
+
+ end
+ end.
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+exit_signals(Exit_info, MasterPid) ->
+ case Exit_info of
+ {MasterPid, _Reason} -> % When from master, just quit!
+ exit(normal);
+ _Other ->
+ done
+ end.
+
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+gs_messages(Msg, ProcVars) ->
+ MasterPid = ProcVars#process_variables.master_pid,
+ case Msg of
+
+ {_Id, click, Data, _Args} ->
+ MasterPid ! #pc_menu_msg{sender = self(),
+ data = Data},
+ ProcVars;
+
+ {_Win, keypress, _Data, [Key, _ , _, 1 | _T]} ->
+ MenuP = ProcVars#process_variables.menu_params,
+ ShortcutList = MenuP#menu_params.shortcuts,
+ send_shortcut_data(Key, ShortcutList, MasterPid),
+ ProcVars;
+
+ Msg0 = {Win, configure, _, _} ->
+ {Win, configure, _, [W, H | _T]} = flush_msgs(Msg0),
+ WinP = ProcVars#process_variables.window_params,
+ #window_params{window_id = WindowId,
+ min_window_width = MinAllowedWidth,
+ min_window_height = MinAllowedHeight} = WinP,
+ FinalWidth = ?COMM_FUNC_FILE:max(W, MinAllowedWidth),
+ FinalHeight = ?COMM_FUNC_FILE:max(H, MinAllowedHeight),
+ ?WIN_FUNC_FILE:resize_window(WindowId, FinalWidth, FinalHeight),
+ MasterPid ! #pc_win_conf{sender = self(),
+ width = FinalWidth,
+ height = FinalHeight},
+ NewWinP = WinP#window_params{window_width = FinalWidth,
+ window_height = FinalHeight
+ },
+ ProcVars#process_variables{window_params = NewWinP};
+
+ {_Win, destroy, _Data, _Args} ->
+ exit(normal);
+
+ _Other ->
+ ProcVars
+ end.
+
+flush_msgs(Msg0 = {Win, Op, _, _}) ->
+ receive {gs, Win,Op,D,P} ->
+ flush_msgs({Win,Op,D,P})
+ after 200 ->
+ Msg0
+ end.
+
+send_shortcut_data(_Key, [], _MasterPid) ->
+ done;
+send_shortcut_data(Key, ShortcutList, MasterPid) ->
+ case lists:keysearch(Key, 1, ShortcutList) of
+ {value, {Key, Data}} ->
+ MasterPid ! #pc_menu_msg{sender = self(),
+ data = Data};
+ false ->
+ done
+ end.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/tv/src/tv_pw_int_def.hrl b/lib/tv/src/tv_pw_int_def.hrl
new file mode 100644
index 0000000000..fabfbc2762
--- /dev/null
+++ b/lib/tv/src/tv_pw_int_def.hrl
@@ -0,0 +1,55 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%%*********************************************************************
+%%%
+%%% Description: Internal definitions for the pw part of the table tool.
+%%%
+%%%*********************************************************************
+
+-define(WIN_FUNC_FILE, tv_pw_window).
+
+
+
+-define(DEFAULT_WINDOW_WIDTH, 1000).
+-define(DEFAULT_WINDOW_HEIGHT, 800).
+-define(DEFAULT_MIN_WINDOW_WIDTH, 50).
+-define(DEFAULT_MIN_WINDOW_HEIGHT, 50).
+
+
+
+-record(window_params, {window_id,
+ window_title,
+ window_width,
+ window_height,
+ min_window_width,
+ min_window_height
+ }).
+
+
+-record(menu_params, {menubar_id,
+ shortcuts
+ }).
+
+
+
+
+
+-record(process_variables, {master_pid,
+ window_params = #window_params{},
+ menu_params = #menu_params{}
+ }).
diff --git a/lib/tv/src/tv_pw_window.erl b/lib/tv/src/tv_pw_window.erl
new file mode 100644
index 0000000000..9cb5c879c0
--- /dev/null
+++ b/lib/tv/src/tv_pw_window.erl
@@ -0,0 +1,273 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%%*********************************************************************
+%%%
+%%% Description: Part of the pw component controlling the graphics.
+%%%
+%%%*********************************************************************
+
+
+-module(tv_pw_window).
+
+
+
+-export([create_window/2,
+ resize_window/3,
+ create_menubar/2,
+ create_menu/2]).
+
+
+
+
+-include("tv_int_def.hrl").
+-include("tv_int_msg.hrl").
+-include("tv_pw_int_def.hrl").
+
+
+
+-define(DEFAULT_BG_COLOR, {217, 217, 217}).
+
+
+
+
+%%%*********************************************************************
+%%% EXTERNAL FUNCTIONS
+%%%*********************************************************************
+
+
+
+
+%%======================================================================
+%% Function: create_menu.
+%%
+%% Return Value: Identifier to the menu created.
+%%
+%% Description: Creates a menu in the window.
+%%
+%% Parameters: Win: ID of parent window.
+%%======================================================================
+
+
+create_menu(Msg, ProcVars) ->
+ MenuP = ProcVars#process_variables.menu_params,
+ MenubarId = MenuP#menu_params.menubar_id,
+ ShortcutList = MenuP#menu_params.shortcuts,
+
+ #pw_create_menu{menutitle = MenuTitle,
+ title_acc_pos = TitleAccPos,
+ menulist = MenuList} = Msg,
+
+ % Create the menubutton!
+ Label = def_or_param(MenuTitle, "NoName"),
+ Mbutt = gs:create(menubutton, MenubarId, [{bg, ?DEFAULT_BG_COLOR},
+ {fg, {178, 34, 34}}, % firebrick
+ % {font, {helvetica, bold, 14}},
+ {label, {text, Label}},
+ {underline, TitleAccPos}
+ ]),
+
+ % Create the actual menu!
+ Menu = gs:create(menu, Mbutt, [{bg, ?DEFAULT_BG_COLOR},
+ {fg, {178, 34, 34}}
+ ]),
+
+ NewMenuP = MenuP#menu_params{shortcuts = ShortcutList ++ create_menulist(MenuList, Menu)},
+
+ ProcVars#process_variables{menu_params = NewMenuP}.
+
+
+
+
+
+
+
+create_menubar(WinP, MenuP) ->
+ WindowId = WinP#window_params.window_id,
+ MenubarId = gs:create(menubar, WindowId, [{bg, ?DEFAULT_BG_COLOR}
+ ]),
+ Mbutt = gs:create(menubutton, MenubarId, [{bg, ?DEFAULT_BG_COLOR},
+ {fg, {178, 34, 34}}, % firebrick
+ % {font, {helvetica, bold, 14}},
+ {label, {text, " Help "}},
+ {underline, 1},
+ {side, right}
+ ]),
+
+ % Create the actual menu!
+ Menu = gs:create(menu, Mbutt, [{bg, ?DEFAULT_BG_COLOR},
+ {fg, {178, 34, 34}}
+ ]),
+ MenuP#menu_params{menubar_id = MenubarId,
+ shortcuts = create_menulist([{" Help ", normal, help_button, 1, h},
+ separator,
+ {" OTP Documentation ",normal,otp_help_button,1,no_char}],
+ Menu) ++ [{x,exit_button}, {'X',exit_button}]
+ }.
+
+
+
+
+
+create_window(Msg, WinP) ->
+ #pw_deblock{win_title = Title,
+ win_width = Width,
+ win_height = Height,
+ min_win_width = MinWidth} = Msg,
+
+
+ S = gs:start(),
+ WindowTitle = def_or_param(Title, "NoName"),
+ WindowMinWidth = def_or_param(MinWidth, ?DEFAULT_MIN_WINDOW_WIDTH),
+ WindowMinHeight = def_or_param(MinWidth, ?DEFAULT_MIN_WINDOW_HEIGHT),
+ WindowWidth = ?COMM_FUNC_FILE:max(def_or_param(Width,
+ ?DEFAULT_WINDOW_WIDTH),
+ WindowMinWidth),
+ WindowHeight = ?COMM_FUNC_FILE:max(def_or_param(Height,
+ ?DEFAULT_WINDOW_HEIGHT),
+ WindowMinHeight),
+
+
+ WindowId = gs:create(window, S, [{title, WindowTitle},
+ {width, WindowWidth},
+ {height, WindowHeight},
+ {bg, ?DEFAULT_BG_COLOR},
+ {configure, true},
+ {destroy, true},
+ {keypress, true},
+ {cursor, arrow}
+ ]),
+
+ WinP#window_params{window_id = WindowId,
+ window_title = WindowTitle,
+ window_width = WindowWidth,
+ window_height = WindowHeight,
+ min_window_width = WindowMinWidth,
+ min_window_height = WindowMinHeight
+ }.
+
+
+
+
+
+
+
+resize_window(WindowId, NewWidth, NewHeight) ->
+ gs:config(WindowId, [{width, NewWidth},
+ {height, NewHeight}
+ ]).
+
+
+
+
+%%%********************************************************************
+%%% INTERNAL FUNCTIONS
+%%%********************************************************************
+
+
+
+create_menulist([], _Menu) ->
+ [];
+create_menulist(List, Menu) ->
+ MaxLength = get_length_of_longest_menu_text(List, 0),
+ create_menulist(List, Menu, MaxLength).
+
+
+
+
+create_menulist([], _Menu, _MaxLength) ->
+ [];
+create_menulist([{Text, Type, Data, AccCharPos, ShortcutChar} | Rest], Menu, MaxLength) ->
+ ShortcutCapitalChar =
+ if
+ ShortcutChar =:= no_char ->
+ no_char;
+ true ->
+ CharAsciiValue = lists:nth(1, atom_to_list(ShortcutChar)),
+ CapitalCharValue = CharAsciiValue - ($a - $A),
+ list_to_atom([CapitalCharValue])
+ end,
+
+ FinalText = if
+ ShortcutChar =:= no_char ->
+ Text;
+ true ->
+ Text ++ lists:duplicate(MaxLength - length(Text), " ") ++
+ " Ctrl+" ++ atom_to_list(ShortcutCapitalChar) ++ " "
+ end,
+ TypeAndSel =
+ case Type of
+ normal ->
+ [{itemtype, normal}];
+ {radio, Selected, Group} ->
+ [{itemtype, radio},
+ {select, Selected},
+ {group, Group}];
+ {check, Selected} ->
+ [{itemtype, check},
+ {select, Selected}]
+ end,
+ gs:menuitem(Data, Menu, [{bg, ?DEFAULT_BG_COLOR},
+ {fg, {178, 34, 34}},
+ {label, {text, FinalText}},
+ {underline, AccCharPos},
+ {data, Data} |
+ TypeAndSel
+ ]),
+ [{ShortcutChar, Data}, {ShortcutCapitalChar, Data} | create_menulist(Rest, Menu, MaxLength)];
+create_menulist([separator | Rest], Menu, MaxLength) ->
+ gs:create(menuitem, Menu, [{itemtype, separator}
+ ]),
+ create_menulist(Rest, Menu, MaxLength).
+
+
+
+
+
+
+
+get_length_of_longest_menu_text([], MaxLength) ->
+ MaxLength;
+get_length_of_longest_menu_text([{Text, _Type, _Data, _APos, _SChar} | Rest], CurrMax) ->
+ L = length(Text),
+ if
+ L > CurrMax ->
+ get_length_of_longest_menu_text(Rest, L);
+ true ->
+ get_length_of_longest_menu_text(Rest, CurrMax)
+ end;
+get_length_of_longest_menu_text([separator | Rest], CurrMax) ->
+ get_length_of_longest_menu_text(Rest, CurrMax).
+
+
+
+
+
+def_or_param(undefined, DefaultValue) ->
+ DefaultValue;
+def_or_param(Param, _Default) ->
+ Param.
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/tv/src/tv_rec_edit.erl b/lib/tv/src/tv_rec_edit.erl
new file mode 100644
index 0000000000..e8f663073e
--- /dev/null
+++ b/lib/tv/src/tv_rec_edit.erl
@@ -0,0 +1,744 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(tv_rec_edit).
+
+
+
+-export([start/5,
+ start/6,
+ init/8
+ ]).
+
+
+-include("tv_int_def.hrl").
+
+
+
+-define(DEFAULT_BG_COLOR, {217,217,217}).
+
+-define(WIN_WIDTH, 375).
+-define(WIN_HEIGHT, 341).
+-define(ETS_WIN_HEIGHT, 154).
+
+-define(FRAME_WIDTH, 375).
+-define(FRAME_HEIGHT, 265).
+-define(ETS_FRAME_HEIGHT, 74).
+
+-define(MAX_LABEL_WIDTH, 165).
+-define(X0, 15).
+-define(Y0, 20).
+-define(LABEL_HEIGHT, 30).
+-define(ENTRY_HEIGHT, 30).
+-define(FONT, {screen,12}).
+-define(NEXT_BTN_WIDTH, 57).
+-define(NEXT_BTN_HEIGHT, 22).
+-define(NEXT_BTN_FG, {178,34,34}).
+-define(INSERT_BTN_WIDTH, 80).
+-define(INSERT_BTN_HEIGHT, 30).
+-define(INSERT_BTN_DIST_BETWEEN, 23).
+-define(INSERT_BTN_DIST_FROM_BOTTOM, 23).
+
+
+
+
+
+start(TableType, TableName, AttributeList, ListsAsStr, ErrMsgMode) ->
+ AttributeValues = lists:duplicate(length(AttributeList), undefined),
+ spawn_link(?MODULE, init, [TableType, TableName, AttributeList,
+ AttributeValues, ListsAsStr, ErrMsgMode, self(), true]).
+
+
+
+start(TableType, TableName, AttributeList, AttributeValues, ListsAsStr, ErrMsgMode) ->
+ spawn_link(?MODULE, init, [TableType, TableName, AttributeList,
+ AttributeValues, ListsAsStr, ErrMsgMode, self(), false]).
+
+
+
+
+init(TableType,TableName,AttributeList,AttributeValues,ListsAsStr,ErrMsgMode,MasterPid,Insert) ->
+ process_flag(trap_exit, true),
+ put(error_msg_mode, ErrMsgMode),
+ Frames = create_window(TableType, TableName, AttributeList, AttributeValues,
+ ListsAsStr, Insert),
+ loop(TableType, TableName, Frames, AttributeList, AttributeValues, MasterPid, ListsAsStr).
+
+
+
+
+
+loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr) ->
+ receive
+
+ {gs, insert, click, Insert, _Args} ->
+ gs:config(win, [{cursor, busy}]),
+ case get_record(TabType, TabName, AttrList, AttrList, Frames) of
+ {ok, NewRec} ->
+ case Insert of
+ insert ->
+ MPid ! {new_object, NewRec};
+ change ->
+ MPid ! {updated_object, NewRec}
+ end;
+ error ->
+ done
+ end,
+ gs:config(win, [{cursor, arrow}]),
+ loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr);
+
+
+ {gs, cancel, click, _Data, _Args} ->
+ exit(normal);
+
+
+ {gs, reset, click, _Data, _Args} ->
+ gs:config(win, [{cursor, busy}]),
+ set_entry_values(TabType, AttrList, AttrVals, ListsAsStr),
+ gs:config(win, [{cursor, arrow}]),
+ loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr);
+
+
+
+ {gs, EntryId, keypress, _Data, ['Tab', _No, 0 | _T]} ->
+ {_Term, {NextEntry, NextFrame}} =
+ check_entry_content(EntryId, AttrList, Frames, forward),
+ case NextEntry of
+ EntryId ->
+ gs:config(NextEntry, [{setfocus, true}]);
+ _OtherId ->
+ gs:config(NextFrame, [raise]),
+ gs:config(NextEntry, [{setfocus, true},
+ {select, {0,100000000}}])
+ end,
+ loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr);
+
+
+ {gs, EntryId, keypress, _Data, ['Down' | _T]} ->
+ {_Term, {NextEntry, NextFrame}} =
+ check_entry_content(EntryId, AttrList, Frames, forward),
+ case NextEntry of
+ EntryId ->
+ gs:config(NextEntry, [{setfocus, true}]);
+ _OtherId ->
+ gs:config(NextFrame, [raise]),
+ gs:config(NextEntry, [{setfocus, true},
+ {select, {0,100000000}}])
+ end,
+ loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr);
+
+
+ {gs, EntryId, keypress, _Data, ['Tab', _No, 1 | _T]} ->
+ {_Term, {NextEntry, NextFrame}} =
+ check_entry_content(EntryId, AttrList, Frames, backward),
+ gs:config(NextFrame, [raise]),
+ case NextEntry of
+ EntryId ->
+ gs:config(NextEntry, [{setfocus, true}]);
+ _OtherId ->
+ gs:config(NextFrame, [raise]),
+ gs:config(NextEntry, [{setfocus, true},
+ {select, {0,100000000}}])
+ end,
+ loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr);
+
+
+ {gs, EntryId, keypress, _Data, ['Up' | _T]} ->
+ {_Term, {NextEntry, NextFrame}} =
+ check_entry_content(EntryId, AttrList, Frames, backward),
+ gs:config(NextFrame, [raise]),
+ case NextEntry of
+ EntryId ->
+ gs:config(NextEntry, [{setfocus, true}]);
+ _OtherId ->
+ gs:config(NextFrame, [raise]),
+ gs:config(NextEntry, [{setfocus, true},
+ {select, {0,100000000}}])
+ end,
+ loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr);
+
+
+ {gs, Id, keypress, _Data, ['Return' | _T]} ->
+ OldCursor = gs:read(Id, cursor),
+ gs:config(Id, [{cursor, busy}]),
+ gs:config(win, [{cursor, busy}]),
+ Insert = gs:read(insert, data),
+ case get_record(TabType, TabName, AttrList, AttrList, Frames) of
+ {ok, NewRec} ->
+ case Insert of
+ insert ->
+ MPid ! {new_object, NewRec};
+ change ->
+ MPid ! {updated_object, NewRec}
+ end;
+ error ->
+ done
+ end,
+ gs:config(win, [{cursor, arrow}]),
+ gs:config(Id, [{cursor, OldCursor}]),
+ loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr);
+
+
+
+ {gs, _Id, click, FrameNo, _Args} ->
+ gs:config(lists:nth(FrameNo, Frames), [raise]),
+ loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr);
+
+
+ {gs, win, configure, _Data, [Width | _T]} ->
+ resize_window(TabType, lists:max([Width, ?WIN_WIDTH]), Frames, AttrList),
+ loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr);
+
+
+ {gs, win, destroy, _Data, _Args} ->
+ exit(normal);
+
+
+ insert_mode ->
+ NewAttrVals = lists:duplicate(length(AttrList), undefined),
+ set_entry_values(TabType, AttrList, NewAttrVals, ListsAsStr),
+ loop(TabType, TabName, Frames, AttrList, NewAttrVals, MPid, ListsAsStr);
+
+
+ {update_mode, Obj} ->
+ NewAttrVals =
+ case TabType of
+ mnesia ->
+ case Obj of
+ undefined ->
+ lists:duplicate(length(AttrList), undefined);
+ _AnyRec ->
+ tl(tuple_to_list(Obj))
+ end;
+ ets ->
+ [Obj]
+ end,
+ set_entry_values(TabType, AttrList, NewAttrVals, ListsAsStr),
+ loop(TabType, TabName, Frames, AttrList, NewAttrVals, MPid, ListsAsStr);
+
+
+ {reset_info, Obj} ->
+ %% Info to use, instead of old info, when reset button is pressed.
+ NewAttrVals =
+ case TabType of
+ mnesia ->
+ case Obj of
+ undefined ->
+ lists:duplicate(length(AttrList), undefined);
+ _AnyRec ->
+ tl(tuple_to_list(Obj))
+ end;
+ ets ->
+ [Obj]
+ end,
+ loop(TabType, TabName, Frames, AttrList, NewAttrVals, MPid, ListsAsStr);
+
+
+ raise ->
+ gs:config(win, [raise]),
+ loop(TabType, TabName, Frames, AttrList,AttrVals, MPid, ListsAsStr);
+
+
+ {'EXIT', _Pid, _Reason} ->
+ exit(normal);
+
+
+ _Other ->
+ loop(TabType, TabName, Frames, AttrList,AttrVals, MPid, ListsAsStr)
+ end.
+
+
+
+
+resize_window(TabType, WinWidth, Frames, AttrList) ->
+ WinHeight =
+ case TabType of
+ mnesia ->
+ get_window_height(length(AttrList));
+ ets ->
+ ?ETS_WIN_HEIGHT
+ end,
+ gs:config(win, [{width, WinWidth},
+ {height, WinHeight}
+ ]),
+ FrameWidth = WinWidth,
+ LblL = lists:map(fun(H) ->
+ gs:config(H, [{width, FrameWidth}]),
+ {LblW, BId, NId} = gs:read(H, data),
+ XNext = get_next_btn_xpos(FrameWidth),
+ XBack = XNext - ?NEXT_BTN_WIDTH,
+ gs:config(BId, [{x, XBack}]),
+ gs:config(NId, [{x, XNext}]),
+ LblW
+ end,
+ Frames),
+ LblW = hd(LblL),
+ EntryW = get_entry_width(TabType, FrameWidth, LblW),
+ lists:foreach(fun(H) ->
+ gs:config(H, [{width, EntryW}])
+ end,
+ AttrList),
+ gs:config(btnframe, [{width, FrameWidth}]),
+ {XInsert, XCancel, XReset} = get_insert_btn_coords(WinWidth),
+ gs:config(insert, [{x, XInsert}]),
+ gs:config(cancel, [{x, XCancel}]),
+ gs:config(reset, [{x, XReset}]).
+
+
+
+
+check_entry_content(EntryId, AttributeList, Frames, Direction) ->
+ EditedStr = gs:read(EntryId, text),
+ case tv_db_search:string_to_term(EditedStr) of
+ {error, {_Reason, Msg}} ->
+ gs:config(EntryId, [beep]),
+ tv_utils:notify(gs:start(), "TV Notification", Msg),
+ {error, {EntryId, no_matter}};
+ {ok, NewTerm} ->
+ {{ok,NewTerm}, get_next_entry_id(EntryId, AttributeList, Frames, Direction)}
+ end.
+
+
+
+
+get_next_entry_id(EntryId, AttributeList, Frames, Direction) ->
+ OldPos = get_pos(EntryId, AttributeList),
+ MaxPos = length(AttributeList),
+ NewPos = case Direction of
+ forward when OldPos < MaxPos ->
+ OldPos + 1;
+ forward ->
+ 1;
+ backward when OldPos > 1 ->
+ OldPos - 1;
+ backward ->
+ MaxPos;
+ stationary ->
+ OldPos
+ end,
+ FramePos = get_next_frame_id(NewPos),
+ {lists:nth(NewPos, AttributeList), lists:nth(FramePos, Frames)}.
+
+
+
+
+get_next_frame_id(Pos) ->
+ case Pos rem 5 of
+ 0 ->
+ Pos div 5;
+ _Other ->
+ (Pos div 5) + 1
+ end.
+
+
+
+
+get_record(TabType, TabName, AttrList, AttrList, Frames) ->
+ case get_record(AttrList, AttrList, Frames, []) of
+ {ok, RecList} ->
+ case TabType of
+ mnesia ->
+ NewRecList = [TabName | RecList],
+ {ok, list_to_tuple(NewRecList)};
+ ets ->
+ {ok, hd(RecList)} %% Only one element, a tuple!
+ end;
+ error ->
+ error
+ end.
+
+
+
+
+get_record([H | T], AttrList, Frames, Acc) ->
+ case check_entry_content(H, AttrList, Frames, forward) of
+ {{ok, NewTerm}, _PosTuple} ->
+ get_record(T, AttrList, Frames, [NewTerm | Acc]);
+ {error, _PosTuple} ->
+ {EntryId, FrameId} = get_next_entry_id(H, AttrList, Frames, stationary),
+ gs:config(FrameId, [raise]),
+ gs:config(EntryId, [{setfocus, true}]),
+ error
+ end;
+get_record([], _AttrList, _Frames, Acc) ->
+ {ok, lists:reverse(Acc)}.
+
+
+
+
+
+
+get_pos(Elem, L) ->
+ get_pos(Elem, L, 1).
+
+
+get_pos(Elem, [Elem | _T], N) ->
+ N;
+get_pos(Elem, [_H | T], N) ->
+ get_pos(Elem, T, N + 1).
+
+
+
+
+create_window(mnesia, TableName, AttrList, AttrValues, ListsAsStr, Insert) ->
+ NofAttr = length(AttrList),
+ NofFrames =
+ case NofAttr rem 5 of
+ 0 ->
+ NofAttr div 5;
+ _Rem ->
+ (NofAttr div 5) + 1
+ end,
+
+ WinHeight = get_window_height(NofAttr),
+ FrameHeight = get_frame_height(NofAttr),
+
+ Attr = get_longest_attribute_name(AttrList),
+ LabelWidth = lists:min([?MAX_LABEL_WIDTH,
+ element(1, gs:read(gs:start(),
+ {font_wh, {?FONT, atom_to_list(Attr)}}))]),
+
+ gs:window(win, gs:start(), [{width, ?WIN_WIDTH},
+ {height, WinHeight},
+ {title, "[TV] Record Editor: '" ++
+ atom_to_list(TableName) ++ "'"},
+ {bg, ?DEFAULT_BG_COLOR},
+ {configure, true},
+ {destroy, true},
+ {cursor, arrow}
+ ]),
+
+ create_insert_and_cancel_btns(Insert, WinHeight, FrameHeight),
+ FrameList = create_frames(NofFrames, LabelWidth, AttrList, AttrValues, NofFrames,
+ ListsAsStr, FrameHeight),
+ gs:config(hd(FrameList), [raise]),
+ gs:config(hd(AttrList), [{setfocus, true},
+ {select, {0,100000000}}]),
+ gs:config(win, [{map,true}]),
+ FrameList;
+create_window(ets, TableName, [Attr], [AttrVal], ListsAsStr, Insert) ->
+ gs:window(win, gs:start(), [{width, ?WIN_WIDTH},
+ {height, ?ETS_WIN_HEIGHT},
+ {title, "[TV] Tuple Editor, table '" ++
+ atom_to_list(TableName) ++ "'"},
+ {bg, ?DEFAULT_BG_COLOR},
+ {configure, true},
+ {destroy, true},
+ {cursor, arrow}
+ ]),
+
+ F = gs:frame(win, [{width, ?FRAME_WIDTH},
+ {height, ?ETS_FRAME_HEIGHT},
+ {x, 0},
+ {y, 0},
+ {bg, ?DEFAULT_BG_COLOR},
+ {bw,2},
+ {data, {0, undefined, undefined}}
+ ]),
+
+ create_insert_and_cancel_btns(Insert, ?ETS_WIN_HEIGHT, ?ETS_FRAME_HEIGHT),
+
+ EntryW = get_entry_width(ets, ?FRAME_WIDTH, 0),
+ EntryX = ?X0 - 2,
+
+ EntryText =
+ case AttrVal of
+ undefined ->
+ "";
+ _OtherVal ->
+ case ListsAsStr of
+ true ->
+ tv_io_lib:format("~p", [AttrVal]);
+ false ->
+ lists:flatten(io_lib:write(AttrVal))
+ end
+ end,
+ gs:entry(Attr, F, [{width, EntryW},
+ {height, ?LABEL_HEIGHT},
+ {x, EntryX},
+ {y, ?Y0},
+ {bg, {255,255,255}},
+ {fg, {0,0,0}},
+ {bw, 1},
+ {font, ?FONT},
+ {justify, left},
+ {text, EntryText},
+ {cursor, text},
+ {setfocus, true},
+ {enable, true},
+ {keypress,true},
+ {select, {0,100000000}}
+ ]),
+ gs:config(win, [{map,true}]),
+ [F].
+
+
+
+
+get_insert_btn_coords(WinWidth) ->
+ Middle = round(WinWidth / 2),
+ XInsert = Middle - round(1.5 * ?INSERT_BTN_WIDTH) - ?INSERT_BTN_DIST_BETWEEN,
+ XCancel = Middle - round(0.5 * ?INSERT_BTN_WIDTH),
+ XReset = Middle + round(0.5 * ?INSERT_BTN_WIDTH) + ?INSERT_BTN_DIST_BETWEEN,
+ {XInsert, XCancel, XReset}.
+
+
+
+
+create_insert_and_cancel_btns(Insert, WinHeight, FrameHeight) ->
+ LowerFrameHeight = WinHeight - FrameHeight,
+ Y = ?INSERT_BTN_DIST_FROM_BOTTOM,
+ {XInsert, XCancel, XReset} = get_insert_btn_coords(?WIN_WIDTH),
+
+ {InsertBtnText, InsertBtnData} =
+ case Insert of
+ true ->
+ {"Insert", insert};
+ false ->
+ {"Change", change}
+ end,
+
+ gs:frame(btnframe, win, [{width, ?FRAME_WIDTH},
+ {height, LowerFrameHeight},
+ {x, 0},
+ {y, FrameHeight},
+ {bg, ?DEFAULT_BG_COLOR},
+ {bw,2}
+ ]),
+ gs:button(insert, btnframe, [{width, ?INSERT_BTN_WIDTH},
+ {height, ?INSERT_BTN_HEIGHT},
+ {x, XInsert},
+ {y, Y},
+ {bg, ?DEFAULT_BG_COLOR},
+ {fg, {0,0,0}},
+ {font, ?FONT},
+ {label, {text, InsertBtnText}},
+ {align, center},
+ {data, InsertBtnData}
+ ]),
+ gs:button(cancel, btnframe, [{width, ?INSERT_BTN_WIDTH},
+ {height, ?INSERT_BTN_HEIGHT},
+ {x, XCancel},
+ {y, Y},
+ {bg, ?DEFAULT_BG_COLOR},
+ {fg, {0,0,0}},
+ {font, ?FONT},
+ {label, {text, "Cancel"}},
+ {align, center}
+ ]),
+ gs:button(reset, btnframe, [{width, ?INSERT_BTN_WIDTH},
+ {height, ?INSERT_BTN_HEIGHT},
+ {x, XReset},
+ {y, Y},
+ {bg, ?DEFAULT_BG_COLOR},
+ {fg, {0,0,0}},
+ {font, ?FONT},
+ {label, {text, "Reset"}},
+ {align, center}
+ ]).
+
+
+
+
+
+create_frames(0, _LblW, _AttrList, _AttrValues, _NofFrames, _ListsAsStr, _FrameHeight) ->
+ [];
+create_frames(N, LblW, AttrList, AttrValues, NofFrames, ListsAsStr, FrameHeight) ->
+ F = gs:frame(win, [{width, ?FRAME_WIDTH},
+ {height, FrameHeight},
+ {x, 0},
+ {y, 0},
+ {bg, ?DEFAULT_BG_COLOR},
+ {bw,2}
+ ]),
+ {BId, NId} = create_back_and_next_btns(F, 5, N, NofFrames),
+ gs:config(F, [{data, {LblW, BId, NId}}]),
+ {RemAttrList, RemAttrValues} =
+ create_labels_and_entries(5, AttrList, AttrValues, LblW, F, ListsAsStr),
+ [F | create_frames(N - 1,LblW,RemAttrList,RemAttrValues,NofFrames,ListsAsStr,FrameHeight)].
+
+
+
+
+
+
+create_back_and_next_btns(FrameId, NofEntries, FrameNo, NofFrames) ->
+ Y = ?Y0 + NofEntries * (?LABEL_HEIGHT + 10) + 8,
+ XNext = get_next_btn_xpos(?FRAME_WIDTH),
+ XBack = XNext - ?NEXT_BTN_WIDTH,
+ DataNext = (NofFrames - FrameNo + 1) + 1,
+ DataBack = (NofFrames - FrameNo + 1) - 1,
+ BId =
+ if
+ DataBack =< 0 ->
+ undefined;
+ true ->
+ gs:button(FrameId, [{width, ?NEXT_BTN_WIDTH},
+ {height, ?NEXT_BTN_HEIGHT},
+ {x, XBack},
+ {y, Y},
+ {bg, ?DEFAULT_BG_COLOR},
+ {fg, ?NEXT_BTN_FG},
+ {font, ?FONT},
+ {align, center},
+ {label, {text, "< Back"}},
+ %% {underline, 2},
+ {data, DataBack}
+ ])
+ end,
+ NId =
+ if
+ DataNext > NofFrames ->
+ undefined;
+ true ->
+ gs:button(FrameId, [{width, ?NEXT_BTN_WIDTH},
+ {height, ?NEXT_BTN_HEIGHT},
+ {x, XNext},
+ {y, Y},
+ {bg, ?DEFAULT_BG_COLOR},
+ {fg, ?NEXT_BTN_FG},
+ {font, ?FONT},
+ {align, center},
+ {label, {text, " Next >"}},
+ %% {underline, 1},
+ {data, DataNext}
+ ])
+ end,
+ {BId, NId}.
+
+
+
+
+get_next_btn_xpos(FrameWidth) ->
+ FrameWidth - ?X0 - ?NEXT_BTN_WIDTH.
+
+
+
+get_entry_width(TableType, FrameWidth, LblWidth) ->
+ HorizontalSpacing =
+ case TableType of
+ mnesia ->
+ 10;
+ ets ->
+ 0
+ end,
+ FrameWidth - LblWidth - 2 * ?X0 - HorizontalSpacing.
+
+
+
+create_labels_and_entries(N, [H | T], [VH | VT], LblW, F, ListsAsStr) when N > 0 ->
+ Y = ?Y0 + (5 - N) * (?LABEL_HEIGHT + 10),
+ EntryW = get_entry_width(mnesia, ?FRAME_WIDTH, LblW),
+ EntryX = ?FRAME_WIDTH - EntryW - ?X0 - 2,
+
+ EntryText =
+ case ListsAsStr of
+ true ->
+ tv_io_lib:format("~p", [VH]);
+ false ->
+ lists:flatten(io_lib:write(VH))
+ end,
+ gs:label(F, [{width, LblW},
+ {height, ?LABEL_HEIGHT},
+ {x, ?X0},
+ {y, Y},
+ {bg, ?DEFAULT_BG_COLOR},
+ {fg, {0,0,0}},
+ {align,w},
+ {font, ?FONT},
+ {label, {text, atom_to_list(H)}}
+ ]),
+ gs:entry(H, F, [{width, EntryW},
+ {height, ?LABEL_HEIGHT},
+ {x, EntryX},
+ {y, Y},
+ {bg, {255,255,255}},
+ {fg, {0,0,0}},
+ {bw, 1},
+ {font, ?FONT},
+ {justify, left},
+ {text, EntryText},
+ {cursor, text},
+ {setfocus, false},
+ {enable, true},
+ {keypress,true}
+ ]),
+ create_labels_and_entries(N - 1, T, VT, LblW, F, ListsAsStr);
+create_labels_and_entries(0, RemAttrList, RemAttrValues, _LblW, _F, _ListsAsStr) ->
+ {RemAttrList, RemAttrValues};
+create_labels_and_entries(_N, [], [], _LblW, _F, _ListsAsStr) ->
+ {[], []}.
+
+
+
+
+get_longest_attribute_name(AttrList) ->
+ get_longest_attribute_name(AttrList, 0, undefined).
+
+
+get_longest_attribute_name([H | T], Max, Attr) ->
+ CurrLength = length(atom_to_list(H)),
+ if
+ CurrLength >= Max ->
+ get_longest_attribute_name(T, CurrLength, H);
+ true ->
+ get_longest_attribute_name(T, Max, Attr)
+ end;
+get_longest_attribute_name([], _Max, Attr) ->
+ Attr.
+
+
+
+
+get_window_height(N) ->
+ if
+ N >= 5 ->
+ ?WIN_HEIGHT;
+ true ->
+ ?WIN_HEIGHT - ((5 - N) * (?LABEL_HEIGHT + 10) + ?NEXT_BTN_HEIGHT + 8)
+ end.
+
+
+
+get_frame_height(N) ->
+ if
+ N >= 5 ->
+ ?FRAME_HEIGHT;
+ true ->
+ ?FRAME_HEIGHT - ((5 - N) * (?LABEL_HEIGHT + 10) + ?NEXT_BTN_HEIGHT + 8)
+ end.
+
+
+
+
+set_entry_values(TabType, [H | T], [VH | VT], ListsAsStr) ->
+ EntryText =
+ case VH of
+ undefined when TabType =:= ets ->
+ "";
+ _AnyValue ->
+ case ListsAsStr of
+ true ->
+ tv_io_lib:format("~p", [VH]);
+ false ->
+ lists:flatten(io_lib:write(VH))
+ end
+ end,
+ gs:config(H, [{text, EntryText}]),
+ set_entry_values(TabType, T, VT, ListsAsStr);
+set_entry_values(_TabType, [], [], _ListsAsStr) ->
+ done.
diff --git a/lib/tv/src/tv_table_owner.erl b/lib/tv/src/tv_table_owner.erl
new file mode 100644
index 0000000000..bccac6c236
--- /dev/null
+++ b/lib/tv/src/tv_table_owner.erl
@@ -0,0 +1,122 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(tv_table_owner).
+
+
+
+-export([create/5
+ ]).
+
+
+-export([internal_create/3,
+ start/0,
+ init/0
+ ]).
+
+
+
+-define(REGISTERED_NAME, tv_table_owner).
+
+
+
+create(mnesia, _Node, _LocalNode, _TableName, _Options) ->
+ error;
+create(ets, _Node, true, TabName, Options) ->
+ case catch internal_create(ets, TabName, Options) of
+ {TabName, Pid} when is_pid(Pid) ->
+ {ok, {TabName,Pid}};
+ {TabNo, Pid} when is_pid(Pid) ->
+ {ok, {TabNo,Pid}};
+ _OtherResult ->
+ error
+ end;
+create(ets, Node, false, TabName, Options) ->
+ case catch rpc:block_call(Node, ?MODULE, internal_create, [ets, TabName, Options]) of
+ {TabName, Pid} when is_pid(Pid) ->
+ {ok, {TabName,Pid}};
+ {TabNo, Pid} when is_pid(Pid) ->
+ {ok, {TabNo,Pid}};
+ _OtherResult ->
+ error
+ end.
+
+
+
+
+
+internal_create(ets, TabName, Options) ->
+ ?MODULE:start(),
+ ?REGISTERED_NAME ! {create, self(), ets, TabName, Options},
+ receive
+ {?REGISTERED_NAME, Result} ->
+ Result
+ after
+ 5000 ->
+ error
+ end.
+
+
+
+
+
+
+start() ->
+ case whereis(?REGISTERED_NAME) of
+ undefined ->
+ ServerPid = spawn(?MODULE, init, []),
+ case catch register(?REGISTERED_NAME, ServerPid) of
+ true ->
+ ok;
+ {'EXIT', _Reason} ->
+ exit(ServerPid, kill),
+ timer:sleep(500),
+ start()
+ end;
+ Pid when is_pid(Pid) ->
+ ok
+ end.
+
+
+
+
+
+
+
+
+init() ->
+ %% Currently no initialisations!
+ loop().
+
+
+
+
+
+
+loop() ->
+ receive
+
+ {create, Sender, ets, TabName, Options} ->
+ Sender ! {?REGISTERED_NAME, (catch ets:new(TabName, Options))},
+ loop();
+
+
+ _Other ->
+ loop()
+
+ end.
+
diff --git a/lib/tv/src/tv_utils.erl b/lib/tv/src/tv_utils.erl
new file mode 100644
index 0000000000..fd232bde69
--- /dev/null
+++ b/lib/tv/src/tv_utils.erl
@@ -0,0 +1,176 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(tv_utils).
+
+
+
+-export([notify/3]).
+
+
+
+ %% Minimum size of help windows
+-define(wwin, 300).
+-define(hwin, 180).
+
+ %% Button sizes
+-define(wbut, 60).
+-define(hbut, 30).
+
+-define(pad, 10).
+
+
+%----------------------------------------
+% notify(S,Strings) -> ok
+% S = pid() GS
+% Strings = string() | [string()]
+% A notification window contains a message to the user.
+% Will lock the GUI until the user confirms the message by
+% pressing the 'Ok' button.
+%----------------------------------------
+notify(S,Title,Strings) ->
+ W = required_width(Strings, ?wwin),
+ Htop = round(2 * ?hwin / 3),
+ Hbot = ?hwin - Htop,
+
+ %% Open a new window
+ Win = gs:create(window,S,[{width, W},
+ {height, ?hwin},
+ {title, Title},
+ {data, notifywin}
+ ]),
+
+ %% Top frame containing a label
+ Top = gs:create(frame,Win,[{width, W},
+ {height, Htop},
+ {x, 0},
+ {y, 0},
+ {data, notifywin},
+ {keypress, true}
+ ]),
+
+ Lbl = gs:create(label,Top,[{width,W},
+ {height, Htop - 2 * ?pad},
+ {x, 0},
+ {y, ?pad},
+ {align, c},
+ {justify, center},
+ {data, notifywin},
+ {keypress, true}
+ ]),
+
+ gs:config(Lbl, {label, {text, insert_newlines(Strings)}}),
+
+ %% Bottom frame containing an 'Ok' button
+ Bot = gs:create(frame,Win,[{width, W},
+ {height, Hbot},
+ {x, 0},
+ {y, Htop}
+ ]),
+ gs:create(button,Bot,[{width, ?wbut},
+ {height, ?hbut},
+ {x, W / 2 - ?wbut/2},
+ {y, Hbot / 2 - ?hbut / 2},
+ {label, {text, "OK"}},
+ {data, notifywin},
+ {keypress, true}]),
+
+ gs:config(Win, [{map,true}]),
+
+ event_loop(Win,null).
+
+
+
+
+insert_newlines([String|Rest]) when is_list(String), Rest=/=[]->
+ String ++ "\n" ++ insert_newlines(Rest);
+insert_newlines([Last]) ->
+ [Last];
+insert_newlines(Other) ->
+ Other.
+
+
+
+
+event_loop(Win,Entry) ->
+ receive
+
+ %%
+ %% Notify window
+ %%
+
+ %% 'Ok' pressed in notify window
+ {gs,_Obj,_Event,notifywin,["OK"|_]} ->
+ gs:destroy(Win),
+ ok;
+
+ %% 'Window manager destroy' received in notify window
+ {gs,_Obj,destroy,notifywin,_} ->
+ gs:destroy(Win),
+ ok;
+
+ %% 'Return' pressed in notify or confirm window
+ {gs,_Obj,_Event,helpwin,['Return'|_]} ->
+ gs:destroy(Win),
+ ok;
+
+
+ %%
+ %% Common or partly common events
+ %%
+
+ %% 'Window manager destroy' received in notify,
+ %% confirm,confirm_exit or request window
+ {gs,_Obj,destroy,_,_} ->
+ gs:destroy(Win),
+ cancel;
+
+ %% Flush any other GS events
+ {gs,_Obj,_Event,_Data,_Arg} ->
+ event_loop(Win,Entry)
+ end.
+
+
+
+
+%----------------------------------------
+% required_width(Strings,Min) -> Req
+% Strings = string() | [string()]
+% Min = Req = integer()
+% Returns the minimum required width in pixels for a help window,
+% which is the maximum of Min and the required width for Strings.
+% NOTE: Font dependant really!
+%----------------------------------------
+required_width([First|Rest],Min) when is_list(First) ->
+ Req = 7*length(First), % 7 pixels per character
+ if
+ Req>Min ->
+ required_width(Rest,Req);
+ true ->
+ required_width(Rest,Min)
+ end;
+required_width([],Min) ->
+ Min;
+required_width(String,Min) ->
+ Req = 7*length(String),
+ if
+ Req>Min ->
+ Req;
+ true ->
+ Min
+ end.
+
diff --git a/lib/tv/vsn.mk b/lib/tv/vsn.mk
new file mode 100644
index 0000000000..be1981b755
--- /dev/null
+++ b/lib/tv/vsn.mk
@@ -0,0 +1,20 @@
+#
+# %CopyrightBegin%
+#
+# Copyright Ericsson AB 1997-2009. All Rights Reserved.
+#
+# The contents of this file are subject to the Erlang Public License,
+# Version 1.1, (the "License"); you may not use this file except in
+# compliance with the License. You should have received a copy of the
+# Erlang Public License along with this software. If not, it can be
+# retrieved online at http://www.erlang.org/.
+#
+# Software distributed under the License is distributed on an "AS IS"
+# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+# the License for the specific language governing rights and limitations
+# under the License.
+#
+# %CopyrightEnd%
+#
+
+TV_VSN = 2.1.4.4