aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/Makefile4
-rw-r--r--lib/appmon/AUTHORS5
-rw-r--r--lib/appmon/BUGS_AND_FIXES5
-rw-r--r--lib/appmon/Makefile33
-rw-r--r--lib/appmon/doc/html/.gitignore0
-rw-r--r--lib/appmon/doc/man3/.gitignore0
-rw-r--r--lib/appmon/doc/pdf/.gitignore0
-rw-r--r--lib/appmon/doc/src/Makefile120
-rw-r--r--lib/appmon/doc/src/app_win.gifbin4210 -> 0 bytes
-rw-r--r--lib/appmon/doc/src/app_win.ps680
-rw-r--r--lib/appmon/doc/src/appmon.xml67
-rw-r--r--lib/appmon/doc/src/appmon_chapter.xml328
-rw-r--r--lib/appmon/doc/src/book.xml47
-rw-r--r--lib/appmon/doc/src/fascicules.xml18
-rw-r--r--lib/appmon/doc/src/listbox_win.gifbin4437 -> 0 bytes
-rw-r--r--lib/appmon/doc/src/listbox_win.ps741
-rw-r--r--lib/appmon/doc/src/main_win.gifbin3011 -> 0 bytes
-rw-r--r--lib/appmon/doc/src/main_win.ps691
-rw-r--r--lib/appmon/doc/src/note.gifbin1539 -> 0 bytes
-rw-r--r--lib/appmon/doc/src/notes.xml300
-rw-r--r--lib/appmon/doc/src/part.xml37
-rw-r--r--lib/appmon/doc/src/part_notes.xml39
-rw-r--r--lib/appmon/doc/src/pinfo_win.gifbin7351 -> 0 bytes
-rw-r--r--lib/appmon/doc/src/pinfo_win.ps1353
-rw-r--r--lib/appmon/doc/src/ref_man.xml37
-rw-r--r--lib/appmon/doc/src/warning.gifbin1498 -> 0 bytes
-rw-r--r--lib/appmon/ebin/.gitignore0
-rw-r--r--lib/appmon/info5
-rw-r--r--lib/appmon/priv/Makefile65
-rw-r--r--lib/appmon/priv/appmon.gifbin125 -> 0 bytes
-rw-r--r--lib/appmon/priv/appmon.tool24
-rw-r--r--lib/appmon/priv/appmon_help.txt154
-rw-r--r--lib/appmon/priv/blank.html6
-rw-r--r--lib/appmon/priv/info_frames.html9
-rw-r--r--lib/appmon/priv/main_frame.html9
-rw-r--r--lib/appmon/priv/start_info.html31
-rw-r--r--lib/appmon/src/Makefile103
-rw-r--r--lib/appmon/src/appmon.app.src24
-rw-r--r--lib/appmon/src/appmon.appup.src18
-rw-r--r--lib/appmon/src/appmon.erl1081
-rw-r--r--lib/appmon/src/appmon_a.erl1122
-rw-r--r--lib/appmon/src/appmon_dg.erl205
-rw-r--r--lib/appmon/src/appmon_dg.hrl45
-rw-r--r--lib/appmon/src/appmon_lb.erl696
-rw-r--r--lib/appmon/src/appmon_place.erl192
-rw-r--r--lib/appmon/src/appmon_txt.erl307
-rw-r--r--lib/appmon/src/appmon_web.erl1031
-rw-r--r--lib/appmon/src/process_info.erl662
-rw-r--r--lib/appmon/vsn.mk1
-rw-r--r--lib/compiler/doc/src/compile.xml12
-rw-r--r--lib/compiler/src/beam_block.erl15
-rw-r--r--lib/compiler/src/beam_flatten.erl1
-rw-r--r--lib/compiler/src/beam_jump.erl12
-rw-r--r--lib/compiler/src/beam_type.erl6
-rw-r--r--lib/compiler/src/beam_utils.erl6
-rw-r--r--lib/compiler/src/compile.erl6
-rw-r--r--lib/compiler/test/compilation_SUITE.erl10
-rw-r--r--lib/compiler/test/compile_SUITE.erl6
-rw-r--r--lib/debugger/src/Makefile14
-rw-r--r--lib/debugger/src/dbg_ui_break.erl98
-rw-r--r--lib/debugger/src/dbg_ui_break_win.erl314
-rw-r--r--lib/debugger/src/dbg_ui_edit.erl91
-rw-r--r--lib/debugger/src/dbg_ui_edit_win.erl128
-rw-r--r--lib/debugger/src/dbg_ui_filedialog_win.erl340
-rw-r--r--lib/debugger/src/dbg_ui_interpret.erl161
-rw-r--r--lib/debugger/src/dbg_ui_mon.erl738
-rw-r--r--lib/debugger/src/dbg_ui_mon_win.erl573
-rw-r--r--lib/debugger/src/dbg_ui_settings.erl162
-rw-r--r--lib/debugger/src/dbg_ui_trace.erl814
-rw-r--r--lib/debugger/src/dbg_ui_trace_win.erl1595
-rw-r--r--lib/debugger/src/dbg_ui_view.erl255
-rw-r--r--lib/debugger/src/dbg_ui_win.erl281
-rw-r--r--lib/debugger/src/dbg_ui_winman.erl182
-rw-r--r--lib/debugger/src/dbg_wx_mon_win.erl9
-rw-r--r--lib/debugger/src/dbg_wx_trace.erl26
-rw-r--r--lib/debugger/src/debugger.app.src20
-rw-r--r--lib/debugger/src/debugger.erl38
-rw-r--r--lib/dialyzer/doc/manual.txt6
-rw-r--r--lib/dialyzer/doc/src/dialyzer.xml6
-rw-r--r--lib/dialyzer/src/Makefile5
-rw-r--r--lib/dialyzer/src/dialyzer.erl15
-rw-r--r--lib/dialyzer/src/dialyzer_cl_parse.erl19
-rw-r--r--lib/dialyzer/src/dialyzer_gui.erl1381
-rw-r--r--lib/et/src/Makefile5
-rw-r--r--lib/et/src/et.app.src4
-rw-r--r--lib/et/src/et_collector.erl2
-rw-r--r--lib/et/src/et_gs_contents_viewer.erl602
-rw-r--r--lib/et/src/et_gs_viewer.erl1498
-rw-r--r--lib/et/src/et_viewer.erl19
-rw-r--r--lib/et/src/modules.mk4
-rw-r--r--lib/hipe/tools/Makefile3
-rw-r--r--lib/hipe/tools/hipe_tool.erl525
-rw-r--r--lib/megaco/doc/src/definitions/term.defs3
-rw-r--r--lib/observer/doc/src/Makefile4
-rw-r--r--lib/observer/doc/src/etop.xml19
-rw-r--r--lib/observer/doc/src/etop_5.gifbin9576 -> 0 bytes
-rw-r--r--lib/observer/doc/src/etop_lines.gifbin14552 -> 0 bytes
-rw-r--r--lib/observer/doc/src/etop_main.gifbin12947 -> 0 bytes
-rw-r--r--lib/observer/doc/src/etop_opt.gifbin13572 -> 0 bytes
-rw-r--r--lib/observer/doc/src/etop_ug.xml44
-rwxr-xr-xlib/observer/priv/bin/getop4
-rw-r--r--lib/observer/priv/bin/getop.bat2
-rw-r--r--lib/observer/src/Makefile4
-rw-r--r--lib/observer/src/etop.erl5
-rw-r--r--lib/observer/src/etop_defs.hrl6
-rw-r--r--lib/observer/src/etop_gui.erl374
-rw-r--r--lib/observer/src/etop_txt.erl13
-rw-r--r--lib/observer/src/observer.app.src3
-rw-r--r--lib/pman/AUTHORS9
-rw-r--r--lib/pman/Makefile34
-rw-r--r--lib/pman/doc/html/.gitignore0
-rw-r--r--lib/pman/doc/man3/.gitignore0
-rw-r--r--lib/pman/doc/pdf/.gitignore0
-rw-r--r--lib/pman/doc/src/Makefile116
-rw-r--r--lib/pman/doc/src/book.xml43
-rw-r--r--lib/pman/doc/src/fascicules.xml18
-rw-r--r--lib/pman/doc/src/main_window.gifbin14431 -> 0 bytes
-rw-r--r--lib/pman/doc/src/main_window.ps1573
-rw-r--r--lib/pman/doc/src/note.gifbin1539 -> 0 bytes
-rw-r--r--lib/pman/doc/src/notes.xml211
-rw-r--r--lib/pman/doc/src/options.gifbin5218 -> 0 bytes
-rw-r--r--lib/pman/doc/src/options.ps829
-rw-r--r--lib/pman/doc/src/part.xml37
-rw-r--r--lib/pman/doc/src/part_notes.xml39
-rw-r--r--lib/pman/doc/src/pman.xml88
-rw-r--r--lib/pman/doc/src/pman_chapter.xml377
-rw-r--r--lib/pman/doc/src/ref_man.xml37
-rw-r--r--lib/pman/doc/src/toolbar.gifbin6848 -> 0 bytes
-rw-r--r--lib/pman/doc/src/trace.gifbin9829 -> 0 bytes
-rw-r--r--lib/pman/doc/src/trace.ps1312
-rw-r--r--lib/pman/doc/src/warning.gifbin1498 -> 0 bytes
-rw-r--r--lib/pman/ebin/.gitignore0
-rw-r--r--lib/pman/info2
-rw-r--r--lib/pman/priv/Makefile58
-rw-r--r--lib/pman/priv/pman.gifbin199 -> 0 bytes
-rw-r--r--lib/pman/priv/pman.tool6
-rw-r--r--lib/pman/src/Makefile112
-rw-r--r--lib/pman/src/assert.hrl81
-rw-r--r--lib/pman/src/pman.app.src40
-rw-r--r--lib/pman/src/pman.appup.src19
-rw-r--r--lib/pman/src/pman.erl132
-rw-r--r--lib/pman/src/pman_buf.erl117
-rw-r--r--lib/pman/src/pman_buf.hrl29
-rw-r--r--lib/pman/src/pman_buf_buffer.erl102
-rw-r--r--lib/pman/src/pman_buf_converter.erl190
-rw-r--r--lib/pman/src/pman_buf_printer.erl91
-rw-r--r--lib/pman/src/pman_buf_utils.erl106
-rw-r--r--lib/pman/src/pman_main.erl789
-rw-r--r--lib/pman/src/pman_module_info.erl133
-rw-r--r--lib/pman/src/pman_options.erl395
-rw-r--r--lib/pman/src/pman_options.hrl34
-rw-r--r--lib/pman/src/pman_process.erl317
-rw-r--r--lib/pman/src/pman_relay.erl127
-rw-r--r--lib/pman/src/pman_relay_server.erl57
-rw-r--r--lib/pman/src/pman_shell.erl827
-rw-r--r--lib/pman/src/pman_tool.erl146
-rw-r--r--lib/pman/src/pman_win.erl677
-rw-r--r--lib/pman/src/pman_win.hrl39
-rw-r--r--lib/pman/vsn.mk1
-rw-r--r--lib/sasl/test/release_handler_SUITE.erl8
-rw-r--r--lib/test_server/src/ts_lib.erl3
-rw-r--r--lib/toolbar/AUTHORS3
-rw-r--r--lib/toolbar/Makefile36
-rw-r--r--lib/toolbar/doc/html/.gitignore0
-rw-r--r--lib/toolbar/doc/man3/.gitignore0
-rw-r--r--lib/toolbar/doc/pdf/.gitignore0
-rw-r--r--lib/toolbar/doc/src/Makefile115
-rw-r--r--lib/toolbar/doc/src/bar.gifbin4591 -> 0 bytes
-rw-r--r--lib/toolbar/doc/src/bar.ps846
-rw-r--r--lib/toolbar/doc/src/book.xml49
-rw-r--r--lib/toolbar/doc/src/create_tool.gifbin5925 -> 0 bytes
-rw-r--r--lib/toolbar/doc/src/create_tool.ps5050
-rw-r--r--lib/toolbar/doc/src/fascicules.xml18
-rw-r--r--lib/toolbar/doc/src/note.gifbin1539 -> 0 bytes
-rw-r--r--lib/toolbar/doc/src/notes.xml180
-rw-r--r--lib/toolbar/doc/src/part.xml38
-rw-r--r--lib/toolbar/doc/src/part_notes.xml38
-rw-r--r--lib/toolbar/doc/src/ref_man.xml38
-rw-r--r--lib/toolbar/doc/src/toolbar.xml101
-rw-r--r--lib/toolbar/doc/src/toolbar_chapter.xml145
-rw-r--r--lib/toolbar/doc/src/warning.gifbin1498 -> 0 bytes
-rw-r--r--lib/toolbar/ebin/.gitignore0
-rw-r--r--lib/toolbar/info2
-rw-r--r--lib/toolbar/src/Makefile93
-rw-r--r--lib/toolbar/src/canvasbutton.erl239
-rw-r--r--lib/toolbar/src/toolbar.app.src30
-rw-r--r--lib/toolbar/src/toolbar.appup.src19
-rw-r--r--lib/toolbar/src/toolbar.erl579
-rw-r--r--lib/toolbar/src/toolbar.hrl34
-rw-r--r--lib/toolbar/src/toolbar_graphics.erl404
-rw-r--r--lib/toolbar/src/toolbar_lib.erl223
-rw-r--r--lib/toolbar/src/toolbar_toolconfig.erl549
-rw-r--r--lib/toolbar/vsn.mk10
-rw-r--r--lib/tools/test/xref_SUITE.erl2
-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/Makefile138
-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.gifbin6315 -> 0 bytes
-rw-r--r--lib/tv/doc/src/info_window.ps814
-rw-r--r--lib/tv/doc/src/note.gifbin1539 -> 0 bytes
-rw-r--r--lib/tv/doc/src/notes.xml288
-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.gifbin2789 -> 0 bytes
-rw-r--r--lib/tv/doc/src/set_poll_int.ps483
-rw-r--r--lib/tv/doc/src/table_visualizer_chapter.xml658
-rw-r--r--lib/tv/doc/src/tv.gifbin17015 -> 0 bytes
-rw-r--r--lib/tv/doc/src/tv.xml72
-rw-r--r--lib/tv/doc/src/tv_create_table.gifbin6211 -> 0 bytes
-rw-r--r--lib/tv/doc/src/tv_create_table.ps1120
-rw-r--r--lib/tv/doc/src/tv_record_editor_mnesia.gifbin4982 -> 0 bytes
-rw-r--r--lib/tv/doc/src/tv_record_editor_mnesia.ps897
-rw-r--r--lib/tv/doc/src/tv_row_marked.gifbin12354 -> 0 bytes
-rw-r--r--lib/tv/doc/src/tv_row_marked.ps1611
-rw-r--r--lib/tv/doc/src/tv_row_marked_popup.gifbin13216 -> 0 bytes
-rw-r--r--lib/tv/doc/src/tv_row_marked_popup.ps1324
-rw-r--r--lib/tv/doc/src/tv_search_result.gifbin23525 -> 0 bytes
-rw-r--r--lib/tv/doc/src/tv_search_result.ps2739
-rw-r--r--lib/tv/doc/src/tv_search_window.gifbin5054 -> 0 bytes
-rw-r--r--lib/tv/doc/src/tv_search_window.ps975
-rw-r--r--lib/tv/doc/src/tv_start.gifbin8089 -> 0 bytes
-rw-r--r--lib/tv/doc/src/tv_start.ps828
-rw-r--r--lib/tv/doc/src/tv_start_mnesia.gifbin8080 -> 0 bytes
-rw-r--r--lib/tv/doc/src/tv_start_mnesia.ps835
-rw-r--r--lib/tv/doc/src/tv_start_other_node.gifbin17327 -> 0 bytes
-rw-r--r--lib/tv/doc/src/tv_start_other_node.ps2316
-rw-r--r--lib/tv/doc/src/tv_start_pid_sorted.gifbin13775 -> 0 bytes
-rw-r--r--lib/tv/doc/src/tv_start_pid_sorted.ps1853
-rw-r--r--lib/tv/doc/src/tv_start_system.gifbin12372 -> 0 bytes
-rw-r--r--lib/tv/doc/src/tv_start_system.ps1330
-rw-r--r--lib/tv/doc/src/tv_start_system_unreadable.gifbin13890 -> 0 bytes
-rw-r--r--lib/tv/doc/src/tv_start_system_unreadable.ps1377
-rw-r--r--lib/tv/doc/src/tv_table_browser.gifbin15457 -> 0 bytes
-rw-r--r--lib/tv/doc/src/tv_table_browser.ps2024
-rw-r--r--lib/tv/doc/src/tv_table_browser_updated.gifbin15857 -> 0 bytes
-rw-r--r--lib/tv/doc/src/tv_table_browser_updated.ps2124
-rw-r--r--lib/tv/doc/src/tv_table_loaded.gifbin15322 -> 0 bytes
-rw-r--r--lib/tv/doc/src/tv_table_loaded.ps1430
-rw-r--r--lib/tv/doc/src/tv_table_sorted.gifbin15797 -> 0 bytes
-rw-r--r--lib/tv/doc/src/tv_table_sorted.ps1502
-rw-r--r--lib/tv/doc/src/warning.gifbin1498 -> 0 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.gifbin1297 -> 0 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.gifbin179 -> 0 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.erl1271
-rw-r--r--lib/tv/src/tv_db_int_def.hrl80
-rw-r--r--lib/tv/src/tv_db_search.erl475
-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.erl770
-rw-r--r--lib/tv/src/tv_info.erl884
-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.erl223
-rw-r--r--lib/tv/src/tv_io_lib_format.erl386
-rw-r--r--lib/tv/src/tv_io_lib_pretty.erl171
-rw-r--r--lib/tv/src/tv_ip.erl242
-rw-r--r--lib/tv/src/tv_main.erl1821
-rw-r--r--lib/tv/src/tv_main.hrl285
-rw-r--r--lib/tv/src/tv_mnesia_rpc.erl106
-rw-r--r--lib/tv/src/tv_new_table.erl666
-rw-r--r--lib/tv/src/tv_nodewin.erl412
-rw-r--r--lib/tv/src/tv_pb.erl663
-rw-r--r--lib/tv/src/tv_pb_funcs.erl1056
-rw-r--r--lib/tv/src/tv_pb_int_def.hrl99
-rw-r--r--lib/tv/src/tv_pc.erl795
-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.erl489
-rw-r--r--lib/tv/src/tv_pd.erl1127
-rw-r--r--lib/tv/src/tv_pd_display.erl1066
-rw-r--r--lib/tv/src/tv_pd_frames.erl482
-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.erl305
-rw-r--r--lib/tv/src/tv_pg.erl430
-rw-r--r--lib/tv/src/tv_pg_gridfcns.erl1918
-rw-r--r--lib/tv/src/tv_pg_int_def.hrl92
-rw-r--r--lib/tv/src/tv_poll_dialog.erl363
-rw-r--r--lib/tv/src/tv_pw.erl328
-rw-r--r--lib/tv/src/tv_pw_int_def.hrl55
-rw-r--r--lib/tv/src/tv_pw_window.erl277
-rw-r--r--lib/tv/src/tv_rec_edit.erl754
-rw-r--r--lib/tv/src/tv_table_owner.erl122
-rw-r--r--lib/tv/src/tv_utils.erl179
-rw-r--r--lib/tv/vsn.mk1
313 files changed, 143 insertions, 86316 deletions
diff --git a/lib/Makefile b/lib/Makefile
index ec26a01dc6..5128241563 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -28,10 +28,10 @@ ERLANG_APPLICATIONS = tools test_server common_test runtime_tools \
inets xmerl edoc erl_docgen
# These are only build if -a is given to otp_build or make is used directly
-ALL_ERLANG_APPLICATIONS = snmp otp_mibs appmon erl_interface asn1 jinterface \
+ALL_ERLANG_APPLICATIONS = snmp otp_mibs erl_interface asn1 jinterface \
wx debugger reltool gs \
ic mnesia crypto orber os_mon parsetools syntax_tools \
- pman public_key ssl toolbar tv observer odbc diameter \
+ public_key ssl observer odbc diameter \
cosTransactions cosEvent cosTime cosNotification \
cosProperty cosFileTransfer cosEventDomain et megaco webtool \
eunit ssh typer percept eldap dialyzer hipe
diff --git a/lib/appmon/AUTHORS b/lib/appmon/AUTHORS
deleted file mode 100644
index b727dae36d..0000000000
--- a/lib/appmon/AUTHORS
+++ /dev/null
@@ -1,5 +0,0 @@
-Original Authors and Contributors:
-
-Peter Lundell
-Stefan Anbratt
-Gunilla Arendt
diff --git a/lib/appmon/BUGS_AND_FIXES b/lib/appmon/BUGS_AND_FIXES
deleted file mode 100644
index fdac7f34c5..0000000000
--- a/lib/appmon/BUGS_AND_FIXES
+++ /dev/null
@@ -1,5 +0,0 @@
-
-***) reverse the list of children for a process, to match the starting
-order.
-
-***)
diff --git a/lib/appmon/Makefile b/lib/appmon/Makefile
deleted file mode 100644
index 62033ab92e..0000000000
--- a/lib/appmon/Makefile
+++ /dev/null
@@ -1,33 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1996-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
-
-# ----------------------------------------------------
-# Macros
-# ----------------------------------------------------
-
-SUB_DIRECTORIES = src priv doc/src
-
-SPECIAL_TARGETS =
-
-# ----------------------------------------------------
-# Default Subdir Targets
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_subdir.mk
-
diff --git a/lib/appmon/doc/html/.gitignore b/lib/appmon/doc/html/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/appmon/doc/html/.gitignore
+++ /dev/null
diff --git a/lib/appmon/doc/man3/.gitignore b/lib/appmon/doc/man3/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/appmon/doc/man3/.gitignore
+++ /dev/null
diff --git a/lib/appmon/doc/pdf/.gitignore b/lib/appmon/doc/pdf/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/appmon/doc/pdf/.gitignore
+++ /dev/null
diff --git a/lib/appmon/doc/src/Makefile b/lib/appmon/doc/src/Makefile
deleted file mode 100644
index 7c93abe6d8..0000000000
--- a/lib/appmon/doc/src/Makefile
+++ /dev/null
@@ -1,120 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1997-2012. 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=$(APPMON_VSN)
-APPLICATION=appmon
-
-# ----------------------------------------------------
-# Release directory specification
-# ----------------------------------------------------
-RELSYSDIR = $(RELEASE_PATH)/lib/$(APPLICATION)-$(VSN)
-
-# ----------------------------------------------------
-# Target Specs
-# ----------------------------------------------------
-XML_APPLICATION_FILES = ref_man.xml
-XML_REF3_FILES = appmon.xml
-
-XML_PART_FILES = \
- part.xml \
- part_notes.xml
-
-XML_CHAPTER_FILES = \
- appmon_chapter.xml \
- notes.xml
-
-BOOK_FILES = book.xml
-
-XML_FILES = $(BOOK_FILES) $(XML_APPLICATION_FILES) $(XML_REF3_FILES) \
- $(XML_PART_FILES) $(XML_CHAPTER_FILES)
-
-GIF_FILES = \
- app_win.gif \
- listbox_win.gif \
- main_win.gif \
- pinfo_win.gif \
- note.gif
-
-# ----------------------------------------------------
-
-HTML_FILES = $(XML_APPLICATION_FILES:%.xml=$(HTMLDIR)/%.html) \
- $(XML_PART_FILES:%.xml=$(HTMLDIR)/%.html)
-
-INFO_FILE = ../../info
-
-MAN3_FILES = $(XML_REF3_FILES:%.xml=$(MAN3DIR)/%.3)
-
-HTML_REF_MAN_FILE = $(HTMLDIR)/index.html
-
-TOP_PDF_FILE = $(PDFDIR)/$(APPLICATION)-$(VSN).pdf
-
-# ----------------------------------------------------
-# FLAGS
-# ----------------------------------------------------
-XML_FLAGS +=
-
-# ----------------------------------------------------
-# Targets
-# ----------------------------------------------------
-$(HTMLDIR)/%.gif: %.gif
- $(INSTALL_DATA) $< $@
-
-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 *~
- rm -f $(JD_HTML) $(JD_PACK)
-
-man: $(MAN3_FILES)
-
-gifs: $(GIF_FILES:%=$(HTMLDIR)/%)
-
-debug opt:
-
-# ----------------------------------------------------
-# Release Target
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_release_targets.mk
-
-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) $(MAN3DIR)/* "$(RELEASE_PATH)/man/man3"
-
-release_spec:
-
diff --git a/lib/appmon/doc/src/app_win.gif b/lib/appmon/doc/src/app_win.gif
deleted file mode 100644
index 06f21d04a9..0000000000
--- a/lib/appmon/doc/src/app_win.gif
+++ /dev/null
Binary files differ
diff --git a/lib/appmon/doc/src/app_win.ps b/lib/appmon/doc/src/app_win.ps
deleted file mode 100644
index 73d4cad278..0000000000
--- a/lib/appmon/doc/src/app_win.ps
+++ /dev/null
@@ -1,680 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Creator: (ImageMagick)
-%%Title: (./app_win.tmp.eps)
-%%CreationDate: (Tue Jun 12 17:59:02 2001)
-%%BoundingBox: 0 46 300 384
-%%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 46 300 384
-userdict begin
-%%BeginData:
-DisplayImage
-0 46
-300.000000 338.000000
-12
-382 431
-1
-0
-0
-16
-ffffff
-000000
-e8e3dc
-708090
-b03060
-d9d9d9
-b3b3b3
-7f7f7f
-a3a3a3
-828282
-000000
-000000
-000000
-000000
-000000
-000000
-04ff04ff04ff04de05000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500041a050c04d1050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000408
-050c04050500040a0500040a050104030505040105050401050104040501040305030403
-050104020501044a05010400050104000501040005010411050104050504040205010404
-050104050501040005010409050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000407050004020500040205000402
-050004050500040a05000409050304020501040205010400050104020501040005010404
-050104020501040105010402050204010501044a05010403050104000501041105010403
-050104040500040805010408050104080500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004080500040205000402
-050004020500040505000403050204030500040905000401050004020501040205010400
-050104020501040005020402050204010501040305010401050204010501040105010404
-050004000502040005020401050104020501040105030401050104000501040105010400
-050104060503040105010400050104060501040005010400050104000501040005010400
-050104020503040105010400050504020500040605000400050104010501040005010400
-050104000503040005010409050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000407050004020500040205000402
-050004050500040205040402050004080501040105010401050104020501040005010402
-050104000502040205020401050104030501040105010400050004000501040105010404
-050104010501040105010400050104020501040005010401050104000502040005010400
-050204000501040405010401050104000502040005010404050104000502040005010400
-050104000502040005010400050104010501040005040400050104020500040205010400
-050004000500040005010400050104000502040005060400050104080500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004080504040205000402050004050500040105060401050004080501040105010401
-050504010505040105030400050304010501040305010401050104000500040005010408
-050104010501040105010401050104000501040505010400050104010501040005010401
-050104040501040105010400050104010501040405010401050104000501040005010400
-050104010501040005010401050104000502040205010402050004010500040105000401
-050004000501040005010401050104000502040105010400050104090500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004070500040605000402050004050500040105060401050004080505040105010405
-050104050501040005000400050004000501040105010403050104010501040105020408
-050104010501040105010401050104000501040205040400050104010501040005010401
-050104040501040105010400050104010501040405010401050104000501040005010400
-050104010501040005050400050104030501040205000400050004020500040105000400
-050104000501040105010400050104020501040005010408050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000408
-050004060500040205000405050004010506040105000407050104030501040005010405
-050104050501040005020400050104010501040305010401050104010502040805010401
-050104010501040205020402050104010501040005010401050104000501040105010404
-050104010501040005010401050104040501040105010400050104000501040005010401
-050104000501040405010403050104020500040005000401050104000500040105010400
-050104010501040005010402050104000501040905000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040705000406
-050004020500040505000402050404020500040705010403050104000501040505010405
-050104010500040105010402050104010501040205010402050104010501040405010401
-050104010501040205020402050104010501040005020400050104000502040005010404
-050104010501040005010401050104040501040005020400050104000501040005020400
-050104000501040105010400050104030501040005000400050004010501040005010402
-050104000501040005020400050104020501040005010408050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000408
-050804020500040505000403050204030500040705010403050104000501040505010405
-050104010500040105010403050304030501040205010401050104040501040105010401
-050104030501040305020400050304000501040105010400050104060503040105010401
-050104050501040005010400050104000501040005010400050104020503040105010404
-050104020500040805010401050104000501040005010402050104000501040905000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-05000400050004070500040a050004050500040a050004530500040a0501040405010442
-050404200500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004080500040a050004050500040a050004520501040a
-050104040501046905000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-05000400050004000500040005000400050004070500040a05000405050c04510501040b
-050104040501046805000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-0500040005000400050004000500040005000408050c04e5050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-0500040005000400050004000500040005000400050004000500040005000400050004ff
-04ff04ff041303ff03ff03fb00ff00ff00fa0900000105ff05790901000105ff05790901
-000105ff05790901000105ff05790901000105ff05790901000105040104050401000503
-010205120102050b01000506010005ff051801000502010005090102050c090100010504
-0100050f01000511010005020100050a010005ff0520010005020100050b0100050c0901
-000105040100050601020505010005030102050a01000502010005010100050001010502
-0104050201020503010205020100050001010503010205ff050301000502010005020102
-050501000502010005000101050509010001050401000508010005050100050201000502
-010005090100050201000501010105010100050301000506010005020100050201000501
-010105010100050101000502010005ff0502010005020100050101000502010005040100
-050201010501010005040901000105040103050501000505010005020100050201000509
-010005020100050101000502010005030100050601000502010005020100050101000502
-01000501010005ff05060104050101000502010005040100050201000502010005040901
-000105040100050801000505010005020104050901000502010005010100050201000503
-010005060100050201000502010005010100050201000502010205ff0503010005020100
-050101040504010005020100050201000504090100010504010005080100050501000502
-0100050d0100050201000501010005020100050301000506010005020100050201000501
-0100050201000505010005ff050201000502010005010100050801000502010005020100
-050409010001050401000508010005050100050201000502010005090100050201000501
-010105010100050301000506010005020100050201000501010005020100050101000502
-010005ff0502010005020100050101000502010005040100050201010501010005040901
-000105040100050801000505010005030102050b01020502010005000101050501010504
-01000503010205020100050201000502010205ff05030100050201000502010205050100
-0502010005000101050509010001052f010005ff053e0100050809010001052f010005ff
-053e0100050809010001052f010005ff053e010005080901000105ff05790901000105ff
-05790901000105ff05790901000109ff097b000009ff097c02ff02ff02ff02ff02ff02ff
-02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02730800000008000000080000000800
-000008000000080000000800000008000000080000000800000008000000080000000800
-000008000000080000000800000008000000080000000800000008000000080000000800
-000008000000080000000800000008000000080000000800000008000000080000000800
-000008000000080000000800000008000000020900450209004502090045024700000800
-000008000000080000000800000008000000080000000800000008000000080000000800
-000008000000080000000800000008000000080000000800000008000000080000000800
-000008000000080000000800000008000000080000000800000008000000080000000800
-000008000000080000000800000008000000080000000800000008000209004409000209
-004409000209004409000247080000000842010002090001054109010209000105410901
-020900010541090102470000084201000800020900010541090102090001054109010209
-000105410901024708000000084201000209000105410901020900010541090102090001
-054109010247000008420100080002090001054109010209000105410901020900010541
-090102470800000008120104080b0101081c010002090001051301020514010005140901
-02090001050e0104052d0901020900010512010005020100050401000503010205030102
-051509010247000008150100080c0100081d010008000209000105120100050201000513
-0100051409010209000105100100052f0901020900010512010005010100050c01000505
-010005150901024708000000081401000803010008000101080401000804010208160100
-020900010512010005060102050201000500010105030101050001000514090102090001
-051001000503010005000101050301020503010205030102051209010209000105120100
-050001000504010205050100050501000515090102470000081501000803010108010100
-080101040801010008020100081401000800020900010513010005040100050201000501
-010105010100050101000501010105140901020900010510010005030101050101000501
-010005020100050101000502010005010100050201000511090102090001051201010507
-010005050100050501000515090102470800000008140100080301000802010008030100
-080301000802010008150100020900010514010105020100050201000501010005020100
-050101000502010005140901020900010510010005030100050901000501010005050100
-050201000511090102090001051201000500010005060100050501000505010005150901
-024700000815010008030100080201000803010008030100080201000814010008000209
-000105160100050101040501010005020100050101000502010005140901020900010510
-010005030100050601030501010005050104051109010209000105120100050101000505
-010005050100050501000515090102470800000008140100080301000802010008030100
-080301000802010008150100020900010512010005020100050101000505010005020100
-050101000502010005140901020900010510010005030100050501000502010005010100
-050501000515090102090001051201000501010005050100050501000505010005150901
-024700000815010008030100080201000803010008030100080201000814010008000209
-000105120100050201000501010005020100050101000502010005010100050101010514
-090102090001051001000503010005050100050201000501010005020100050101000502
-010005110901020900010512010005020100050401000505010005050100051509010247
-080000000812010408010100080201000803010008040102081601000209000105130102
-050301020502010005020100050201010500010005140901020900010510010005030100
-050601030502010205030102051209010209000105120100050201000504010005050100
-050501000515090102470000084201000800020900010541090102090001054109010209
-000105410901024708000000084201000209000105410901020900010541090102090001
-054109010247000008420100080002090001054109010209000105410901020900010541
-090102470800000008420100020900010541090102090001054109010209000105410901
-024700000842010008000209000105410901020900010541090102090001054109010247
-080000000842010002090001054109010209000105410901020900010541090102470000
-084201000800020900010541090102090001054109010209000105410901024708000000
-084201000209000105410901020900010541090102090001054109010247000008000100
-080001000800010008000100080001000800010008000100080001000800010008000100
-080001000800010008000100080001000800010008000100080001000800010008000100
-080001000800010008000100080001000800010008000100080001000800010008000100
-080001000800010008000100080001000800010008000100080002090001094302090001
-094302090001094302470800010008000100080001000800010008000100080001000800
-010008000100080001000800010008000100080001000800010008000100080001000800
-010008000100080001000800010008000100080001000800010008000100080001000800
-010008000100080001000800010008000100080001000800010008000100080001000800
-01000800010002090000094402090000094402090000094402ff02ff02ff02ff02ff02ff
-02ff02ff02ff02ff02ff02ff02ff02ff02ff022901ff017d05ff05ff05ff05ff05ff05ff
-05ff05ff05ff05ff05ff05ff05ff056d02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff
-02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff
-02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff
-02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff
-02ff02ff02ff02d5014902ff023301000647010002ff023301000647010002ff02330100
-0647010002ff023301000647010002ff02330100060e0103060701010603010306020103
-060601030610010002ff02330100060d0101060101010604010306020101060101010600
-0101060101010604010106010101060f010002ff02330100060d01010601010106060101
-060201010601010106000101060101010604010106010101060f010002ff02330100060a
-010106000101060101010606010106020101060101010600010106010101060401010601
-010106010101060b010002ff023301000608010206010101060101010606010106020101
-0601010106000101060101010604010106010101060201020609010002ff023301000607
-010106030101060101010606010106020101060101010600010106010101060401010601
-0101060401010608010002ff023301000608010206010101060101010606010106020101
-0601010106000101060101010604010106010101060201020609010002ff02330100060a
-010106000101060101010601010106020101060201010601010106000101060101010601
-0101060001010601010106010101060b010002ff02330100060e01030602010106020101
-060301030602010306020101060101030610010002ff023301000647010002ff02330100
-0647010002ff023301000647010002ff023301000647010002ff023301000647010002ff
-023301000647010002ff023301220701012402ff0256070102ff027b070102ff027b0701
-02ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b0701
-02ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b0701
-02ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b0701
-02ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b0701
-02ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b0701
-02ff027b070102ff0258014902ff023301000647010002ff023301000647010002ff0233
-01000647010002ff023301000647010002ff02330100060e010306070101060301030603
-0101060701030610010002ff02330100060d010106010101060401030602010106010101
-060001030606010106010101060f010002ff02330100060d010106010101060601010602
-010106010101060201010606010106010101060f010002ff02330100060a010106000101
-0601010106060101060201010601010106020101060601010601010106010101060b0100
-02ff02330100060801020601010106010101060601010602010106010101060201010606
-010106010101060201020609010002ff0233010006070101060301010601010106060101
-0602010106010101060201010606010106010101060401010608010002ff023301000608
-010206010101060101010606010106020101060101010602010106060101060101010602
-01020609010002ff02330100060a01010600010106010101060101010602010106020101
-060101010602010106030101060001010601010106010101060b010002ff02330100060e
-01030602010106020101060301030603010106030101060101030610010002ff02330100
-0647010002ff023301000647010002ff023301000647010002ff023301000647010002ff
-023301000647010002ff023301000647010002ff023301220701012402ff0256070102ff
-027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff
-027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff
-027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff
-027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff
-027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff
-027b070102ff027b070102ff027b070102ff0258014902ff023301000647010002ff0233
-01000647010002ff023301000647010002ff023301000647010002ff0233010006470100
-02ff023301000647010002ff023301000600010006000102060001020601010106020101
-060101030601010106000101060101010600010106090103060101010601010106000101
-060001010604010002ff0233010006000101060101010601010106000101060201010600
-010106010101060001020600010106000102060001010607010106010101060001010601
-010106000102060001010603010002ff0233010006000101060101010601010106010101
-060001010605010106000101060101010600010106010101060701020603010106010101
-06000101060101010603010002ff02330100060001010601010106010101060101010600
-010106020104060001010601010106000101060101010609010206010101060101010600
-0101060101010603010002ff023301000600010106010101060101010602010206020101
-0601010106000101060101010600010106010101060a0102060001010601010106000101
-060101010603010002ff0233010006000101060101010601010106020102060201010601
-010106000102060001010600010206000101060701010601010106000101060001020600
-0102060001010603010002ff023301000600010106010101060101010603010106030102
-060001030600010106010101060001010609010306020101060001010600010106000101
-0604010002ff02330100060e0100060a010106040101061901010607010002ff02330100
-060d0101060a010106040101061901010607010002ff02330100060c0101060b01010604
-010106040106060d01010607010002ff023301000647010002ff023301000647010002ff
-023301000647010002ff023301220701012402ff0256070102ff027b070102ff027b0701
-02ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b0701
-02ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b0701
-02ff0254074802ff0233074902ff023307010245070102ff023307010245070102ff0233
-07010245070102ff023307010245070102ff023307010245070102ff0233070102450701
-02ff023307010245070102ff023307010245070102ff023307010245070102ff02330701
-0245070102ff023307010245070102ff023307010245070102ff023307010245070102ff
-023307010245070102ff023307010245070102ff023307010245070102ff023307010245
-070102ff021e012d0212013b02ff02000100062b0100021201000639010002ff02000100
-062b0100021201000639010002ff02000100062b0100021201000639010002ff02000100
-062b0100021201000639010002ff02000100062b010002120100063201010604010002ff
-02000100062b010002120100063201010604010002ff0200010006000100060001020600
-010206010101060201010601010306010101060101010600010106000101060401000212
-010006010100060001020600010206010101060201010601010306010101060201010601
-01030601010106000101060101030603010002ff02000100060001010601010106010101
-060001010602010106000101060101010600010106010101060001020600010106030100
-021201000601010106010101060101010600010106020101060001010601010106000101
-0602010106000101060101010600010206000101060101010604010002ff020001000600
-010106010101060101010601010106000101060101020603010106010101060001010601
-010106030100021201000601010106010101060101010601010106000101060101010601
-0101060101010600010106010101060101010600010106010101060101010604010002ff
-020001000600010106010101060101010601010106000101060301020601010106010101
-060001010601010106030100021201000601010106010101060101010601010106000101
-060101050601010106000101060101050600010106010101060101010604010002ff0200
-010006000101060101010601010106020102060501020600010106010101060001010601
-010106030100021201000601010106010101060101010602010206020101060601020602
-01010604010106010101060101010604010002ff02000100060001010601010106010101
-060201020602010106010101060001010600010206000102060001010603010002120100
-060101010601010106010101060201020602010106010101060201020602010106010101
-060001010601010106010101060001000602010002ff0200010006000101060101010601
-010106030101060301030602010106000101060001010600010106040100021201000601
-010106010101060101010603010106030103060401000604010306010101060101010602
-01010603010002ff02000100060e0100061101010607010002120100060f010006280100
-02ff02000100060d0101061101010607010002120100060e01010628010002ff02000100
-060c0101061201010607010002120100060d01010629010002ff02000100062b01000212
-01000639010002ff02000100062b0100021201000639010002ff02000100062b01000212
-01000639010002ff02000114070101160212013b02ff0215070102ff027b070102ff027b
-070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b
-070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b
-070102ff025c074b02ff0230074c02ff023007010248070102ff023007010248070102ff
-023007010248070102ff023007010248070102ff023007010248070102ff023007010248
-070102ff023007010248070102ff023007010248070102ff023007010248070102ff0230
-07010248070102ff023007010248070102ff023007010248070102ff0230070102480701
-02ff023007010248070102ff023007010248070102ff023007010248070102ff02300701
-0248070102ff021001420212012d02f901000640010002120100062b010002f901000640
-010002120100062b010002f901000640010002120100062b010002f90100064001000212
-0100062b010002f901000640010002120100061401020613010002f90100064001000212
-0100061301010615010002f9010006020100060001020600010206010101060201010601
-010306020103060101010600010306020101060101030601010106000101060301000212
-010106000102060001020601010106020101060001030601010306010100060001020600
-01020603010002f901000602010106010101060101010600010106020101060001010601
-010106000101060101010600010606020101060001010601010106000104060301000212
-010206010101060101010600010106020101060101010601010106010101060001010601
-0101060101010602010002f9010006020101060101010601010106010101060001010601
-010206030101060101010600010206020101060001010601010106010101060001020605
-010002120102060101010601010106010101060001010602010106010102060301010601
-0101060101010602010002f9010006020101060101010601010106010101060001010603
-010206010105060001010603010106000101060101050600010106060100021201020601
-010106010101060101010600010106020101060301020601010106010101060101010602
-010002f90100060201010601010106010101060201020605010206000101060401010604
-010206020101060401010606010002120102060101010601010106020102060301010604
-01020600010106010101060101010602010002f901000602010106010101060101010602
-010206020101060101010600010106010101060001010604010206020101060101010600
-010106060100021201020601010106010101060201020603010106010101060101010600
-010106010101060101010602010002f90100060201010601010106010101060301010603
-010306020103060101010605010006040103060101010606010002120102060101010601
-01010603010106030101060201030601010106010101060101010602010002f901000610
-0100062e010002120100060d0100061c010002f90100060f0101062e010002120100060c
-0101061c010002f90100060e0101062f010002120100060b0101061d010002f901000640
-010002120100062b010002f901000640010002120100062b010002f90100064001000212
-0100062b010002f901420212012d02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff
-02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff
-02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff
-02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff
-02ff0236
-%%EndData
-end
-%%PageTrailer
-%%Trailer
-%%BoundingBox: 0 46 300 384
-%%EOF
diff --git a/lib/appmon/doc/src/appmon.xml b/lib/appmon/doc/src/appmon.xml
deleted file mode 100644
index 2707ea4d9a..0000000000
--- a/lib/appmon/doc/src/appmon.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE erlref SYSTEM "erlref.dtd">
-
-<erlref>
- <header>
- <copyright>
- <year>1996</year>
- <year>2013</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>appmon</title>
- <prepared></prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- </header>
- <module>appmon</module>
- <modulesummary>A graphical node and application process tree viewer.</modulesummary>
- <description>
- <warning>
- <p>
- The Appmon application has been superseded by the Observer application.
- Appmon will be removed in R16.
- </p>
- </warning>
- <p>The application monitor Appmon is a graphical utility used to
- supervise applications executing either locally or on remote nodes.
- The process tree of an application can furthermore be monitored.</p>
- </description>
- <funcs>
- <func>
- <name>start()</name>
- <fsummary>Start Appmon.</fsummary>
- <desc>
- <p>Starts Appmon.</p>
- </desc>
- </func>
- <func>
- <name>stop()</name>
- <fsummary>Stop Appmon.</fsummary>
- <desc>
- <p>Stops Appmon.</p>
- </desc>
- </func>
- </funcs>
-
- <section>
- <title>See Also</title>
- <p>Appmon User's Guide</p>
- </section>
-</erlref>
-
diff --git a/lib/appmon/doc/src/appmon_chapter.xml b/lib/appmon/doc/src/appmon_chapter.xml
deleted file mode 100644
index 1b6054f622..0000000000
--- a/lib/appmon/doc/src/appmon_chapter.xml
+++ /dev/null
@@ -1,328 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE chapter SYSTEM "chapter.dtd">
-
-<chapter>
- <header>
- <copyright>
- <year>2000</year><year>2013</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>Appmon</title>
- <prepared></prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- <file>appmon_chapter.xml</file>
- </header>
-
- <section>
- <title>Introduction</title>
- <warning>
- <p>
- The Appmon application has been superseded by the Observer application.
- Appmon will be removed in R16.
- </p>
- </warning>
- <p>The application monitor Appmon is a graphical node and application viewer. The tool shows an overview of all applications on all known nodes, and it is possible to view the process tree for an application running on any of the nodes.</p>
- <note>
- <p>If the Appmon code is not available at a node, for example an
- embedded node, this node is ignored by Appmon and is not shown
- in the Appmon window.</p>
- </note>
- </section>
-
- <section>
- <title>Getting Started with Appmon</title>
- <p>Start Appmon by calling <c><![CDATA[appmon:start()]]></c>. It will start the <seealso marker="#main_win">main window</seealso> showing a load meter and the applications running at the current node. By clicking on one of the applications a window showing the process tree of the application will be opened, the <seealso marker="#app_win">application window</seealso>.</p>
- <p>The main window is equipped with a menubar from which it is possible to:</p>
- <list type="bulleted">
- <item>exit Appmon</item>
- <item>perform some operations on the node</item>
- <item>set how information should be displayed</item>
- <item>select which node to show</item>
- <item>open help (this document).</item>
- </list>
- <p>The application window shows the process tree for an application with each process displayed as a box. It is possible to view information about the processes, to send messages to them, and to trace and kill them.</p>
- </section>
-
- <section>
- <title>The Main Window</title>
- <marker id="main_win"></marker>
- <p>The main window shows a load meter and all applications running at the displayed node. Select which node to display in the window by choosing the node name from the Nodes menu. It is also possible to run Appmon in a many-window mode where a new instance of the main window is opened for each node to be displayed.</p>
- <image file="main_win.gif">
- <icaption>The Main Window.</icaption>
- </image>
- <p>The load meter shows load measured as processor time, or as the length of the ready queue.</p>
- <p>Every application running at the node is shown as a button. Clicking the button will open the application window showing the process tree for the application.</p>
-
- <section>
- <title>The File Menu</title>
- <taglist>
- <tag><em>Show List Box...</em></tag>
- <item>This will open the <seealso marker="#listbox_win">listbox window</seealso> which lists all nodes and applications. This window can be more easy to use than the normal, graphical user interface when the system consists of a large number of nodes and/or applications.</item>
- <tag><em>Close</em></tag>
- <item>Close the window. If no other instance of the main window exists, Appmon will be stopped.</item>
- <tag><em>Exit</em></tag>
- <item>Stop Appmon.</item>
- </taglist>
- </section>
-
- <section>
- <title>The Actions Menu</title>
- <taglist>
- <tag><em>Reboot</em></tag>
- <item>Call <c><![CDATA[init:reboot()]]></c> at the currently displayed node. This will stop the node. If the <c><![CDATA[-heart]]></c> system flag was given, the heart program will try to reboot the system.</item>
- <tag><em>Restart</em></tag>
- <item>Call <c><![CDATA[init:restart()]]></c> at the currently displayed node. This will restart the node.</item>
- <tag><em>Stop</em></tag>
- <item>Call <c><![CDATA[init:stop()]]></c> at the currently displayed node. This will stop the node.</item>
- <tag><em>Ping</em></tag>
- <item>Call <c><![CDATA[net:ping(Node)]]></c> where <c><![CDATA[Node]]></c> is the currently displayed node. This can be useful when the connection to the node has been lost.</item>
- </taglist>
- </section>
-
- <section>
- <title>The Options Menu</title>
- <taglist>
- <tag><em>One window/Many windows</em></tag>
- <item>Select one of these radio button to run Appmon in one-window or many-window mode. In many-windows mode, a new instance of the main window is opened for each node to be displayed. The default value is one-window mode.</item>
- <tag><em>Load: time/queue</em></tag>
- <item>Select one of these radio buttons to either calculate load as processor time or as the length of the ready queue, which is the number of processes ready to execute. By default, the load is calculated as processor time.</item>
- <tag><em>Load: progressive/linear</em></tag>
- <item>Select one of these radio buttons to show load either according to a progressive or a linear scale. By default, the load is shown according to a progressive scale. </item>
- </taglist>
- </section>
-
- <section>
- <title>The Nodes Menu</title>
- <p>The Nodes menu contains all currently and previously known nodes,
- where the Appmon code is available. Nodes where the Appmon code is
- not available, for example embedded nodes, are ignored by Appmon and
- are not shown.</p>
- <p>Selecting a node from the Nodes menu will cause that node to be displayed in either the same window, or in a new window, depending on if Appmon is run in one-window or many-windows mode. If the connection to the node has been lost, this will be shown in the window.</p>
- </section>
-
- <section>
- <title>The Help Menu</title>
- <taglist>
- <tag><em>Help</em></tag>
- <item>Selecting Help from the Help menu will cause the HTML version of the Appmon User's Guide (this document) to be displayed. Currently this function requires Netscape to be up and running.</item>
- </taglist>
- </section>
- </section>
-
- <section>
- <title>The Application Window</title>
- <marker id="app_win"></marker>
- <p>The application window shows the process tree for an application. The window title contains the application name and the node name. The window also contains a menubar and a toolbar.</p>
- <p>The application window can be opened from the main window by clicking on the button denoting the application, or from the listbox window by selecting the application and clicking on the <em>Load</em> button.
- </p>
- <image file="app_win.gif">
- <icaption>The Application Window.</icaption>
- </image>
- <p>The application can be shown either as a strict supervision tree, or as a process view with all linked processes. In supervision mode, the tree-gathering and -building algorithm assumes conformance to the OTP design principles.</p>
-
- <section>
- <title>The File Menu</title>
- <taglist>
- <tag><em>Close</em></tag>
- <item>Close the application window.</item>
- </taglist>
- </section>
-
- <section>
- <title>The Options Menu</title>
- <taglist>
- <tag><em>Refresh</em></tag>
- <item>Refresh the application window.</item>
- <tag><em>Sup. view/ Proc. view</em></tag>
- <item>Select one of these radio buttons to show the application as a strict supervision tree, or as a process view with all linked processes. By default, the process view is used.</item>
- </taglist>
- </section>
-
- <section>
- <title>The Toolbar</title>
- <p>The toolbar consists of four buttons: <em>Info</em>, <em>Send</em>, <em>Trace</em> and <em>Kill</em>. First select one of these buttons and then select to which process the action should apply by clicking on a process in the process tree. By default <em>Info</em> is selected which means that clicking on a process, without selecting <em>Send</em>, <em>Trace</em> or <em>Kill</em> first, will open the <seealso marker="#pinfo_win">process information window</seealso>.</p>
- <taglist>
- <tag><em>Info</em></tag>
- <item>Open the <seealso marker="#pinfo_win">process information window</seealso>, which displays the information about the process given by <c><![CDATA[process_info(Pid)]]></c>.</item>
- <tag><em>Send</em></tag>
- <item>Send a message to a process. A window is opened where the message can be specified. Click <em>Ok</em> to send the message or <em>Cancel</em> to cancel.</item>
- <tag><em>Trace</em></tag>
- <item>Switch on OTP tracing of a process. <c><![CDATA[sys:trace(Pid,true)]]></c> is called. Selecting <em>Trace</em> a second time for the same process will switch the tracing off instead.</item>
- <tag><em>Kill</em></tag>
- <item>Kill a process. <c><![CDATA[exit(Pid,kill)]]></c> is called.</item>
- </taglist>
- </section>
- </section>
-
- <section>
- <title>The Listbox Window</title>
- <marker id="listbox_win"></marker>
- <p>The listbox window lists all nodes and applications. This window can be more easy to use than the normal, graphical user interface when the system consists of a large number of nodes and/or applications.</p>
- <image file="listbox_win.gif">
- <icaption>The Listbox Window.</icaption>
- </image>
- <p>The window contains three buttons:</p>
- <taglist>
- <tag><em>Load</em></tag>
- <item>First selecting an application and then clicking the <em>Load</em> button will open the <seealso marker="#app_win">application window</seealso> for that application.</item>
- <tag><em>Clear</em></tag>
- <item>De-select any selected node or application name.</item>
- <tag><em>Close</em></tag>
- <item>Close the listbox window.</item>
- </taglist>
- </section>
-
- <section>
- <title>The Process Information Window</title>
- <marker id="pinfo_win"></marker>
- <p>The process information window shows information about different processes as given by <c><![CDATA[process_info(Pid)]]></c>.</p>
- <image file="pinfo_win.gif">
- <icaption>The Process Information Window.</icaption>
- </image>
-
- <section>
- <title>The File Menu</title>
- <taglist>
- <tag><em>Close</em></tag>
- <item>Close the process information window.</item>
- </taglist>
- </section>
- </section>
-
- <section>
- <title>Using the Web Based version of Appmon</title>
-
- <section>
- <title>Introduction</title>
- <p>The web based version of Appmon is an alternative version of
- Appmon. The main difference between the web based version of
- Appmon and the original version of Appmon is that the web based
- version of Appmon can monitor nodes and applications on nodes where
- Appmon not is installed.</p>
- </section>
-
- <section>
- <title>Start the Web Based version of Appmon</title>
- <p>To start the web based user interface configure and start
- WebTool, see <em>WebTool User's Guide</em>. The web based
- version of Appmon is compatible with the browsers
- Netscape Navigator and Internet Explorer 4.0 and higher.</p>
- <p>When WebTool is started, start the Web based version of Appmon via
- WebTool. If WebTool succeeded to start the web based version of Appmon
- a link named WebAppmon will appear in the topmost frame. Click on the link and
- the main frame of the browser will show two frames.The left frame will
- show a combo box for node selection and a list of all applications on
- the currently selected node. </p>
- <p>In the left frame it is possible to:</p>
- <list type="bulleted">
- <item>Select which node to supervise.</item>
- <item>Select an application to view its process tree.</item>
- <item>Select an application to view its specification.</item>
- </list>
- <p>The right frame shows the selected information, either the application
- specification or the process tree and process information.</p>
- </section>
-
- <section>
- <title>Selecting a Different Node</title>
- <p>In the top of the left frame there is a combo box with all known
- nodes. The name of the node that is monitored is the node whose name
- is visible in the combo box. At startup the node on which the web
- based version of Appmon is running on will be monitored.</p>
- <p>To change node, select another node in the combo box, and
- the list of running applications will change to the applications
- that runs on the selected node.</p>
- </section>
-
- <section>
- <title>Viewing the Process Tree of an Application</title>
- <p>To view the process tree of an application click on the application
- name in the list of applications. The process tree of the selected
- application will then appear in the right frame.</p>
- <p>The processes in the process tree can have three different colors:</p>
- <taglist>
- <tag><em>Blue</em></tag>
- <item>The relation to the process above in the process hierarchy
- is a primary relation. That means that the process above is the
- only process that link to it or the process above is a supervisor. </item>
- <tag><em>Red</em></tag>
- <item>The relation to the process above in the process hierarchy is a secondary
- relation. This means that more than one process has a relation to it
- and the process above in the hierarchy is not a supervisor.</item>
- <tag><em>Black</em></tag>
- <item>The process isn't a regular process instead it's a Port. The name of
- the process will also begin with <em>Port:</em></item>
- </taglist>
- <p>If the process name begins with <em>Runs on another node:</em> The
- monitored application runs on more than one node and this process is
- the first process on a branch that runs on another node. </p>
- </section>
-
- <section>
- <title>Viewing the Application Specification</title>
- <p>After the application name in the list of applications there are a
- link named <em>Spec</em>, Click on this link and the application
- specification will appear in the right frame. The application
- specification is the data in the <em>.app</em> file of the selected
- application. </p>
- </section>
-
- <section>
- <title>Select Process View</title>
- <p>In the top of the page that shows the process tree, there are three
- radio buttons for selecting which processes that shall be included
- in the process tree. The default mode is that all processes
- that one process in the application tree has a relation to is
- included. It's possible to filter which of the processes
- in the process tree that will be included. To reduce the number
- of processes in the process tree select one of the radio buttons
- on the top of the page </p>
- <taglist>
- <tag><em>All processes</em></tag>
- <item>All processes that at least one process in the application
- tree has a link to.</item>
- <tag><em>Supervised processes</em></tag>
- <item>All processes that are supervised by one of the supervisors in
- the application</item>
- <tag><em>Supervisors only</em></tag>
- <item>Only the processes that actually are supervisors in the
- applications supervision tree is included</item>
- </taglist>
- </section>
-
- <section>
- <marker id="proc_info"></marker>
- <title>Process Information</title>
- <p>To see more information about a specific process click on the process
- name and more information will be loaded under the application tree.</p>
- <p>The Process information page shows information about a process as given
- by the <c><![CDATA[process_info(Pid)]]></c>, but formatted in a more human readable form.</p>
- </section>
-
- <section>
- <title>Trace a process</title>
- <p>If the link after the process name in the process tree is <em>start trace</em>
- the process is not traced. If the link is <em>stop trace</em> then the process
- id traced.</p>
- <p>To toggle the trace flag for a process click on the link <em>start trace</em> or
- <em>stop trace</em> after the process name in the process tree.</p>
- </section>
- </section>
-</chapter>
-
diff --git a/lib/appmon/doc/src/book.xml b/lib/appmon/doc/src/book.xml
deleted file mode 100644
index c9979c6050..0000000000
--- a/lib/appmon/doc/src/book.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE book SYSTEM "book.dtd">
-
-<book xmlns:xi="http://www.w3.org/2001/XInclude">
- <header titlestyle="normal">
- <copyright>
- <year>1997</year><year>2013</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>appmon</title>
- <prepared></prepared>
- <docno></docno>
- <date></date>
- <rev>2.0</rev>
- </header>
- <insidecover>
- </insidecover>
- <pagetext>Appmon</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/appmon/doc/src/fascicules.xml b/lib/appmon/doc/src/fascicules.xml
deleted file mode 100644
index 37feca543f..0000000000
--- a/lib/appmon/doc/src/fascicules.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!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/appmon/doc/src/listbox_win.gif b/lib/appmon/doc/src/listbox_win.gif
deleted file mode 100644
index 38258b7552..0000000000
--- a/lib/appmon/doc/src/listbox_win.gif
+++ /dev/null
Binary files differ
diff --git a/lib/appmon/doc/src/listbox_win.ps b/lib/appmon/doc/src/listbox_win.ps
deleted file mode 100644
index 0f1e2eeda0..0000000000
--- a/lib/appmon/doc/src/listbox_win.ps
+++ /dev/null
@@ -1,741 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Creator: (ImageMagick)
-%%Title: (./listbox_win.tmp.eps)
-%%CreationDate: (Tue Jun 12 18:01:07 2001)
-%%BoundingBox: 0 85 200 356
-%%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 85 200 356
-userdict begin
-%%BeginData:
-DisplayImage
-0 85
-200.000000 271.000000
-12
-325 441
-1
-0
-0
-8
-ffffff
-000000
-708090
-b03060
-d9d9d9
-808080
-c3c3c3
-000000
-03ff03ff03ff036704000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-04000300040003000400030004000300040003000400031a040c03cc0400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-0400030004000308040c03050400030a0400030a04010343040103240401031904010300
-0401030f040103010401031e040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003070400030204000302
-04000302040003050400030a040003090403034204010324040103190401031204010321
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003080400030204000302040003020400030504000303
-040203030400030904000301040003010401030004010301040103000401030104000300
-040203000402030204030301040103000401030204010304040103000401030204030302
-040103000401030104030302040303060403030104010300040103020401030004010305
-040303010401030004010301040103000401030104010300040103010403030204030301
-04030300040103010403030104010300040103020403030a040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003070400030204000302040003020400030504000302040403020400030804010301
-040103000402030004010300040203000401030004010301040103010401030004010301
-040103000402030004010301040103040402030004010300040103010401030004010300
-040203000401030104010300040103010401030404010301040103000402030004010300
-040103000402030404010301040103000402030004010300040203000401030004010300
-040103000401030104010300040103010401030104010301040103000401030104010300
-040203000401030004010301040103080400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030804040302
-040003020400030504000301040603010400030804010301040103000401030104010300
-040103010401030004010301040103010401030004010301040103000401030104010308
-04010301040103000401030104010300040103010401030004010301040103000402030b
-040103000401030104010300040103010401030804010300040103010401030004010301
-040103000401030004010300040103080401030104010301040103000401030104010300
-04010301040103000402030c040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003070400030604000302
-040003050400030104060301040003080405030004010301040103000401030104010300
-040103010401030104010300040103010401030004010301040103080401030104010300
-040103010401030004010301040103000405030204020306040403000401030104010300
-040103010401030504040300040103010401030004010301040103000401030004010300
-040103050404030104010301040103000401030104010300040103010401030204020309
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003080400030604000302040003050400030104060301
-040003070401030304030301040103000401030104010300040103010401030104010300
-040103010401030004010301040103080401030104010300040103010401030004010301
-040103000401030704020304040103010401030004010301040103000401030104010304
-040103010401030004010301040103000401030104010300040103000401030004010304
-040103010401030104010301040103000401030104010300040103010401030304020309
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003070400030604000302040003050400030204040302
-040003070401030304040300040103000402030004010300040103010401030104010300
-040103010401030004010301040103010401030404010301040103000401030104010300
-040103000402030004010301040103000401030104010304040103010401030004010301
-040103000401030004020304040103010401030004020300040103000402030004010300
-040103000401030004010301040103000401030104010301040103000402030004010301
-040103000401030104010300040103010401030804000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000308
-040803020400030504000303040203030400030704010303040303000401030104010300
-040103010401030104010301040103010403030104010301040103010401030404010301
-040103010403030204010300040103010403030204030306040203000403030104010301
-040103000401030504020300040303000401030104010300040103010401030004010301
-04030302040203000401030104010300040103010403030104010301040103010403030a
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003070400030a040003050400030a0400030f04010304
-0401036c040103040401033d040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003080400030a04000305
-0400030a0400030f040103040401036c040103040401033e040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003070400030a04000305040c030f040103040401036c040103040401033d04000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000308040c03e00400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-04000300040003000400030004000300040003000400030004000300040003ff03ff03a1
-02ff02ff028904ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff046b0512
-04ff043105110000047e05b0040105010606050006060001047e05af0000040105010605
-0000050006060001047e050104ac00010401050106050000050106050001047e050104ac
-00010401050106040001050106050001047e0501043301000430010004260100041d0001
-04010501060400010400050106040001047e050104040100040401000403010204020100
-0415010004040100040001000405010004060100040b010004030102040b0100040b0102
-0405010004120100041c000104010501060300010401050106040001047e050104040100
-040b010004020100041501000403010004020100040c010004120100040b0100040d0100
-04190100041c000104010501060300010402050106030001047e05010401010104000100
-040201020405010004020100040001010403010204020100040001010402010404010100
-0400010204020102040301010400010004010100040001010403010204050100040a0100
-04050102040501000403010204020100040201000402010204050100041b000104010501
-060200010403050106030001047e05010400010004010101040401000405010004020101
-040101000401010004020100040101010401010004030100040301000400010004000100
-04040100040201000401010104010101040101000404010004050100040a010004040100
-0402010004040100040501000402010004020100040101000402010004040100041b0001
-04010501060200010404050106020001047e050104000100040201000404010004050100
-040201000402010004010100040201000401010004070100040301000400010004000100
-040401000402010004020100040101000408010004050100040a01000408010004040100
-040501000402010004020100040101000402010004040100041b00010401050106010001
-0405050106020001047e0501040001000402010004040100040501000402010004020100
-040101040401010004070100040301000400010204040100040201000402010004010100
-0408010004050100040a0100040501030404010004050100040301000400010004020104
-04040100041b000104010501060100010406050106010001047e05010400010004020100
-040401000405010004020100040201000401010004050100040701000403010004080100
-0402010004020100040101000408010004050100040a0100040401000402010004040100
-0405010004030100040001000402010004080100041b0001040105010600000104070501
-06010001047e050104000100040101010404010004050100040201010401010004010100
-040201000401010004070100040401000401010004040100040201000401010104010100
-0408010004050100040b0100040301000402010004040100040501000404010004030100
-0402010004030100041c000104010501060000010408050106000001047e050104010101
-040001000404010004050100040201000400010104030102040201000408010104030101
-040501000403010104000100040101000408010004050100040b01000404010304040100
-04050100040401000404010204040100041c0001040105010001050b06000001047e0501
-0465010004260100041d0001040105010000050d0001047e050104ac000104010501060e
-0001047e050104ac0001040105010010047e050104ac000104010501000d05000001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104160101040001000402010004020100040201020402
-010004000101040201000400010104750001040105010001040a05010001047e05010416
-010004000100040001000401010004020100040101000402010004010101040101000401
-01010401010004740001040105010001040a05010001047e050104160100040001000400
-010004020100040101000405010004010100040201000401010004020100047400010401
-05010001040a05010001047e050104160100040001000400010004020100040101000402
-01030401010004020100040101000402010004740001040105010001040a05010001047e
-050104160100040001000400010004030100040001000401010004020100040101000402
-0100040101000402010004740001040105010001040a05010001047e0501041601000400
-010004000100040301010402010004020100040101010401010004010101040101000474
-0001040105010001040a05010001047e0501041601000400010004000100040401000403
-01030401010004000101040201000400010104750001040105010001040a05010001047e
-050104200100040901000405010004780001040105010001040a05010001047e0501041d
-010004000100040a01000405010004780001040105010001040a05010001047e0501041e
-0100040b01000405010004780001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e05010416010004220102046e00010401
-05010001040a05010001047e05010416010004240100046e0001040105010001040a0501
-0001047e0501041601000401010004030102040201000400010104020100040001010403
-010204050100046e0001040105010001040a05010001047e050104160100040001000403
-01000402010004010101040101000401010104010100040101000402010004040100046e
-0001040105010001040a05010001047e0501041601010404010004020100040101000405
-010004020100040101000402010004040100046e0001040105010001040a05010001047e
-050104160101040401040401010004050100040201000401010404040100046e00010401
-05010001040a05010001047e050104160100040001000403010004050100040501000402
-01000401010004080100046e0001040105010001040a05010001047e0501041601000401
-01000402010004020100040101000405010004020100040101000402010004040100046e
-0001040105010001040a05010001047e0501041601000402010004020102040201000405
-0100040201000402010204050100046e0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e0501042c0102047c0001040105010001040a05010001047e
-0501042e0100047c0001040105010001040a05010001047e050104170102040301020403
-010204050100047c0001040105010001040a05010001047e050104160100040201000401
-010004020100040101000402010004040100047c0001040105010001040a05010001047e
-050104160100040901000401010004080100047c0001040105010001040a05010001047e
-050104170102040301030402010204050100047c0001040105010001040a05010001047e
-0501041a010004010100040201000405010004040100047c0001040105010001040a0501
-0001047e050104160100040201000401010004020100040101000402010004040100047c
-0001040105010001040a05010001047e050104170102040301030402010204050100047c
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e0501043301000430010004260100041d0001040105010001
-040a05010001047e050104040100040f0100041501000404010004000100040501000406
-0100040b010004030102040b0100040b01020405010004120100041c0001040105010001
-040a05010001047e050104040100040f0100041501000403010004020100040c01000412
-0100040b0100040d010004190100041c0001040105010001040a05010001047e05010401
-010104000100040201020403010104000100040101000400010104030102040201000400
-010104020104040101000400010204020102040301010400010004010100040001010403
-010204050100040a01000405010204050100040301020402010004020100040201020405
-0100041b0001040105010001040a05010001047e05010400010004010101040101000402
-010004010100040101010401010104010100040101000402010004010101040101000403
-010004030100040001000400010004040100040201000401010104010101040101000404
-010004050100040a01000404010004020100040401000405010004020100040201000401
-01000402010004040100041b0001040105010001040a05010001047e0501040001000402
-010004010100040201000401010004020100040101000402010004010100040201000401
-010004070100040301000400010004000100040401000402010004020100040101000408
-010004050100040a01000408010004040100040501000402010004020100040101000402
-010004040100041b0001040105010001040a05010001047e050104000100040201000401
-010004020100040101000402010004010100040201000401010404010100040701000403
-010004000102040401000402010004020100040101000408010004050100040a01000405
-0103040401000405010004030100040001000402010404040100041b0001040105010001
-040a05010001047e05010400010004020100040101000402010004010100040201000401
-010004020100040101000405010004070100040301000408010004020100040201000401
-01000408010004050100040a010004040100040201000404010004050100040301000400
-01000402010004080100041b0001040105010001040a05010001047e0501040001000401
-010104010100040201000401010004010101040101010401010004010100040201000401
-010004070100040401000401010004040100040201000401010104010100040801000405
-0100040b0100040301000402010004040100040501000404010004030100040201000403
-0100041c0001040105010001040a05010001047e05010401010104000100040201020403
-010104000100040101000400010104030102040201000408010104030101040501000403
-010104000100040101000408010004050100040b01000404010304040100040501000404
-01000404010204040100041c0001040105010001040a05010001047e0501041201000451
-010004260100041d0001040105010001040a05010001047e0501040e0100040201000498
-0001040105010001040a05010001047e0501040f010204990001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e05010416
-010004220102046e0001040105010001040a05010001047e05010416010004240100046e
-0001040105010001040a05010001047e0501041601000401010004030102040201000400
-010104020100040001010403010204050100046e0001040105010001040a05010001047e
-050104160100040001000403010004020100040101010401010004010101040101000401
-01000402010004040100046e0001040105010001040a05010001047e0501041601010404
-010004020100040101000405010004020100040101000402010004040100046e00010401
-05010001040a05010001047e050104160101040401040401010004050100040201000401
-010404040100046e0001040105010001040a05010001047e050104160100040001000403
-01000405010004050100040201000401010004080100046e0001040105010001040a0501
-0001047e0501041601000401010004020100040201000401010004050100040201000401
-01000402010004040100046e0001040105010001040a05010001047e0501041601000402
-0100040201020402010004050100040201000402010204050100046e0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001040900630410050104ac
-0001040105010001040a050100010409006205000410050104ac0001040105010001040a
-0501000104090001045f05010410050104ac0001040105010001040a0501000104090001
-045f05010410050104ac0001040105010001040a0501000104090001045f050104100501
-04ac0001040105010001040a0501000104090001045f05010410050104ac000104010501
-0001040a0501000104090001045f05010410050104ac0001040105010001040a05010001
-04090001045f05010410050104ac0001040105010001040a0501000104090001045f0501
-0410050104ac0001040105010001040a0501000104090001042101000417010004230501
-0410050104ac0001040105010001040a0501000104090001042101000417010004230501
-0410050104ac0001040105010001040a0501000104090001042101000406010204030102
-0403010104000100042305010410050104ac0001040105010001040a0501000104090001
-042101000405010004020100040101000402010004010100040101010423050104100501
-04ac0001040105010001040a050100010409000104210100040501000402010004050100
-0401010004020100042305010410050104ac0001040105010001040a0501000104090001
-042101000405010004020100040201030401010004020100042305010410050104ac0001
-040105010001040a05010001040900010421010004050100040201000401010004020100
-0401010004020100042305010410050104ac0001040105010001040a0501000104090001
-042101000405010004020100040101000402010004010100040101010423050104100501
-04ac0001040105010001040a050100010409000104210104040201020403010304020101
-04000100042305010410050104ac0001040105010001040a0501000104090001045f0501
-0410050104ac0001040105010001040a0501000104090001045f05010410050104ac0001
-040105010001040a0501000104090001045f05010410050104ac0001040105010001040a
-0501000104090001045f05010410050104ac0001040105010001040a0501000104090001
-045f05010410050104ac0001040105010001040a0501000104090001045f050104100501
-04ac0001040105010001040a0501000104090001045f05010410050104ac000104010501
-0001040a0501000104090001045f05010410050104ac0001040105010001040a05010001
-04090001045f05010410050104ac0001040105010001040a0501000104090001045f0501
-0410050104ac0001040105010001040a050100010409000105610410050104ac00010401
-05010001040a050100010409000005620410050104ac0001040105010001040a05010001
-047e050104ac0001040105010001040a05010001047e050104ac0001040105010001040a
-05010001047e050104ac0001040105010001040a05010001047e050104ac000104010501
-0001040a05010001047e050104ac0001040105010001040a05010001047e050104ac0001
-040105010001040a05010001047e050104ac0001040105010001040a05010001047e0501
-04ac0001040105010001040a05010001047e050104ac0001040105010001040a05010001
-047e050104ac0001040105010001040a05010001040900630410050104ac000104010501
-0001040a050100010409006205000410050104ac0001040105010001040a050100010409
-0001045f05010410050104ac0001040105010001040a0501000104090001045f05010410
-050104ac0001040105010001040a0501000104090001045f05010410050104ac00010401
-05010001040a0501000104090001045f05010410050104ac0001040105010001040a0501
-000104090001045f05010410050104ac0001040105010001040a0501000104090001045f
-05010410050104ac0001040105010001040a0501000104090001045f05010410050104ac
-0001040105010001040a0501000104090001041e010204030102043605010410050104ac
-0001040105010001040a0501000104090001041d01000402010004040100043605010410
-050104ac0001040105010001040a0501000104090001041d010004020100040401000403
-0102040301020402010004000101042105010410050104ac0001040105010001040a0501
-000104090001041d01000408010004020100040201000401010004020100040101010401
-0100042005010410050104ac0001040105010001040a0501000104090001041d01000408
-010004020100040201000405010004010100042405010410050104ac0001040105010001
-040a0501000104090001041d010004080100040201040402010304010100042405010410
-050104ac0001040105010001040a0501000104090001041d010004020100040401000402
-0100040501000402010004010100042405010410050104ac0001040105010001040a0501
-000104090001041d01000402010004040100040201000402010004010100040201000401
-0100042405010410050104ac0001040105010001040a0501000104090001041e01020405
-0100040301020403010304010100042405010410050104ac0001040105010001040a0501
-000104090001045f05010410050104ac0001040105010001040a0501000104090001045f
-05010410050104ac0001040105010001040a0501000104090001045f05010410050104ac
-0001040105010001040a0501000104090001045f05010410050104ac0001040105010001
-040a0501000104090001045f05010410050104ac0001040105010001040a050100010409
-0001045f05010410050104ac0001040105010001040a0501000104090001045f05010410
-050104ac0001040105010001040a0501000104090001045f05010410050104ac00010401
-05010001040a0501000104090001045f05010410050104ac0001040105010001040a0501
-000104090001045f05010410050104ac0001040105010001040a05010001040900010561
-0410050104ac0001040105010001040a050100010409000005620410050104ac00010401
-05010001040a05010001047e050104ac0001040105010001050c0001047e050104ac0001
-040105010000050d0001047e050104ac000104010501060e0001047e050104ac00010401
-05010010047e050104ac0001040105010600000c05000001047e050104ac000104010501
-060000010408050106000001047e050104ac000104010501060100010407050106000001
-047e050104ac000104010501060100010406050106010001047e050104ac000104010501
-060200010405050106010001047e050104ac000104010501060200010404050106020001
-040900630410050104ac0001040105010603000104030501060200010409006205000410
-050104ac00010401050106030001040205010603000104090001045f05010410050104ac
-00010401050106040001040105010603000104090001045f05010410050104ac00010401
-050106040001040005010604000104090001045f05010410050104ac0001040105010605
-000005020604000104090001045f05010410050104ac0001040105010605000005010605
-000104090001045f05010410050100ae04010501060605010605000104090001045f0501
-0410050000af04010501060605000606000104090001045f050104c30501001004090001
-041e0102040301020436050104c30500001104090001041d010004020100040401000436
-0501040e05b804180001041d010004020100040401000403010204030102040301020421
-0501040e05b7000004180001041d01000408010004020100040201000401010004020100
-040101000402010004200501040e0501060d00000600009406000001060c000104180001
-041d010004080100040201000402010004010100040501000402010004200501040e0501
-060b0001050006000093050006000003060a000104180001041d01000408010004020100
-04020100040201020402010404200501040e050106090002050106000001049005010600
-00050608000104180001041d010004020100040401000402010004020100040501000401
-010004240501040e05010607000304000501060000010490050106000001040100030606
-000104180001041d01000402010004040100040201000402010004010100040201000401
-01000402010004200501040e050106050003040205010600000104900501060000010403
-00030604000104180001041e01020405010004030102040301020403010204210501040e
-05010603000304040501060000010490050106000001040500030602000104180001045f
-0501040e0501060100030406050106000001049005010600000104070003060000010418
-0001045f0501040e05050408050106000001049005010600000104080503000104180001
-045f0501040e050106010503040605010600000104900501060000010407050306000001
-04180001045f0501040e0501060305030404050106000001049005010600000104050503
-0602000104180001045f0501040e05010605050304020501060000010490050106000001
-040305030604000104180001045f0501040e050106070503040005010600000104900501
-06000001040105030606000104180001045f0501040e0501060905040600000104900501
-0600000105030608000104180001045f0501040e0501060b050206000001059206000001
-0501060a000104180001045f0501040e0501060d0500060000000593060000000500060c
-000104180001045f0501040e050100b6041800010561040e050000b704180000056204ff
-04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04bb
-%%EndData
-end
-%%PageTrailer
-%%Trailer
-%%BoundingBox: 0 85 200 356
-%%EOF
diff --git a/lib/appmon/doc/src/main_win.gif b/lib/appmon/doc/src/main_win.gif
deleted file mode 100644
index 36d742e91e..0000000000
--- a/lib/appmon/doc/src/main_win.gif
+++ /dev/null
Binary files differ
diff --git a/lib/appmon/doc/src/main_win.ps b/lib/appmon/doc/src/main_win.ps
deleted file mode 100644
index abb12d733b..0000000000
--- a/lib/appmon/doc/src/main_win.ps
+++ /dev/null
@@ -1,691 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Creator: (ImageMagick)
-%%Title: (./main_win.tmp.eps)
-%%CreationDate: (Tue Jun 12 17:57:00 2001)
-%%BoundingBox: 0 26 377 164
-%%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 26 377 164
-userdict begin
-%%BeginData:
-DisplayImage
-0 26
-377.000000 138.000000
-12
-520 191
-1
-0
-0
-16
-ffffff
-000000
-708090
-b03060
-d9d9d9
-808080
-00ff00
-666666
-999999
-ececc5
-000000
-000000
-000000
-000000
-000000
-000000
-03ff03ff03ff03ff03ff0305040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400031b040c03e4040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000307040c03050400030a0400030a040103030405030104050301
-040103040401030304030303040103020401030b0403031e0401032c0401030004010300
-040103000401031104010305040403020401030404010305040103000401030904000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003080400030204000302
-04000302040003050400030a040003090403030204010302040103000401030204010300
-04010304040103020401030104010302040203010401030a040103010401034c04010303
-040103000401031104010303040103040400030804010308040103080400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003070400030204000302
-040003020400030504000303040203030400030904000301040003020401030204010300
-040103020401030004020302040203010401030304010301040203010401030104010305
-040103030401030004010302040103010403030104010300040303020401030004010301
-040303010401030104010301040103050403030104010300040103060401030004010300
-040103000401030004010300040103020403030104010300040503020400030604000300
-040103010401030004010300040103000403030004010309040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030804000302040003020400030204000305
-040003020404030204000308040103010401030104010302040103000401030204010300
-040203020402030104010303040103010401030004000300040103010401030504010303
-040103000401030204010300040103010401030004060302040103000401030004010301
-040103000401030104010301040103040401030104010300040203000401030404010300
-040203000401030004010300040203000401030004010301040103000404030004010302
-040003020401030004000300040003000401030004010300040203000406030004010308
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000307
-040403020400030204000305040003010406030104000308040103010401030104050301
-040503010403030004030301040103030401030104010300040003000401030904010303
-040103010401030004010301040103010401030004020302040103000401030104010300
-040103010401030104010300040103000401030504010301040103000401030104010304
-040103010401030004010300040103000401030104010300040103010401030004020302
-040103020400030104000301040003010400030004010300040103010401030004020301
-040103000401030904000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003080400030604000302040003050400030104060301040003080405030104010305
-040103050401030004000300040003000401030104010303040103010401030104020309
-040103030401030104010300040103010405030004010303040103000401030104010300
-040503010401030004010300040103050401030104010300040103010401030404010301
-040103000401030004010300040103010401030004050300040103030401030204000300
-040003020400030104000300040103000401030104010300040103020401030004010308
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000307
-040003060400030204000305040003010406030104000307040103030401030004010305
-040103050401030004020300040103010401030304010301040103010402030904010303
-040103020402030204010304040103040402030204010300040103050401030004010300
-040103050401030104010300040103010401030404010301040103000401030004010300
-040103010401030004010304040103030401030204000300040003010401030004000301
-040103000401030104010300040103020401030004010309040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030804000306040003020400030504000302
-040403020400030704010303040103000401030504010305040103010400030104010302
-040103010401030204010302040103010401030604010301040103030402030204010301
-040103000401030404020302040103000401030104010302040103010401030604010301
-040103000401030104010304040103000402030004010300040103000402030004010300
-040103010401030004010303040103000400030004000301040103000401030204010300
-040103000402030004010302040103000401030804000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030704080302040003050400030304020303
-040003070401030304010300040103050401030504010301040003010401030304030303
-040103020401030104010307040303050400030404030301040103050400030304010301
-040303030401030104010307040303010401030104010305040103000401030004010300
-040103000401030004010302040303010401030404010302040003080401030104010300
-040103000401030204010300040103090400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-0400030004000300040003080400030a040003050400030a040003be0404032004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-04000300040003000400030004000300040003000400030004000300040003070400030a
-040003050400030a040003e5040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-04000300040003080400030a04000305040c03e404000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-0400030004000300040003000400030004000307040c03f8040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-04000300040003000400030004000300040003ff03ff03ff03ff032802ff02ff02ff02ff
-020f00ff00ff00ff00ff000e0500000104ff04ff04030501000104ff04ff040305010001
-04ff04ff04030501000104ff04ff04030501000104ff04ff040305010001040401040404
-01000403010204130100040c01000406010004200102040b010004060100041f01000402
-0100040c010004ff043601000402010004090102040c0501000104040100040f01000413
-0100040c01000427010004020100040a01000427010104010100040c010004ff04360100
-04020100040b0100040c0501000104040100040601020405010004030102040b01000400
-010004030102040201040402010204030102040201000400010104030102040a01000402
-01000401010004000101040201040402010204030102040201000400010104030102040a
-010104010100040201020403010104000100040201020403010204ff0429010004020100
-040201020405010004020100040001010405050100010404010004080100040501000402
-010004020100040a01000400010004020100040201000403010004060100040201000402
-010004010101040101000401010004020100040901000402010004010101040101000403
-010004060100040201000402010004010101040101000401010004020100040901000400
-010004000100040101000402010004010100040101010401010004020100040101000402
-010004ff0428010004020100040101000402010004040100040201010401010004040501
-00010404010304050100040501000402010004020100040a010004000100040201000407
-0100040601000402010004020100040101000402010004010100040d0100040201000401
-01000402010004030100040601000402010004020100040101000402010004010100040d
-010004000100040001000401010004020100040101000402010004010100040201000401
-010004ff042c010404010100040201000404010004020100040201000404050100010404
-010004080100040501000402010404090100040201000401010004070100040601000402
-010004020100040101000402010004020102040a01000402010004010100040201000403
-0100040601000402010004020100040101000402010004020102040a0100040101010401
-0100040201000401010004020100040101040402010204ff042901000402010004010104
-04040100040201000402010004040501000104040100040801000405010004020100040d
-010404010100040701000406010004020100040201000401010004020100040501000409
-010004020100040101000402010004030100040601000402010004020100040101000402
-010004050100040901000401010104010100040201000401010004020100040101000409
-010004ff0428010004020100040101000408010004020100040201000404050100010404
-010004080100040501000402010004020100040901000402010004010100040201000403
-010004060100040201000402010004010100040201000401010004020100040901000402
-010004010101040101000403010004060100040201000402010004010100040201000401
-010004020100040901000402010004010100040201000401010004010101040101000402
-0100040101000402010004ff042801000402010004010100040201000404010004020101
-0401010004040501000104040100040801000405010004030102040a0100040201000402
-0102040501010404010004030102040201000402010004020102040b0102040201000400
-0101040501010404010004030102040201000402010004020102040a0100040201000402
-01020403010104000100040201020403010204ff04290100040201000402010204050100
-04020100040001010405050100010468010004ff048f01000408050100010468010004ff
-048f01000408050100010468010004ff048f010004080501000104ff04ff040305010001
-04ff04ff04030501000104ff04ff04030501000105ff05ff0505000005ff05ff050604ff
-04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff
-04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff
-04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04cf01ff01ff
-010704ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff
-04ff044c01150400010104010100041a017204ff045d0100081201010400010104000101
-041a017204ff045d01000812010404010100041a017204ff045d01000812010104000101
-04010100041a017204ff045d0100081201010400010104010100041a017204ff045d0114
-04050100041a011909010100090101000901010009010111090101050904010209010104
-09010105090101000901011704ff045d0100081201000421011909010103090101000901
-0111090101030901010409000108090101080901011704ff045d01000812010004210116
-090101000901010009010100090101000901010009010102090301010901010009050102
-090001060900010009010101090101000901010009010100090301000901011704ff045d
-010008120100042101150901010009020100090101000901010009020100090101000901
-010109010100090401000901010209000102090101000900010009000100090101000901
-010009020100090601000901011704ff045d010008120100042101150901010109010100
-090101000901010009010101090101000901010109010100090201020901010209000101
-090001010900010109000100090101000901010109010100090201010901010009010117
-04ff045d0114042101150901010109010100090101000901010009010101090101000905
-010009010103090101020900010009000102090001010900010009010100090101010901
-010009010102090101000901011704ff045d010008120100042101150901010109010100
-090101000901010009010101090101000901010409010103090101020900010009000101
-090101000900010109010100090101010901010009010102090101000901011704ff045d
-010008120100042101150901010009020100090101000901010009020100090101000901
-010109010100090101030901010009000100090001010901010009010102090101000901
-01000902010009010102090101000901011704ff045d0100081201000421011609010100
-090101000901010009010100090101000901010209030101090101040901010209000108
-09010101090101000901010009010102090101000901011704ff045d0100081201000421
-013d0904012f04ff045d01140421017204ff045d0100081201000421017204ff045d0100
-081201000421017204ff045d0100081201000421017204ff045d01000812010004210172
-04ff045d01140421017204ff045d01000812010004ff04f201000812010004ff04f20100
-0812010004ff04f201000812010004ff04f2011404ff04f201000812010004ff04f20100
-0812010004ff04f201000812010004ff04f201000812010004ff04f201140444010004ff
-04ac0100081201000444010004ff04ac0100081201000444010004ff04ac010008120100
-0444010004ff04ac0100081201000444010004ff04ac01140444010004ff04ac01000812
-01000444010004ff04ac0100081201000444010004ff04ac0100081201000444010004ff
-04ac0100081201000444010004ff04ac01140444010004ff04ac01000812010004440100
-04ff04ac0100081201000444010004ff04ac0100081201000444010004ff04ac01000812
-01000444010004ff04ac01140444010004ff04ac0100081201000444010004ff04ac0100
-081201000444010004ff04ac0100081201000444010004ff04ac01000812010004440100
-04ff04ac0114044401a004ff040c01000812010004440100044e0100044e010004ff040c
-01000812010004440100044e0100044e010004ff040c01000812010004440100044e0100
-044e010004ff040c01000812010004440100044e0100044e010004ff040c011404440100
-044e0100044e010004ff040c01000812010004440100044e0100044e010004ff040c0100
-0812010004440100044e0100044e010004ff040c01000812010004440100044e0100044e
-010004ff040c01000812010004440100044e0100044e010004ff040c011404440100044e
-0100044e010004ff040c01000812010004440100044e0100044e010004ff040c01000812
-010004440100044e0100044e010004ff040c01000812010004440100044e0100044e0100
-04ff040c01000812010004440100044e0100044e010004ff040c011404440100044e0100
-044e010004ff040c01000812010004440100044e0100044e010004ff040c010008120100
-04440100044e0100044e010004ff040c01000812010004440100044e0100044e010004ff
-040c01000812010004210045040900450409004504ea0114042000450701040700450701
-04070045070104e901000812010004200001044307010407000104430701040700010443
-070104e901000812010004200001044307010407000104430701040700010443070104e9
-01000812010004200001044307010407000104430701040700010443070104e901000812
-010004200001044307010407000104430701040700010443070104e9011404200001040f
-0101041e01010410070104070001042a010104160701040700010443070104e901000612
-0101041f0001040f0101041e01010410070104070001042a010104160701040700010443
-070104e90100061201010403010204180001040f01010401010104010103040101010400
-010304000101040201030401010104100701040700010416010304020103040201030401
-01010416070104070001040d010004000102040001020401010104020101040101030401
-0101040001010401010104000101040f070104e901000612010104020101040001010417
-0001040f0101040001010401010104010101040001070400010104000101040101010400
-010104100701040700010415010104010101040001010401010104000101040101010400
-01010416070104070001040d010104010101040101010400010104020101040001010401
-010104000102040001010400010204000101040e070104e9010006120101040201010400
-010104170001040f01030402010104010101040001020401010104010101040001010401
-010104000101041007010407000104150102040701010400010204030101041607010407
-0001040d0101040101010401010104010101040001010405010104000101040101010400
-010104010101040e070104e901170401010204180001040f010304020105040001010402
-010104010101040001050400010104100701040700010417010204020104040201020401
-01010416070104070001040d010104010101040101010401010104000101040201040400
-0101040101010400010104010101040e070104e901010403010204010101040201030400
-01020402010004190001040f010104000101040101010404010104020101040101010400
-010104040101041007010407000104180102040001010401010104030102040001010416
-070104070001040d01010401010104010101040201020402010104010101040001010401
-01010400010104010101040e070104e90101040201010400010104000102040001010400
-010104210001040f01010401010104000101040101010400010104020101040101010400
-010104010101040001010410070104070001041501010401010104000101040101010400
-010104010101040001010416070104070001040d01010401010104010101040201020402
-01010401010104000102040001010400010204000101040e070104e90101040201010400
-010104000102040001010400010104210001040f01010402010104000103040101010402
-010104010101040101030401010104100701040700010416010304020102040001010400
-0103040101010416070104070001040d0101040101010401010104030101040301020400
-0103040001010401010104000101040f070104e901030401010204010102040101030421
-000104430701040700010443070104070001041b0100040a0101040401010412070104ea
-01020402010004030100040301000423000104430701040700010443070104070001041a
-0101040a0101040401010412070104ff041f000104430701040700010443070104070001
-04190101040b0101040401010412070104ff041f00010443070104070001044307010407
-00010443070104ff041f0001044307010407000104430701040700010443070104ff041f
-0000074604070000074604070000074604ff04200746040807460408074604ff04ff04ff
-04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff042c01ff
-01ff010704ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff
-04ff04ff0447
-%%EndData
-end
-%%PageTrailer
-%%Trailer
-%%BoundingBox: 0 26 377 164
-%%EOF
diff --git a/lib/appmon/doc/src/note.gif b/lib/appmon/doc/src/note.gif
deleted file mode 100644
index 6fffe30419..0000000000
--- a/lib/appmon/doc/src/note.gif
+++ /dev/null
Binary files differ
diff --git a/lib/appmon/doc/src/notes.xml b/lib/appmon/doc/src/notes.xml
deleted file mode 100644
index ac17c555f7..0000000000
--- a/lib/appmon/doc/src/notes.xml
+++ /dev/null
@@ -1,300 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE chapter SYSTEM "chapter.dtd">
-
-<chapter>
- <header>
- <copyright>
- <year>2004</year><year>2013</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>Appmon Release Notes</title>
- <prepared></prepared>
- <docno>nil</docno>
- <date>nil</date>
- <rev>nil</rev>
- <file>notes.xml</file>
- </header>
- <p>This document describes the changes made to the Appmon application.</p>
-
-<section><title>Appmon 2.1.14.2</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Misc build updates</p>
- <p>
- Own Id: OTP-10784</p>
- </item>
- <item>
- <p>
- The backend module appmon_info.erl is moved from appmon
- application to runtime_tools. This allows appmon to be
- run from a remote erlang node towards a target node which
- does not have appmon (and its dependencies) installed, as
- long as runtime_tools is installed there.</p>
- <p>
- Own Id: OTP-10786</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Appmon 2.1.14.1</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>The GS applications is now deprecated and will be
- removed in the R16 release. The following GS-based
- applications have been superseded by the Observer
- application and will removed in R16: Appmon, Pman,
- Tv.</p>
- <p>
- *** POTENTIAL INCOMPATIBILITY ***</p>
- <p>
- Own Id: OTP-9907</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Appmon 2.1.14</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Eliminate use of deprecated regexp module</p>
- <p>
- Own Id: OTP-9810</p>
- </item>
- <item>
- <p>
- Miscellaneous documentation build updates</p>
- <p>
- Own Id: OTP-9813</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Appmon 2.1.13</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- An obsolete compiler directive for native code generation
- was removed from a source file.</p>
- <p>
- Own Id: OTP-8839</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Appmon 2.1.12</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Warnings due to new autoimported BIFs removed</p>
- <p>
- Own Id: OTP-8674 Aux Id: OTP-8579 </p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Appmon 2.1.11</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>The documentation is now possible to build in an open
- source environment after a number of bugs are fixed and
- some features are added in the documentation build
- process. </p>
- <p>- The arity calculation is updated.</p>
- <p>- The module prefix used in the function names for
- bif's are removed in the generated links so the links
- will look like
- "http://www.erlang.org/doc/man/erlang.html#append_element-2"
- instead of
- "http://www.erlang.org/doc/man/erlang.html#erlang:append_element-2".</p>
- <p>- Enhanced the menu positioning in the html
- documentation when a new page is loaded.</p>
- <p>- A number of corrections in the generation of man
- pages (thanks to Sergei Golovan)</p>
- <p>- The legal notice is taken from the xml book file so
- OTP's build process can be used for non OTP
- applications.</p>
- <p>
- Own Id: OTP-8343</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Appmon 2.1.10.2</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>Appmon 2.1.10.1</title>
-
- <section>
- <title>Improvements and New Features</title>
- <list type="bulleted">
- <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>Appmon 2.1.9</title>
-
- <section>
- <title>Fixed Bugs and Malfunctions</title>
- <list type="bulleted">
- <item>
- <p>Fixed dialyzer warning in <c><![CDATA[appmon_info]]></c>.</p>
- </item>
- </list>
- </section>
- </section>
-
- <section>
- <title>Appmon 2.1.8</title>
-
- <section>
- <title>Fixed Bugs and Malfunctions</title>
- <list type="bulleted">
- <item>
- <p>Removed some dead code from the <c><![CDATA[appmon_info]]></c> and
- <c><![CDATA[process_info]]></c> modules. Also rewritten large parts
- of <c><![CDATA[process_info]]></c> to make it easier to read and more
- efficient.</p>
- <p>Own Id: OTP-6534</p>
- </item>
- </list>
- </section>
- </section>
-
- <section>
- <title>Appmon 2.1.7</title>
-
- <section>
- <title>Fixed Bugs and Malfunctions</title>
- <list type="bulleted">
- <item>
- <p>Appmon now handles a process name containing the
- character '@' correctly. (Thanks to Mikael Magnusson).</p>
- <p>Own Id: OTP-6308</p>
- </item>
- <item>
- <p>The "Send" button in the application window was broken,
- it always failed (silently).</p>
- <p>Own Id: OTP-6333</p>
- </item>
- </list>
- </section>
- </section>
-
- <section>
- <title>Appmon 2.1.6</title>
-
- <section>
- <title>Improvements and New Features</title>
- <list type="bulleted">
- <item>
- <p>Internal change only (using a private digraph instead of
- a public one).</p>
- <p>Own Id: OTP-5983</p>
- </item>
- <item>
- <p>Notification windows are now centered over the parent
- window (if possible).</p>
- <p>Own Id: OTP-6010 Aux Id: OTP-5987</p>
- </item>
- <item>
- <p>Removed some dead code from <c><![CDATA[appmon_info]]></c>,
- discovered by Dialyzer.</p>
- <p>Own Id: OTP-6040</p>
- </item>
- </list>
- </section>
- </section>
-
- <section>
- <title>Appmon 2.1.5</title>
-
- <section>
- <title>Improvements and New Features</title>
- <list type="bulleted">
- <item>
- <p>Eliminated 5 discrepancies found by Dialyzer in the
- Appmon application.</p>
- <p>Own Id: OTP-5633</p>
- </item>
- </list>
- </section>
- </section>
-
- <section>
- <title>Appmon 2.1.4</title>
-
- <section>
- <title>Fixed Bugs and Malfunctions</title>
- <list type="bulleted">
- <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>
-</chapter>
-
diff --git a/lib/appmon/doc/src/part.xml b/lib/appmon/doc/src/part.xml
deleted file mode 100644
index c9766d39ca..0000000000
--- a/lib/appmon/doc/src/part.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE part SYSTEM "part.dtd">
-
-<part xmlns:xi="http://www.w3.org/2001/XInclude">
- <header>
- <copyright>
- <year>2000</year><year>2013</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>Appmon User's Guide</title>
- <prepared></prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- </header>
- <description>
- <p>The Application Monitor, <em>Appmon</em>, is a graphical utility used
- to supervise applications executing either locally or on remote nodes.
- The process tree of an application can furthermore be monitored.</p>
- </description>
- <xi:include href="appmon_chapter.xml"/>
-</part>
-
diff --git a/lib/appmon/doc/src/part_notes.xml b/lib/appmon/doc/src/part_notes.xml
deleted file mode 100644
index 8b1b8fe39e..0000000000
--- a/lib/appmon/doc/src/part_notes.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE part SYSTEM "part.dtd">
-
-<part xmlns:xi="http://www.w3.org/2001/XInclude">
- <header>
- <copyright>
- <year>2004</year><year>2013</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>Appmon Release Notes</title>
- <prepared>Ingela Anderton Andin</prepared>
- <docno></docno>
- <date>2004-09-07</date>
- <rev></rev>
- <file>part_notes.sgml</file>
- </header>
- <description>
- <p>The Application Monitor, <em>Appmon</em>, is a graphical utility
- used to supervise applications executing either locally or on
- remote nodes. The process tree of an application can furthermore
- be monitored.</p>
- </description>
- <include file="notes"></include>
-</part>
-
diff --git a/lib/appmon/doc/src/pinfo_win.gif b/lib/appmon/doc/src/pinfo_win.gif
deleted file mode 100644
index fda0900436..0000000000
--- a/lib/appmon/doc/src/pinfo_win.gif
+++ /dev/null
Binary files differ
diff --git a/lib/appmon/doc/src/pinfo_win.ps b/lib/appmon/doc/src/pinfo_win.ps
deleted file mode 100644
index d47d7d47a9..0000000000
--- a/lib/appmon/doc/src/pinfo_win.ps
+++ /dev/null
@@ -1,1353 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Creator: (ImageMagick)
-%%Title: (./pinfo_win.tmp.eps)
-%%CreationDate: (Tue Jun 12 18:01:56 2001)
-%%BoundingBox: 0 73 377 347
-%%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 73 377 347
-userdict begin
-%%BeginData:
-DisplayImage
-0 73
-377.000000 274.000000
-12
-580 421
-1
-0
-0
-8
-ffffff
-000000
-708090
-b03060
-d9d9d9
-c3c3c3
-828282
-000000
-03ff03ff03ff03ff03ff035e040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-04000300040003000400031a040c03c50400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-04000300040003000400030004000308040c03050400030a0400030a0401030304050301
-0405030104010304040103030403030304010302040103090405032d040103090402031e
-040103010401031704000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-0400030004000307040003020400030204000302040003050400030a0400030904030302
-040103020401030004010302040103000401030404010302040103010401030204020301
-04010309040103020401032c04010308040103200401031a040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000308040003020400030204000302
-040003050400030304020303040003090400030104000302040103020401030004010302
-040103000402030204020301040103030401030104020301040103010401030504010302
-040303000401030004030302040303020403030204030302040303060401030004010300
-040103010403030104030301040103000402030004020300040203020403030104030300
-0401030104030301040103000401030a0400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003070400030204000302040003020400030504000302
-040403020400030804010301040103010401030204010300040103020401030004020302
-040203010401030304010301040103000400030004010301040103050401030204080301
-040103000401030104010300040103010401030004010301040103000401030104010305
-040103000402030004010301040103010401030104010300040603010401030104010300
-040103010401030104010301040103000401030104010300040203000401030804000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030804040302
-040003020400030504000301040603010400030804010301040103010405030104050301
-040303000403030104010303040103010401030004000300040103090405030004020301
-040103010401030004010304040103010401030004020303040203080401030004010301
-040103010401030104010301040103000402030104010301040103010401030404010301
-040103010401030004010301040103000401030104010309040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000307040003060400030204000305
-040003010406030104000308040503010401030504010305040103000400030004000300
-040103010401030304010301040103010402030904010304040103020401030104010300
-040103040405030204020303040203060401030004010301040103010401030104010301
-040103000401030204010301040103010401030104040301040103010401030004010301
-040103000401030104010308040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000308040003060400030204000305040003010406030104000307
-040103030401030004010305040103050401030004020300040103010401030304010301
-040103010402030904010304040103020401030104010300040103040401030704020303
-040203050401030004010301040103010401030104010301040103000401030204010301
-040103010401030004010301040103010401030104010300040103010401030004010301
-040103090400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003070400030604000302040003050400030204040302040003070401030304010300
-040103050401030504010301040003010401030204010301040103020401030204010301
-040103050401030404010302040103010401030004010301040103000401030104010300
-040103010401030004010301040103050401030004010301040103010401030104010301
-040103000401030204010301040103010401030004010301040103010401030004020300
-040103010401030004010301040103080400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003080408030204000305040003030402030304000307
-040103030401030004010305040103050401030104000301040103030403030304010302
-040103010401030504010304040103030403030204030302040303020403030204030306
-040103000401030104010301040103020403030104010302040103010401030104010301
-040203000401030104010300040103010403030104010301040103090400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003070400030a04000305
-0400030a040003c504000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-04000300040003080400030a040003050400030a040003c6040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-0400030004000300040003000400030004000300040003070400030a04000305040c03c5
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000308
-040c03d90400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003ff03ff03ff03ff039f02ff02ff02ff02ff028700ff00ff00ff00ff008606000001
-04ff04ff043f0601000104ff04ff043f0601000104ff04ff043f0601000104ff04ff043f
-0601000104ff04ff043f0601000104040104040401000403010204ff04ff042806010001
-04040100040f010004ff04ff0428060100010404010004060102040501000403010204ff
-04ff042106010001040401000408010004050100040201000402010004ff04ff04200601
-0001040401030405010004050100040201000402010004ff04ff04200601000104040100
-04080100040501000402010404ff04ff0420060100010404010004080100040501000402
-010004ff04ff042406010001040401000408010004050100040201000402010004ff04ff
-0420060100010404010004080100040501000403010204ff04ff04210601000104ff04ff
-043f0601000104ff04ff043f0601000104ff04ff043f0601000104ff04ff043f06010001
-04ff04ff043f0601000104ff04ff043f0601000106ff06ff0641000006ff06ff064204ff
-04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff0484061204ff04ff04300611
-0000040106ff06ff062c040106010506060005060001040106ff06ff062b000004010601
-0505000006000506000104010601040a0101045f0101047801010404010104ff04370001
-0401060105050000060105050001040106010409010004600100047c01000405010004ff
-043600010401060105040001060105050001040106010409010004060100040c01000404
-010004060100040a01020418010204030102040b0100042701020405010004020100040f
-0100040c01000404010004180104040301000405010004ff043600010401060105040001
-04000601050400010401060104090100041a010004140100041a010004050100040b0100
-04290100040901000423010004180100040701000405010004ff04360001040106010503
-000104010601050400010401060104090100040401020402010004000101040301020402
-0104040201020403010204050100040a0102040301020405010004050100040b01000403
-01000400010104020100040001010403010204030102040c010004030102040201000400
-0101040a0102040201000400010104030102040201040408010004000101040901000407
-01000405010004ff04360001040106010503000104020601050300010401060104090100
-040601000402010104010100040401000404010004060100040201000402010004040100
-040901000402010004010100040201000404010004050100040b01000403010104010100
-040101010401010004010100040201000401010004020100040b01000405010004020101
-04010100040b010004020101040101000404010004040100040a01010401010004080103
-040401000405010004ff0436000104010601050200010403060105030001040106010407
-010104070100040201000402010004040100040401000406010004060100040401000409
-010004090100040401000405010004090101040401000402010004010100040501000402
-010004010100040f0100040501000402010004020100040b010004020100040201000404
-010004040100040a010004020100040c0100040401010404010104ff0434000104010601
-050200010404060105020001040106010409010004060100040201000402010004040100
-0404010004060100040301030404010004090100040601030404010004050100040b0100
-040301000402010004010100040501000402010004010100040f01000405010004020100
-04020100040b010004020100040201000404010004040100040a010004020100040c0100
-040301000405010004ff0436000104010601050100010405060105020001040106010409
-010004060100040201000402010004040100040401000406010004020100040201000404
-01000409010004050100040201000404010004050100040b010004030100040201000401
-0100040501000402010004010100040f0100040501000402010004020100040b01000402
-0100040201000404010004040100040a0100040201000408010004020100040301000405
-010004ff0436000104010601050100010406060105010001040106010409010004060100
-040201000402010004040100040401000406010004020100040201000404010004090100
-040201000401010004020100040401000405010004040101040401000403010104010100
-0401010004050100040201000401010004020100040b0100040501000402010104010100
-040301010405010004020100040201000404010004040100040a01010401010004030101
-040201000402010004030100040501000405010104ff042e000104010601050000010407
-060105010001040106010409010004060100040201000402010004040100040501010404
-01000403010304040100040a010204030103040401000405010004040101040401000403
-010004000101040201000406010204030102040c01000405010004020100040001010404
-010104050100040201000402010004040100040501010408010004000101040401010403
-010204040100040501000405010104ff042e000104010601050000010408060105000001
-0401060104090100043301050420010004040100040301000419010504190100041d0105
-0401010004080100040b0100040501000406010004ff042e0001040106010001060b0500
-000104010601040a0101045601010406010104010100043701010426010004060101040a
-0101040401010405010104ff042f0001040106010000060d000104010601047001000460
-010004ff0454000104010601050e000104010601040a01010463010104ff04b500010401
-0601050e000104010601040901000467010004ff04b4000104010601050e000104010601
-04090100040c0100040c01000429010004040100040601000412010004ff04b400010401
-0601050e00010401060104090100040c0100040c0100042f0100041a010004ff04b40001
-04010601050e000104010601040901000404010204020104040201020402010404010100
-040201000402010204090100040201000402010204030102040201040402010204020100
-0400010104030101040001000403010004ff04b4000104010601050e0001040106010409
-010004030100040201000403010004030100040201000403010004030100040201000401
-010004020100040801000402010004010100040201000404010004040100040601000402
-01010401010004010100040101010403010004ff04b4000104010601050e000104010601
-0407010104040100040701000407010004030100040301000402010004010100040c0100
-040001000400010004050100040401000404010004060100040201000402010004010100
-040201000404010104ff04b2000104010601050e00010401060104090100040401020404
-010004040103040301000403010004020100040201020409010004000100040001000402
-0103040401000404010004060100040201000402010004010100040201000403010004ff
-04b4000104010601050e0001040106010409010004070100040301000403010004020100
-040301000403010004020100040501000408010004000100040001000401010004020100
-040401000404010004060100040201000402010004010100040201000403010004ff04b4
-000104010601050e00010401060104090100040301000402010004030100040301000402
-010004030100040301000401010104010100040201000403010104020100040001000400
-010004010100040201000404010004040100040601000402010004020100040101000401
-0101040301000405010104ff04ac000104010601050e0001040106010409010004040102
-040501010402010304040101040201010400010004020102040401010403010004000100
-040301030404010004050101040401000402010004020100040201010400010004030100
-0405010104ff04ac000104010601050e0001040106010409010004300100043001000403
-01000406010004ff04ac000104010601050e000104010601040a0101042c0101042d0100
-04020100040101010405010104ff04ad000104010601050e000104010601046a010204ff
-04ba000104010601050e000104010601040a01010486010104ff0492000104010601050e
-00010401060104090100048a010004ff0491000104010601050e00010401060104090100
-04660102041901010404010004ff0491000104010601050e000104010601040901000468
-010004180100040101000403010004ff0491000104010601050e00010401060104090100
-040301010400010004030102040301020403010204030102040301010400010004020102
-040a010104000100040101000402010004020102040201000402010004020102040c0100
-040301020402010004000101040a0100040101000403010004ff0491000104010601050e
-000104010601040901000403010004000100040001000401010004020100040101000402
-010004010100040201000401010004020100040101000401010104010100040201000408
-010004010101040101000402010004010100040201000401010004020100040101000402
-0100040b01000402010004020100040101010401010004090100040101000403010004ff
-0491000104010601050e0001040106010407010104040100040001000400010004010100
-040201000401010004050100040901000401010004020100040101000402010004080100
-040201000401010004020100040101000402010004010100040201000401010004020100
-040b01000402010004020100040101000402010004090100040101000404010104ff048f
-000104010601050e00010401060104090100040301000400010004000100040101040402
-010204030102040301030401010004020100040101040408010004020100040101000402
-010004010104040101000402010004010104040b01000402010404010100040201000409
-0100040101000403010004ff0491000104010601050e0001040106010409010004030100
-040001000400010004010100040901000405010004010100040201000401010004020100
-04010100040c010004020100040101000402010004010100040501000402010004010100
-040f010004020100040501000402010004090100040101000403010004ff049100010401
-0601050e0001040106010409010004030100040001000400010004010100040201000401
-010004020100040101000402010004010100040201000401010004010101040101000402
-010004080100040101010401010004010101040101000402010004010100040101010401
-010004020100040b01000402010004020100040101000402010004030101040301000401
-0100040301000405010104ff0489000104010601050e0001040106010409010004030100
-040001000400010004020102040301020403010204030103040201010400010004020102
-040a010104000100040201010400010004020102040301010400010004020102040c0100
-0403010204020100040201000403010104040101040401000405010104ff048900010401
-0601050e00010401060104090100042a01000407010504050100041c010504190100040b
-01000406010004ff0489000104010601050e000104010601040a01010424010004020100
-04130100043a0101040a01010405010104ff048a000104010601050e0001040106010432
-01020414010004ff04dc000104010601050e000104010601040a0101044e010104ff04ca
-000104010601050e0001040106010409010004430103040101030404010004ff04c90001
-04010601050e0001040106010409010004430100040701000404010004ff04c900010401
-0601050e0001040106010409010004430100040701000404010004ff04c9000104010601
-050e00010401060104090100040301010400010004030102040301020403010204030102
-04030101040001000402010204030102040a0100040701000404010004ff04c900010401
-0601050e0001040106010409010004030100040001000400010004010100040201000401
-010004020100040101000402010004010100040201000401010004010101040101000402
-0100040101000402010004090100040701000404010004ff04c9000104010601050e0001
-040106010407010104040100040001000400010004010100040201000401010004050100
-040901000401010004020100040101000402010004010100040d01000407010004050101
-04ff04c70001040106010010040106010409010004030100040001000400010004010104
-04020102040301020403010304010100040201000401010404020102040a010004070100
-0404010004ff04c9000104010601000d0600000104010601040901000403010004000100
-040001000401010004090100040501000401010004020100040101000402010004010100
-0409010004090100040701000404010004ff04c90001040106010001040a060100010401
-060104090100040301000400010004000100040101000402010004010100040201000401
-010004020100040101000402010004010100040101010401010004020100040101000402
-0100040301010403010004070100040401000405010104ff04c10001040106010001040a
-060100010401060104090100040301000400010004000100040201020403010204030102
-040301030402010104000100040201020403010204040101040301000407010004040100
-0405010104ff04c10001040106010001040a060100010401060104090100042a01000412
-01000403010304010103040401000406010004ff04c10001040106010001040a06010001
-04010601040a0101042401000402010004100101041101010405010104ff04c200010401
-06010001040a06010001040106010432010204ff04f20001040106010001040a06010001
-04010601040a01010478010104ff04a00001040106010001040a06010001040106010409
-0100042e01030405010004310100040601030404010004ff049f0001040106010001040a
-060100010401060104090100040401020405010004090100041401000407010004040101
-040b01000405010104030102040b010104020100040801000404010004ff049f00010401
-06010001040a060100010401060104090100040601000410010004140100040601000404
-010004010100040901010404010004010100040101000402010004090100040101000402
-0100040701000404010004ff049f0001040106010001040a060100010401060104090100
-04060100040301020402010004000101040201000401010004030102040a010004050100
-040501000401010004080100040001000404010004010100040501000409010004010100
-04030100040601000404010004ff049f0001040106010001040a06010001040106010409
-010004060100040501000402010104010100040101000400010004030100040201000409
-0100040401000406010004010100040a0100040401000401010004050100040901000401
-010004040100040501000404010004ff049f0001040106010001040a0601000104010601
-04070101040701000405010004020100040201000401010104040100040d010004030100
-0407010004010100040a0100040401000401010004030101040a01000401010004050100
-040401000405010104ff049d0001040106010001040a0601000104010601040901000406
-01000405010004020100040201000401010104050102040a010004040100040601000401
-0100040a0100040401000401010004050100040901000401010004040100040501000404
-010004ff049f0001040106010001040a0601000104010601040901000406010004050100
-040201000402010004010100040001000407010004090100040501000405010004010100
-040a01000404010004010100040501000409010004010100040301000406010004040100
-04ff049f0001040106010001040a06010001040106010409010004060100040501000402
-010004020100040101000401010004020100040201000403010104030100040601000404
-010004010100040301010404010004040100040101000401010004020100040301010403
-0100040101000402010004070100040401000405010104ff04970001040106010001040a
-060100010401060104090100040601000405010004020100040201000401010004020100
-040201020404010104030100040701000404010104040101040201040403010104030102
-04040101040401010402010004080100040401000405010104ff04970001040106010001
-040a06010001040106010409010004290100040301030405010004310100040601030404
-01000406010004ff04970001040106010001040a0601000104010601040a010104250101
-045001010405010104ff04980001040106010001040a060100010401060104ff04ff0428
-0001040106010001040a0601000104010601040a01010458010104ff0419010104a40001
-040106010001040a06010001040106010409010004510103040301000406010004040100
-04450100040a01030475010004310100040601030404010004a30001040106010001040a
-0601000104010601040901000407010004040100040b010004060100042d010004060100
-040601000403010204270100041b0100040a01000477010004040101040b010004050101
-04040100040c010104020100040801000404010004a30001040106010001040a06010001
-040106010409010004070100041101000435010004060100040501000403010004000100
-0400010004260100041a0100040b01000476010004040100040101000409010104040100
-0401010004020101040b01000401010004020100040701000404010004a3000104010601
-0001040a0601000104010601040901000404010104000100040201020403010204020104
-040201020403010204020100040001010403010204020100040001010402010004020100
-040901000406010004040100040401000400010004040102040201000400010104030102
-0403010204030102040201040402010204020100040001010403010204030100040c0100
-040401010400010004020100040201000402010204020100040201000401010004000101
-040901010400010004020100040201000402010204020100040001010402010004000101
-040a010204020100040201000401010004000101040a0100040501000401010004080100
-0400010004040100040101000401010004000100040b0100040101000403010004060100
-0404010004a30001040106010001040a0601000104010601040901000403010004010101
-040401000402010004020100040301000406010004020100040201000401010104010100
-0401010004020100040101010401010004010100040201000409010004060100040a0100
-040001000403010004020100040101010401010004010100040201000401010004020100
-040101000402010004030100040301000402010004010101040101000401010004020100
-041001000404010004000100040001000401010004020100040101000402010004010100
-040201000401010104010100040801000400010004000100040101000402010004010100
-040201000401010104010100040101010401010004080100040201000401010004020100
-0401010104010100040801000406010004010100040a0100040401000401010004030100
-040b01000401010004040100040501000404010004a30001040106010001040a06010001
-040106010407010104040100040201000404010004020100040701000406010004020100
-040201000401010004020100040501000401010004060100040101000409010004040101
-040c01020406010004010100040201000401010004050100040201000401010004070100
-040301000402010004010100040501000414010004040100040001000400010004020100
-040101000401010004050100040201000401010004020100040801000400010004000100
-040201000401010004050100040101000402010004010100040201000408010004050100
-040201000401010004020100040701000407010004010100040a01000404010004010100
-04030100040b01000401010004050100040401000405010104a10001040106010001040a
-060100010401060104090100040301000402010004040100040201000407010004060100
-040201000402010004010100040201000402010304010100040601000401010004090100
-04060100040c010004000100040201030401010004020100040101000405010404020102
-040401000403010004020100040101000406010204110100040401000400010004000100
-040201000401010004020102040201000402010004010100040201000408010004000100
-040001000402010004010100040201030401010004020100040101000402010004090102
-04020100040201000401010004020100040801000406010004010100040a010004040100
-0401010004030100040b01000401010004040100040501000404010004a3000104010601
-0001040a0601000104010601040901000403010004020100040401000402010004070100
-040601000402010004020100040101000402010004010100040201000401010004070100
-040001000409010004060100040c01000400010004010100040201000401010004020100
-040101000405010004090100040301000403010004020100040101000409010004100100
-040401000400010004000100040301000400010004050100040101000402010004010100
-040201000408010004000100040001000403010004000100040101000402010004010100
-040201000401010004020100040c01000401010004020100040101000402010004090100
-0405010004010100040a0100040401000401010004030100040b01000401010004030100
-040601000404010004a30001040106010001040a06010001040106010409010004030100
-040101010404010004020100040201000403010004060100040201000402010004010100
-0402010004010100040201000401010004070101040401010403010004060100040a0100
-040001000400010004010100040201000401010004020100040101000402010004010100
-040201000401010004020100040301000403010004020100040101000405010004020100
-040a01010403010004040100040001000400010004030101040201000402010004010100
-040101010401010104010100040301010402010004000100040001000403010104020100
-040201000401010104010100040101010401010004080100040201000401010004010101
-040101010401010004030101040401000404010004010100040301010404010004040100
-040101000403010004050101040301000401010004020100040701000404010004050101
-049b0001040106010001040a060100010401060104090100040401010400010004040100
-040301020405010104040100040301020402010004020100040201030401010004080100
-040401010403010004060100040b01020403010304010100040201000402010204030102
-0403010204050101040201020402010004060102040b0101040301000404010004000100
-040001000404010004030102040301010400010004010100040001010404010104020100
-0400010004000100040401000403010304010100040001010402010004000101040a0102
-040301010400010004010100040001010404010104050100040401010404010104020104
-0403010104020104040301010404010104020100040801000404010004050101049b0001
-040106010001040a06010001040106010409010004450100040501000403010304030100
-040c0100044c010004030103040b01000410010004080100040c01000409010004050100
-04040105040f0100040801000406010004310100040601030404010004060100049b0001
-040106010001040a0601000104010601040a0101044001000400010004040101040d0101
-0456010104110100040001000411010004060101040a010004000100040a010004050100
-041a0100040601010449010104050101049c0001040106010001040a0601000104010601
-044e0100048301000412010004140100040b010004050100041a010004f9000104010601
-0001040a0601000104010601046501010474010104ff04490001040106010001040a0601
-000104010601046401000406010004040100045a0100040b010004ff044b000104010601
-0001040a060100010401060104640100040601000403010204050100040c010004040100
-04060100040a0102041801020403010204050100040b010004220100040c010004040100
-040d01000404010004fe0001040106010001040a06010001040106010464010004050100
-0403010004000100040001000418010004140100041a01000405010004040100040c0100
-043601000413010004fe0001040106010001040a06010001040106010464010004040100
-040401000400010004040102040201000400010104030102040201040402010204030102
-04050100040a010204030102040501000405010004030100040d01000404010104000100
-040201020402010004000101040a01020402010004000101040301020402010404090102
-0402010404fc0001040106010001040a060100010401060104640100040a010004000100
-040601000402010104010100040401000404010004060100040201000402010004040100
-040901000402010004010100040201000404010004050100041201000403010004010101
-04010100040201000401010104010100040b010004020101040101000404010004040100
-040d01000404010004fe0001040106010001040a060100010401060104620101040c0102
-040501000402010004020100040401000404010004060100040601000404010004090100
-040901000404010004050100041001010404010004020100040101000402010004010100
-04020100040b010004020100040201000404010004040100040d01000404010004fe0001
-040106010001040a060100010401060104640100040c0100040001000404010004020100
-040201000404010004040100040601000403010304040100040901000406010304040100
-04050100041201000403010004020100040101040401010004020100040b010004020100
-040201000404010004040100040d01000404010004fe0001040106010001040a06010001
-0401060104640100040c0100040001000404010004020100040201000404010004040100
-040601000402010004020100040401000409010004050100040201000404010004050100
-041201000403010004020100040101000405010004020100040b01000402010004020100
-0404010004040100040d01000404010004fe0001040106010001040a0601000104010601
-04640100040a010004000100040001000404010004020100040201000404010004040100
-040601000402010004020100040401000409010004020100040101000402010004040100
-04050100040b010104040100040301000401010104010100040201000401010004020100
-040301010405010004020100040201000404010004040100040d01000404010004050101
-04f60001040106010001040a060100010401060104640100040b01020405010004020100
-040201000404010004050101040401000403010304040100040a01020403010304040100
-04050100040b010104040100040401010400010004020102040201000402010004030101
-0405010004020100040201000404010004050101040b0100040501010403010104f60001
-040106010001040a060100010401060104640100040c0100043301050427010004040100
-0407010004120100041d01050412010004f60001040106010001040a0601000104010601
-04650101046b0101040601010401010004020100041001010435010104f7000104010601
-0001040a060100010401060104e1010204ff04430001040106010001040a060100010401
-060104ff04ff04280001040106010001040a060100010401060104fd010304ff04260001
-040106010001040a060100010401060104fd010004ff04290001040106010001040a0601
-00010401060104fd010004ff04290001040106010001040a060100010401060104fd0100
-0405010104000100040201020402010004000101040a0102040301020402010004000101
-040201000402010004020102040201000400010104e10001040106010001040a06010001
-0401060104fd010004040100040101010401010004020100040101010401010004080100
-040201000401010004020100040101010401010004010100040201000401010004020100
-040101010401010004e00001040106010001040a060100010401060104fd010004040100
-040201000401010004020100040101000402010004080100040501000402010004010100
-040501000402010004010100040201000401010004e40001040106010001040a06010001
-0401060104fd010004040100040201000401010404010100040201000409010204020104
-040101000406010004000100040201040401010004e40001040106010001040a06010001
-0401060104fd01000404010004020100040101000405010004020100040c010004010100
-040501000406010004000100040201000405010004e40001040106010001040a06010001
-0401060104fd010004040100040101010401010004020100040101000402010004080100
-040201000401010004020100040101000407010004030100040201000401010004070101
-04da0001040106010001040a060100010401060104fd0100040501010400010004020102
-040201000402010004090102040301020402010004070100040401020402010004070101
-04da0001040106010001040a060100010401060104fd010304050100040e0105042e0100
-04da0001040106010001040a060100010401060104ff04030100040201000441010104db
-0001040106010001040a060100010401060104ff0404010204ff04200001040106010001
-040a060100010401060104ff04ff04280001040106010001040a060100010401060104ff
-040701000431010004ec0001040106010001040a060100010401060104ff040601000404
-0101040b01000405010104030102040b01010402010004eb0001040106010001040a0601
-00010401060104ff04050100040401000401010004090101040401000401010004010100
-0402010004090100040101000402010004ea0001040106010001040a0601000104010601
-04ff04040100040501000401010004080100040001000404010004010100040501000409
-0100040101000403010004e90001040106010001040a060100010401060104ff04030100
-0406010004010100040a0100040401000401010004050100040901000401010004040100
-04e80001040106010001040a060100010401060104ff040201000407010004010100040a
-0100040401000401010004030101040a0100040101000405010004e70001040106010001
-040a060100010401060104ff040301000406010004010100040a01000404010004010100
-0405010004090100040101000404010004e80001040106010001040a0601000104010601
-04ff040401000405010004010100040a0100040401000401010004050100040901000401
-01000403010004e90001040106010001040a060100010401060104ff0405010004040100
-040101000403010104040100040401000401010004010100040201000403010104030100
-04010100040201000406010104e10001040106010001040a060100010401060104ff0406
-010004040101040401010402010404030101040301020404010104040101040201000407
-010104e10001040106010001040a060100010401060104ff040701000431010004090100
-04e10001040106010001040a060100010401060104ff0443010104e20001040106010001
-040a060100010401060104ff04ff04280001040106010001040a060100010401060104ff
-04ff04280001040106010001040a060100010401060104ff040701000431010004ec0001
-040106010001040a060100010401060104ff0406010004040101040b0100040501010403
-0102040b01010402010004eb0001040106010001040a060100010401060104ff04050100
-040401000401010004090101040401000401010004010100040201000409010004010100
-0402010004ea0001040106010001040a060100010401060104ff04040100040501000401
-0100040801000400010004040100040101000405010004090100040101000403010004e9
-0001040106010001040a060100010401060104ff040301000406010004010100040a0100
-04040100040101000405010004090100040101000404010004e80001040106010001040a
-060100010401060104ff040201000407010004010100040a010004040100040101000403
-0101040a0100040101000405010004e70001040106010001040a060100010401060104ff
-040301000406010004010100040a01000404010004010100040501000409010004010100
-0404010004e80001040106010001040a060100010401060104ff04040100040501000401
-0100040a010004040100040101000405010004090100040101000403010004e900010401
-06010001040a060100010401060104ff0405010004040100040101000403010104040100
-040401000401010004010100040201000403010104030100040101000402010004060101
-04e10001040106010001040a060100010401060104ff0406010004040101040401010402
-010404030101040301020404010104040101040201000407010104e10001040106010001
-040a060100010401060104ff04070100043101000409010004e10001040106010001040a
-060100010401060104ff0443010104e20001040106010001040a060100010401060104ff
-04ff04280001040106010001040a060100010401060104ff040601010463010104b90001
-040106010001040a060100010401060104ff040501000467010004b80001040106010001
-040a060100010401060104ff0405010004040102041801020443010004b8000104010601
-0001040a060100010401060104ff0405010004060100041a01000443010004b800010401
-06010001040a060100010401060104ff0405010004060100040301020403010204030102
-040501000409010104000100040201000402010004020102040301020402010004000101
-04020100040201000402010204020100040001010404010004b80001040106010001040a
-060100010401060104ff0405010004060100040201000402010004010100040201000401
-010004020100040401000409010004000100040001000401010004020100040101000402
-010004010100040201000401010104010100040101000402010004010100040201000401
-0101040101000403010004b80001040106010001040a060100010401060104ff04030101
-040701000402010004020100040101000409010004040100040901000400010004000100
-040201000401010004010100040501000402010004010100040501000402010004010100
-04020100040101000408010104b60001040106010001040a060100010401060104ff0405
-010004060100040201000402010004010100040601030404010004090100040001000400
-010004020100040101000402010204020104040101000406010004000100040201040401
-01000407010004b80001040106010001040a060100010401060104ff0405010004060100
-040201000402010004010100040501000402010004040100040901000400010004000100
-040301000400010004050100040101000405010004060100040001000402010004050100
-0407010004b80001040106010001040a060100010401060104ff04050100040601000402
-010004020100040101000402010004010100040201000404010004040101040201000400
-010004000100040301010402010004020100040101000402010004010100040701000403
-01000402010004010100040701000405010104b00001040106010001040a060100010401
-060104ff0405010004060100040301020403010204030103040401000404010104020100
-040001000400010004040100040301020403010204020100040701000404010204020100
-040701000405010104b00001040106010001040a060100010401060104ff040501000429
-0100040c0100042e01000406010004b00001040106010001040a060100010401060104ff
-0406010104250101040a010004000100042d01010405010104b10001040106010001040a
-060100010401060104ff043c010004ea0001040106010001040a060100010401060104ff
-04ff04280001040106010001040a060100010401060104ff04ff04280001040106010001
-040a060100010401060104ff04ff04280001040106010001040a060100010401060104ff
-04ff04280001040106010001040a060100010401060104ff040301010400010004020100
-040201000402010204030102040201000400010104020100040201000402010204020100
-0400010104ef0001040106010001040a060100010401060104ff04030100040001000400
-010004010100040201000401010004020100040101000402010004010101040101000401
-0100040201000401010004020100040101010401010004ee0001040106010001040a0601
-00010401060104ff04030100040001000400010004020100040101000401010004050100
-0402010004010100040501000402010004010100040201000401010004f2000104010601
-0001040a060100010401060104ff04030100040001000400010004020100040101000402
-010204020104040101000406010004000100040201040401010004f20001040106010001
-040a060100010401060104ff040301000400010004000100040301000400010004050100
-04010100040501000406010004000100040201000405010004f20001040106010001040a
-060100010401060104ff0403010004000100040001000403010104020100040201000401
-01000402010004010100040701000403010004020100040101000407010104e800010401
-06010001040a060100010401060104ff0403010004000100040001000404010004030102
-04030102040201000407010004040102040201000407010104e80001040106010001040a
-060100010401060104ff040d0100042f010004e80001040106010001040a060100010401
-060104ff040a010004000100042e010104e90001040106010001040a0601000104010601
-04ff040b010004ff041b0001040106010001040a060100010401060104ff04ff04280001
-040106010001040a060100010401060104ff040401030401010304ff0419000104010601
-0001040a060100010401060104ff040401000407010004ff04190001040106010001040a
-060100010401060104ff040401000407010004ff04190001040106010001040a06010001
-0401060104ff040401000407010004ff04190001040106010001040a0601000104010601
-04ff040401000407010004ff04190001040106010001040a060100010401060104ff0404
-01000407010004ff04190001040106010001040a060100010401060104ff040401000407
-010004ff04190001040106010001040a060100010401060104ff040401000407010004ff
-04190001040106010001040a060100010401060104ff04040100040701000404010104ff
-04120001040106010001040a060100010401060104ff04040100040701000404010104ff
-04120001040106010001040a060100010401060104ff04040103040101030405010004ff
-04120001040106010001040a060100010401060104ff0412010104ff0413000104010601
-0001040a060100010401060104ff04ff04280001040106010001040a0601000104010601
-04ff0418010104040101040b010104f80001040106010001040a060100010401060104ff
-0404010304010103040201030404010004050100040301030404010004f7000104010601
-0001040a060100010401060104ff04040100040701000405010004040100040501000406
-01000404010004f70001040106010001040a060100010401060104ff0404010004070100
-040501000404010004050100040601000404010004f70001040106010001040a06010001
-0401060104ff0404010004070100040501000404010004050100040601000404010004f7
-0001040106010001040a060100010401060104ff04040100040701000405010004040100
-04050100040601000404010004f70001040106010001040a060100010401060104ff0404
-010004070100040501000405010104040101040401000405010104f50001040106010001
-040a060100010401060104ff040401000407010004050100040401000405010004060100
-0404010004f70001040106010001040a060100010401060104ff04040100040701000405
-01000404010004050100040601000404010004f70001040106010001040a060100010401
-060104ff0404010004070100040501000404010004050100040601000404010004050101
-04ef0001040106010001040a060100010401060104ff0404010004070100040501000404
-01000405010004060100040401000405010104ef0001040106010001040a060100010401
-060104ff0404010304010103040201030404010004050100040301030404010004060100
-04ef0001040106010001040a060100010401060104ff0418010104040101040b01010405
-010104f00001040106010001040a060100010401060104ff04ff04280001040106010001
-040a0601000104010601040a0101046a010104ff04ae0001040106010001040a06010001
-0401060104090100046e010004ff04ad0001040106010001040a06010001040106010409
-0100040501000430010004040100040d0101040901020412010004ff04ad000104010601
-0001040a0601000104010601040901000405010004360100040c0100040d010004120100
-04ff04ad0001040106010001040a06010001040106010409010004030104040101000400
-0101040301020402010004000101040a010204020100040201000402010204020104040a
-0100040401020405010004030102040301020404010004ff04ad0001040106010001040a
-060100010401060104090100040501000403010104010100040101000402010004010101
-04010100040801000402010004010100040201000404010004040100040a010404010100
-0402010004040100040201000402010004010100040201000403010004ff04ad00010401
-06010001040a060100010401060104070101040601000403010004090100040101000402
-0100040801000402010004020100040001000405010004040100040c0100040701000404
-01000402010004050100040201000404010104ff04ab0001040106010001040a06010001
-040106010409010004050100040301000406010304010100040201000408010404030100
-0406010004040100040c0100040401030404010004030102040201040403010004ff04ad
-0001040106010001040a0601000104010601040901000405010004030100040501000402
-010004010100040201000408010004060100040001000405010004040100040c01000403
-0100040201000404010004060100040101000407010004ff04ad0001040106010001040a
-060100010401060104090100040501000403010004050100040201000401010104010100
-040801000402010004010100040201000404010004040100040501010404010004030100
-040201000404010004020100040201000401010004020100040301000405010104ff04a5
-0001040106010001040a0601000104010601040901000406010104010100040601030401
-010004000101040a01020402010004020100040401000405010104030101040401000404
-0103040401000403010204030102040401000405010104ff04a50001040106010001040a
-060100010401060104090100041801000404010504200100042701000406010004ff04a5
-0001040106010001040a0601000104010601040a01010416010004290101042601010405
-010104ff04a60001040106010001040a06010001040106010423010004ff04ff04030001
-040106010001040a0601000104010601040a010104be010104ff045a0001040106010001
-040a06010001040106010409010004c2010004ff04590001040106010001040a06010001
-0401060104090100042d0100041701000402010204410100041701000402010204120100
-04ff04590001040106010001040a060100010401060104090100042d0100041701000404
-01000441010004170100040401000412010004ff04590001040106010001040a06010001
-040106010409010004040102040201000400010104020100040001010403010204020100
-040001010409010004000101040301020402010004000101040301010400010004040100
-040301020402010004000101040a01020402010004000101040201000400010104030102
-040201000400010104090100040001010403010204020100040001010403010104000100
-040401000403010204020100040001010404010004ff04590001040106010001040a0601
-000104010601040901000403010004020100040101010401010004010101040101000401
-010004020100040101010401010004080101040101000401010004020100040101010401
-010004010100040101010404010004020100040201000401010104010100040801000402
-010004010101040101000401010104010100040101000402010004010101040101000408
-010104010100040101000402010004010101040101000401010004010101040401000402
-01000402010004010101040101000403010004ff04590001040106010001040a06010001
-040106010407010104040100040201000401010004050100040501000402010004010100
-040c01000402010004050100040101000402010004010100040201000404010004020100
-0402010004010100040c0100040201000401010004050100040501000402010004010100
-040c01000402010004050100040101000402010004010100040201000404010004020100
-04020100040101000408010104ff04570001040106010001040a06010001040106010409
-0100040301040401010004050100040501000402010004010100040c0100040201000402
-010304010100040201000401010004020100040401000402010404010100040c01040401
-010004050100040501000402010004010100040c01000402010004020103040101000402
-010004010100040201000404010004020104040101000407010004ff0459000104010601
-0001040a0601000104010601040901000403010004050100040501000405010004020100
-04010100040c010004020100040101000402010004010100040201000401010004020100
-040401000402010004050100040c01000405010004050100040501000402010004010100
-040c01000402010004010100040201000401010004020100040101000402010004040100
-04020100040501000407010004ff04590001040106010001040a06010001040106010409
-010004030100040201000401010004050100040501000402010004010100040c01000402
-010004010100040201000401010004020100040101000401010104040100040201000402
-010004010100040701010402010004020100040101000405010004050100040201000401
-0100040c0100040201000401010004020100040101000402010004010100040101010404
-0100040201000402010004010100040701000405010104ff04510001040106010001040a
-0601000104010601040901000404010204020100040501000406010204020100040c0100
-040201000402010304010100040201000402010104000100040401000403010204020100
-040701010403010204020100040501000406010204020100040c01000402010004020103
-040101000402010004020101040001000404010004030102040201000407010004050101
-04ff04510001040106010001040a06010001040106010409010004250105043501000424
-0105043401000406010004ff04510001040106010001040a0601000104010601040a0101
-045d0101045e01010405010104ff04520001040106010001040a060100010401060104ff
-04ff04280001040106010001040a0601000104010601040a0101046a010104ff04ae0001
-040106010001040a060100010401060104090100046e010004ff04ad0001040106010001
-040a060100010401060104090100041401000413010004040100043501020404010004ff
-04ad0001040106010001040a060100010401060104090100042f01000437010004040100
-04ff04ad0001040106010001040a06010001040106010409010004030100040001010402
-010004000101040301020403010204020100040001010403010204020104040101000402
-010004080100040001010403010204020100040001010402010104000100040301020405
-01000404010004ff04ad0001040106010001040a06010001040106010409010004030101
-040101000401010104010100040401000402010004020100040101010401010004040100
-040401000403010004020100040801010401010004010100040201000401010104010100
-0401010004000100040001000401010004020100040401000404010004ff04ad00010401
-06010001040a060100010401060104070101040401000402010004010100040801000402
-010004020100040101000408010004040100040401000401010004080100040201000401
-0100040201000401010004050100040001000400010004050100040401000405010104ff
-04ab0001040106010001040a060100010401060104090100040301000402010004010100
-040801000402010004020100040101000408010004040100040401000401010004080100
-040201000401010004020100040101000405010004000100040001000402010304040100
-0404010004ff04ad0001040106010001040a060100010401060104090100040301000402
-010004010100040801000402010004020100040101000408010004040100040501000400
-010004080100040201000401010004020100040101000405010004000100040001000401
-010004020100040401000404010004ff04ad0001040106010001040a0601000104010601
-040901000403010104010100040101000408010004020100040201000401010004080100
-040401000405010104040101040201000402010004010100040201000401010004050100
-0400010004000100040101000402010004040100040401000405010104ff04a500010401
-06010001040a060100010401060104090100040301000400010104020100040801000403
-010204020100040801000405010104040100040401010402010004020100040201020402
-01000405010004000100040001000402010304040100040401000405010104ff04a50001
-040106010001040a060100010401060104090100040301000432010004050100042e0100
-0406010004ff04a50001040106010001040a0601000104010601040a010104010100042f
-01000400010004040101042d01010405010104ff04a60001040106010001040a06010001
-04010601040e01000430010004ff04e60001040106010001040a0601000104010601040a
-0101049b010104ff047d0001040106010001040a06010001040106010409010004620100
-043101000408010004ff047c0001040106010001040a060100010401060104090100042e
-0102041401000419010004040101040b01000405010104040101040b0101040201000407
-010004ff047c0001040106010001040a0601000104010601040901000430010004140100
-041801000404010004010100040901010404010004010100040201000401010004090100
-04010100040201000406010004ff047c0001040106010001040a06010001040106010409
-010004040101040001000401010004000101040301020402010004020100040101000400
-0101040c010004030102040301020403010104000100040201020402010004000101040a
-010004050100040101000408010004000100040401000401010004020100040101000409
-010004010100040301000405010004ff047c0001040106010001040a0601000104010601
-040901000403010004010101040101010401010004010100040201000401010004020100
-0401010104010100040b0100040201000402010004010100040201000401010004010101
-04010100040201000401010104010100040801000406010004010100040a010004040100
-0401010004020100040101000409010004010100040401000404010004ff047c00010401
-06010001040a060100010401060104070101040401000402010004010100040501000402
-010004010100040201000401010004020100040b01000402010004020100040501000401
-010004020100040101000402010004010100040b01000407010004010100040a01000404
-01000401010004020100040101000409010004010100040501000404010104ff047a0001
-040106010001040a06010001040106010409010004030100040201000401010004050100
-0402010004010100040201000401010004020100040b0100040201040402010304010100
-040201000401010404010100040c01000406010004010100040a01000404010004010100
-04020100040101000409010004010100040401000404010004ff047c0001040106010001
-040a06010001040106010409010004030100040201000401010004050100040201000401
-0100040201000401010004020100040b0100040201000405010004020100040101000402
-01000401010004050100040d01000405010004010100040a010004040100040101000402
-0100040101000409010004010100040301000405010004ff047c0001040106010001040a
-060100010401060104090100040301000401010104010100040501000402010004010100
-040101010401010104010100040b01000402010004020100040101000402010004010100
-040101010401010004020100040101000407010104040100040401000401010004030101
-040401000404010004010100040201000401010004030101040301000401010004020100
-040601000405010104ff04740001040106010001040a0601000104010601040901000404
-010104000100040101000406010204030101040001000401010004000101040c01000403
-010204030103040201010400010004020102040201000407010104050100040401010404
-0101040201040403010104040101040401010404010104020100040701000405010104ff
-04740001040106010001040a060100010401060104090100040701000416010004040105
-042e01000406010004310100040801000406010004ff04740001040106010001040a0601
-000104010601040a010104010100040201000416010004370101044201010405010104ff
-04750001040106010001040a0601000104010601040f01020417010004ff04fc00010401
-06010001040a0601000104010601040a0101045c010104ff04bc0001040106010001040a
-0601000104010601040901000460010004ff04bb0001040106010001040a060100010401
-06010409010004030100042b01000418010204030102040301020404010004ff04bb0001
-040106010001040a06010001040106010409010004030100044401000402010004010100
-0402010004010100040201000403010004ff04bb0001040106010001040a060100010401
-060104090100040301000400010104030102040301020402010004000101040a01020403
-01020402010404020102040d010004050100040501000403010004ff04bb000104010601
-0001040a0601000104010601040901000403010104010100040101000402010004010100
-040201000401010104010100040801000402010004040100040601000401010004020100
-040c010004050100040501000403010004ff04bb0001040106010001040a060100010401
-060104070101040401000402010004010100040201000405010004010100040201000408
-010004080100040501000402010004020100040b010004040101040401010405010104ff
-04b90001040106010001040a060100010401060104090100040301000402010004010104
-04020103040101000402010004090102040501000404010004030104040a010004070100
-040501000403010004ff04bb0001040106010001040a0601000104010601040901000403
-0100040201000401010004050100040201000401010004020100040c0100040401000403
-010004040100040d010004080100040501000403010004ff04bb0001040106010001040a
-060100010401060104090100040301000402010004010100040201000401010004020100
-040101010401010004080100040201000404010004020100040501000402010004030101
-0402010004050100040201000401010004020100040301000405010104ff04b300010401
-06010001040a060100010401060104090100040301000402010004020102040301030401
-010004000101040a01020405010004020104040201020404010104020104040201020403
-0102040401000405010104ff04b30001040106010001040a060100010401060104090100
-041801000404010504200100041901000406010004ff04b30001040106010001040a0601
-000104010601040a01010416010004290101041801010405010104ff04b4000104010601
-0001040a06010001040106010423010004ff04ff04030001040106010001040a06010001
-04010601040a0101045c010104ff04bc0001040106010001040a06010001040106010409
-01000460010004ff04bb0001040106010001040a060100010401060104090100040c0100
-041101000416010004190100040401020404010004ff04bb0001040106010001040a0601
-00010401060104090100040c0100041101000430010104030100040201000403010004ff
-04bb0001040106010001040a060100010401060104090100040401020402010404020102
-040301020402010004010100040a01020403010204020104040201020409010004000100
-040701000403010004ff04bb0001040106010001040a0601000104010601040901000403
-01000402010004030100040301000402010004010100040201000401010004000100040a
-01000402010004040100040601000401010004020100040a0100040701000403010004ff
-04bb0001040106010001040a060100010401060104070101040401000407010004070100
-0401010004050101040b010004080100040501000402010004020100040a010004060100
-0405010104ff04b90001040106010001040a060100010401060104090100040401020404
-0100040401030401010004050101040c0102040501000404010004030104040a01000405
-01000405010004ff04bb0001040106010001040a06010001040106010409010004070100
-040301000403010004020100040101000405010004000100040e01000404010004030100
-04040100040e0100040401000406010004ff04bb0001040106010001040a060100010401
-060104090100040301000402010004030100040301000402010004010100040201000401
-010004010100040901000402010004040100040201000405010004020100040301010404
-010004030100040701000405010104ff04b30001040106010001040a0601000104010601
-040901000404010204050101040201030402010204020100040201000409010204050100
-0402010404020102040401010402010404010104040301000405010104ff04b300010401
-06010001040a0601000104010601040901000425010504200100041201000406010004ff
-04b30001040106010001040a0601000104010601040a0101044801010411010104050101
-04ff04b40001040106010001040a060100010401060104ff04ff04280001040106010001
-040a0601000104010601040a0101045c010104ff04bc0001040106010001040a06010001
-04010601040901000460010004ff04bb0001040106010001040a06010001040106010409
-0100041501000411010004060100041f0102040401010404010004ff04bb000104010601
-0001040a0601000104010601040901000415010004110100042601000402010004020100
-040101000403010004ff04bb0001040106010001040a0601000104010601040901000403
-010004000101040301020403010104000100040101000402010004020102040201040402
-010204030102040201000400010104030102040d010004020100040101000403010004ff
-04bb0001040106010001040a060100010401060104090100040301010401010004010100
-040201000401010004010101040101000402010004010100040201000403010004060100
-040201000402010004010101040101000401010004020100040c01000402010004010100
-0403010004ff04bb0001040106010001040a060100010401060104070101040401000405
-010004020100040101000402010004010100040201000401010004070100040601000402
-010004020100040101000402010004010100040e010104030100040101000404010104ff
-04b90001040106010001040a060100010401060104090100040301000405010404010100
-040201000401010004020100040101000407010004060100040201000402010004010100
-0402010004020102040d010004020100040101000403010004ff04bb0001040106010001
-040a06010001040106010409010004030100040501000405010004020100040101000402
-01000401010004070100040601000402010004020100040101000402010004050100040c
-010004020100040101000403010004ff04bb0001040106010001040a0601000104010601
-040901000403010004050100040201000401010004010101040101000401010104010100
-040201000403010004060100040201000402010004010100040201000401010004020100
-0403010104020100040201000402010004010100040301000405010104ff04b300010401
-06010001040a060100010401060104090100040301000406010204030101040001000402
-010104000100040201020405010104040100040301020402010004020100040201020404
-01010403010204040101040401000405010104ff04b30001040106010001040a06010001
-0401060104090100044c0100041201000406010004ff04b30001040106010001040a0601
-000104010601040a010104480101041101010405010104ff04b40001040106010001040a
-060100010401060104ff04ff04280001040106010001040a0601000104010601040a0101
-04890101049401010404010104f10001040106010001040a060100010401060104090100
-048a010004980100040501000403010304e80001040106010001040a0601000104010601
-040901000418010004300102040301020412010004060100041901000406010104090102
-040301020436010104030100041901020402010404010104040201020402010404030100
-040501000406010004e80001040106010001040a06010001040106010409010004180100
-0432010004050100041201000421010004050100040d0100040501000435010004050100
-041801000402010004010100040501000405010004020100040101000407010004050100
-0406010004e80001040106010001040a0601000104010601040901000404010104000100
-040201020402010004000101040201000400010104030102040301010400010004020102
-040a01020403010204050100040501000403010204030102040201040402010204030102
-0402010004000101040b0100040501000403010004020100040401000405010004030102
-040201000402010004020102040301020402010004000101040a01020404010004030104
-040201020402010004000101040901000405010004050100040901000401010004070100
-040501000406010004e80001040106010001040a06010001040106010409010004030100
-040101010401010004020100040101010401010004010101040101000401010004020100
-040101000401010104010100040201000408010004020100040101000402010004040100
-040501000402010004020100040101000402010004030100040601000402010004020100
-0401010104010100040a0100040301040401010004020100040401000405010004020100
-040201000401010004020100040101000402010004010100040201000401010104010100
-040801000402010004010104040301000403010004020100040101010401010004080100
-0405010304020103040601000401010304040100040501000406010004e8000104010601
-0001040a0601000104010601040701010404010004020100040501000401010004050100
-040201000405010004010100040201000401010004020100040801000405010004020100
-040401000405010004020100040201000401010004070100040601000402010004020100
-040101000402010004080101040601000403010004020100040401000405010004020100
-040501000400010004000100040101000402010004010100040201000401010004020100
-040c01000403010004050100040301000402010004010100040c01030406010004050100
-040301010406010004040101040401010404010004e80001040106010001040a06010001
-040106010409010004030100040201000402010304010100040501000402010004020103
-040101000402010004010104040801000405010004020100040401000405010004020104
-04010100040701000406010004020100040201000401010004020100040a010004050100
-040301000402010004040100040501000403010204020100040001000400010004010104
-0401010404010100040201000409010304030100040501000403010404010100040c0100
-040201000405010004050100040501000405010004030100040501000406010004e80001
-040106010001040a06010001040106010409010004030100040201000401010004020100
-0401010004050100040201000401010004020100040101000402010004010100040c0100
-040501000402010004040100040501000402010004050100040701000406010004020100
-040201000401010004020100040a01000405010004030100040201000404010004050100
-040601000401010004000100040001000401010004050100040501000402010004080100
-0402010004030100040501000403010004050100040c0100040201000401010004020100
-040101000402010004050100040101000402010004030100040501000406010004e80001
-040106010001040a06010001040106010409010004030100040101010401010004020100
-040101000405010104010100040101000402010004010100040101010401010004020100
-040801000402010004010100040201000404010004050100040201000402010004010100
-040201000403010004060100040201000402010004010100040201000403010104040100
-040501000403010004010101040401000405010004020100040201000401010004000100
-040001000401010004020100040101000402010004010101040101000408010004020100
-040301000405010004030100040201000401010004070101040201000402010004010100
-040201000401010004020100040101000402010004010100040201000403010004050100
-0406010004e80001040106010001040a0601000104010601040901000404010104000100
-0402010304010100040501000400010104030103040201010400010004020102040a0102
-040301020405010004050100040301020403010204050101040401000403010204020100
-040201000403010104040100040501000404010104000100040401000405010004030102
-040301000400010004030102040301020402010004000101040a01030403010004060101
-040201020402010004070101040301020403010204030102040301020403010204040100
-040501000406010004e80001040106010001040a06010001040106010409010004070100
-0421010004070105044a010004040100043b010004040105042701000427010004050100
-0403010304e80001040106010001040a0601000104010601040a01010401010004020100
-041d01000402010004560101040601010439010004300101042601010404010104f10001
-040106010001040a0601000104010601040f0102041f0102049c010004ff045400010401
-06010001040a060100010401060104ff04ff04280001040106010001040a060100010401
-060104ff04ff04280001040106010001040a060100010401060104ff04ff042800010401
-06010001040a060100010401060104ff04ff04280001040106010001040a060100010401
-060104ff04ff04280001040106010001040a060100010401060104ff04ff042800010401
-06010001040a060100010401060104ff04ff04280001040106010001040a060100010401
-060104ff04ff04280001040106010001040a060100010401060104ff04ff042800010401
-06010001040a060100010401060104ff04ff04280001040106010001040a060100010401
-060104ff04ff04280001040106010001040a060100010401060104ff04ff042800010401
-06010001040a060100010401060104ff04ff04280001040106010001040a060100010401
-060104ff04ff04280001040106010001040a060100010401060104ff04ff042800010401
-06010001040a060100010401060104ff04ff04280001040106010001040a060100010401
-060104ff04ff04280001040106010001040a060100010401060104ff04ff042800010401
-06010001040a060100010401060104ff04ff04280001040106010001060c000104010601
-04ff04ff04280001040106010000060d00010401060104ff04ff0428000104010601050e
-00010401060104ff04ff042800010401060100100401060104ff04ff0428000104010601
-0500000c060000010401060104ff04ff0428000104010601050000010408060105000001
-0401060104ff04ff04280001040106010501000104070601050000010401060104ff04ff
-04280001040106010501000104060601050100010401060104ff04ff0428000104010601
-0502000104050601050100010401060104ff04ff04280001040106010502000104040601
-050200010401060104ff04ff042800010401060105030001040306010502000104010601
-04ff04ff04280001040106010503000104020601050300010401060104ff04ff04280001
-040106010504000104010601050300010401060104ff04ff042800010401060105040001
-04000601050400010401060104ff04ff0428000104010601050500000602050400010401
-060104ff04ff0428000104010601050500000601050500010401060100ff00ff002a0401
-060105060601050500010401060000ff00ff002b04010601050606000506000104ff04ff
-04300601001004ff04ff04300600001104ff04ff04ff04ff04ff04ff04ff04ff04ff04ff
-04ff04ff04ff0498010204ff04ff044001000401010004ff04ff043f0100040201000402
-010204020100040001010403010204ff04ff042a01000402010004010100040201000401
-010104010100040101000402010004ff04ff042901000402010004010100040201000401
-010004020100040101000402010004ff04ff042901000402010004010100040201000401
-0100040201000401010404ff04ff04290100040201000401010004020100040101000402
-01000401010004ff04ff042d010004010100040201000402010004010100040201000401
-01000402010004ff04ff042901020404010204020100040201000402010204ff04ff04ff
-04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04c1
-%%EndData
-end
-%%PageTrailer
-%%Trailer
-%%BoundingBox: 0 73 377 347
-%%EOF
diff --git a/lib/appmon/doc/src/ref_man.xml b/lib/appmon/doc/src/ref_man.xml
deleted file mode 100644
index b54df2ee9b..0000000000
--- a/lib/appmon/doc/src/ref_man.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE application SYSTEM "application.dtd">
-
-<application xmlns:xi="http://www.w3.org/2001/XInclude">
- <header>
- <copyright>
- <year>1996</year><year>2013</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>Appmon Reference Manual</title>
- <prepared></prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- </header>
- <description>
- <p>The Application Monitor, <em>Appmon</em>, is a graphical utility used
- to supervise applications executing either locally or on remote nodes.
- The process tree of an application can furthermore be monitored.</p>
- </description>
- <xi:include href="appmon.xml"/>
-</application>
-
diff --git a/lib/appmon/doc/src/warning.gif b/lib/appmon/doc/src/warning.gif
deleted file mode 100644
index 96af52360e..0000000000
--- a/lib/appmon/doc/src/warning.gif
+++ /dev/null
Binary files differ
diff --git a/lib/appmon/ebin/.gitignore b/lib/appmon/ebin/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/appmon/ebin/.gitignore
+++ /dev/null
diff --git a/lib/appmon/info b/lib/appmon/info
deleted file mode 100644
index c33a50d106..0000000000
--- a/lib/appmon/info
+++ /dev/null
@@ -1,5 +0,0 @@
-group: tools
-short: A utility used to supervise Applications executing on several
-short: Erlang nodes
-
-
diff --git a/lib/appmon/priv/Makefile b/lib/appmon/priv/Makefile
deleted file mode 100644
index 356fe9b842..0000000000
--- a/lib/appmon/priv/Makefile
+++ /dev/null
@@ -1,65 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1996-2012. 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 = $(APPMON_VSN)
-
-# ----------------------------------------------------
-# Release directory specification
-# ----------------------------------------------------
-RELSYSDIR = $(RELEASE_PATH)/lib/appmon-$(VSN)
-
-#
-# Macros
-#
-HELP_FILES = \
- appmon_help.txt
-
-TOOLBAR_FILES = \
- appmon.tool \
- appmon.gif \
- start_info.html \
- main_frame.html \
- info_frames.html \
- blank.html
-
-#
-# Rules
-#
-
-debug opt:
-
-docs:
-
-clean:
-
-
-# ----------------------------------------------------
-# Release Target
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_release_targets.mk
-
-release_spec: opt
- $(INSTALL_DIR) "$(RELSYSDIR)/priv"
- $(INSTALL_DATA) $(HELP_FILES) $(TOOLBAR_FILES) "$(RELSYSDIR)/priv"
-
-release_docs_spec:
-
-FORCE:
diff --git a/lib/appmon/priv/appmon.gif b/lib/appmon/priv/appmon.gif
deleted file mode 100644
index 583fcb8311..0000000000
--- a/lib/appmon/priv/appmon.gif
+++ /dev/null
Binary files differ
diff --git a/lib/appmon/priv/appmon.tool b/lib/appmon/priv/appmon.tool
deleted file mode 100644
index 93a469c6a4..0000000000
--- a/lib/appmon/priv/appmon.tool
+++ /dev/null
@@ -1,24 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-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,"1.2"}.
-[{config_func,{appmon_web,configData,[]}},
-{tool,"Appmon"},
- {start,{appmon,start,[]}},
- {icon,"appmon.gif"},
- {message,"Application Monitor"},
- {html,"../doc/html/index.html"}].
diff --git a/lib/appmon/priv/appmon_help.txt b/lib/appmon/priv/appmon_help.txt
deleted file mode 100644
index f1685be4d8..0000000000
--- a/lib/appmon/priv/appmon_help.txt
+++ /dev/null
@@ -1,154 +0,0 @@
-
-
-
- Help for the application monitor system
- ---------------------------------------
-
-
-
-
-
- The monitor system has two types of windows, the node window
- which opens when appmon:start() is evaluated, and the
- application window which opens when an application in the node
- window is clicked on.
-
- All nodes that are known to appmon is shown in the node
- window, normally this is all Erlang nodes visible with the
- nodes() command.
-
-
-The Node window
----------------
-
- The node window monitors nodes. At the top there is a menubar
- and below that, each known node is shown separated with a thin
- line from the others. A node is represented by its name as
- root of its application tree. The node name pictures the
- application controller on that node. The name itself is a menu
- where operations on the node can be performed (rebooting it
- for instance). To the far left is a load meter (like those on
- a tape deck) which measures the current load at the
- node. Below the node name (the application controller) is a
- tree with applications, clicking on these applications starts
- the application monitor.
-
-
- The top window menubar
- ----------------------
-
- File:Quit - Stop the monitor.
-
- Options:
- Load: time - Load is calculated (roughly) as processor time.
- Load: queue - Load is calculated as the length of the ready
- queue.
- Load: prog - A progressive scale is used for load values.
- Load: linear - A linear scale is used for load values.
-
- Help - Prints this message.
-
-
- The application controller menu
- -------------------------------
- Reboot - Reboot the node
- Restart - Restart the node
- Stop - Stop the node
-
-
- The load meter
- --------------
-
- Load can be measured as processor time / elapsed time or as
- the length of the runtime queue, depending on the setting in
- the Options menu.
-
-
-The Application window
-----------------------
-
- The application window monitors an application. It will
- automaticly update the window every other second or so if
- there are any changes in the process tree. At the top there is
- a menubar followed by a toolbar and then the application
- tree. Application trees come in two flavours: supervision
- view, where a strict supervision tree is shown, and process
- view, where all linked processes in the application is shown.
-
-
- The application window menubar
- ------------------------------
-
- File:Quit - Quit the application window.
-
- Options:Refresh - Update process information and refresh
- screen.
-
- Options:Sup. view
- - Show strict supervision tree only.
-
- Options:Proc. view
- - Show all linked processes.
-
- Help - Prints this message.
-
-
- The application window toolbar
- ------------------------------
-
- The application toolbar controls the actions of the mouse
- pointer. Clicking on a process in the application window have
- different meaning depending on which tool is selected. The
- procedure is to first press a button (T for trace for example)
- and then click on the process that should be traced.
-
- Info - Process information is printed in the shell. This mode
- is default and automaticly returned to after a mouse click.
-
- Send - Send a message to the clicked process. A window will
- pop up where the message can be written (and you can also
- change the destination pid). Double clicking on this button
- pops up a window where pid and message can be filled in.
-
- Trace - Toggle trace on/off on the process. Note that not all
- processes respond to the sys:trace call.
-
- Kill - Send a non-trappable exit signal to the process.
-
-
-Technical Detail
-----------------
-
- Files and distribution
- ----------------------
-
- Appmon is a distributed program but all graphics is handled on
- one node (the one it is started on) so GS need only to be
- loaded on that single node. All real monitoring is done in a
- single module (appmon_info) being run on each node which acts
- as an information centre. The various windows (node and
- application) then subscribe for information.
-
- In summary: only the appmon_info module must be accessible by
- the clients, the rest of the appmon files are only needed at
- the server.
-
- Trouble shooting
- ----------------
-
- Q. Why doesn't all my nodes show up in the node window?
-
- A 1. Are the nodes visible with the nodes() command in the
- shell? If not you must do net:ping(NodeName) to add nodes to
- the Erlang distribution.
-
- A 2. Is the appmin_info module loadable at the missing
- node(s)?
-
- Q. Why doesn't the application window show my application
- supervision structure?
-
- A. Does your application have a real application master? It is
- absolutely necessary that your top process behaves as a
- supervisor should (a program is not supervised just because it
- is started with application:start).
diff --git a/lib/appmon/priv/blank.html b/lib/appmon/priv/blank.html
deleted file mode 100644
index 44e86908a0..0000000000
--- a/lib/appmon/priv/blank.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<HTML>
-<HEAD></HEAD>
-<BODY BGCOLOR="#FFFFFF">
-&nbsp;
-</BODY>
-</HTML> \ No newline at end of file
diff --git a/lib/appmon/priv/info_frames.html b/lib/appmon/priv/info_frames.html
deleted file mode 100644
index 9320364883..0000000000
--- a/lib/appmon/priv/info_frames.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>WebAppmon </TITLE>
-</HEAD>
-<FRAMESET ROWS="85%,15%" BORDER="0">
-<FRAME NAME="main" SRC="./start_info.html">
-<FRAME NAME="proc_data" SRC="./blank.html">
-</FRAMESET>
-</HTML> \ No newline at end of file
diff --git a/lib/appmon/priv/main_frame.html b/lib/appmon/priv/main_frame.html
deleted file mode 100644
index 57e540a2c1..0000000000
--- a/lib/appmon/priv/main_frame.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>WebAppmon </TITLE>
-</HEAD>
-<FRAMESET COLS="15%,85%" >
- <FRAME NAME="left" SRC="../../erl/appmon_web/node_info">
- <FRAME NAME="base_frames" SRC="./info_frames.html">
-</FRAMESET>
-</HTML> \ No newline at end of file
diff --git a/lib/appmon/priv/start_info.html b/lib/appmon/priv/start_info.html
deleted file mode 100644
index 580319beb1..0000000000
--- a/lib/appmon/priv/start_info.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<HTML>
-<HEAD>
-</HEAD>
-<BODY BGCOLOR="#FFFFFF">
-<TABLE WIDTH=100% HEIGHT=100%>
-<TR VALIGN="middle">
-<TD ALIGN="center">
-
-<TABLE WIDTH="60%">
-<TR>
-<TD ALIGN="center">
-<FONT SIZE=6>Welcome to the Web based User Interface to Appmon
-</FONT></TD>
-</TR>
-
-<TR>
-<TD><BR><BR><BR><BR>
-</TD>
-</TR>
-
-<TR>
-<TD ALIGN="center">&nbsp;
-</TD>
-</TR>
-</TABLE>
-
-</TD>
-</TR>
-</TABLE>
-</BODY>
-</HTML> \ No newline at end of file
diff --git a/lib/appmon/src/Makefile b/lib/appmon/src/Makefile
deleted file mode 100644
index c1620bc37a..0000000000
--- a/lib/appmon/src/Makefile
+++ /dev/null
@@ -1,103 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1996-2013. 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=$(APPMON_VSN)
-
-# ----------------------------------------------------
-# Release directory specification
-# ----------------------------------------------------
-RELSYSDIR = $(RELEASE_PATH)/lib/appmon-$(VSN)
-
-# ----------------------------------------------------
-# Target Specs
-# ----------------------------------------------------
-
-MODULES= \
- appmon \
- appmon_a \
- appmon_dg \
- appmon_place \
- appmon_txt \
- appmon_lb \
- process_info \
- appmon_web
-
-# appmon_info \ Moved to runtime tools where it belongs
-
-
-HRL_FILES= appmon_dg.hrl
-
-ERL_FILES= $(MODULES:%=%.erl)
-
-TARGET_FILES= $(MODULES:%=../ebin/%.$(EMULATOR)) $(APP_TARGET) $(APPUP_TARGET)
-
-APP_FILE= appmon.app
-APPUP_FILE= appmon.appup
-
-APP_SRC= $(APP_FILE).src
-APPUP_SRC= $(APPUP_FILE).src
-
-APP_TARGET= ../ebin/$(APP_FILE)
-APPUP_TARGET= ../ebin/$(APPUP_FILE)
-
-# ----------------------------------------------------
-# FLAGS
-# ----------------------------------------------------
-ERL_COMPILE_FLAGS += +warn_obsolete_guard
-
-# ----------------------------------------------------
-# Targets
-# ----------------------------------------------------
-
-debug opt: $(TARGET_FILES)
-
-clean:
- rm -f $(TARGET_FILES)
- rm -f core
-
-docs:
-
-# ----------------------------------------------------
-# Special Build Targets
-# ----------------------------------------------------
-
-$(APP_TARGET): $(APP_SRC) ../vsn.mk
- $(vsn_verbose)sed -e 's;%VSN%;$(VSN);' $< > $@
-
-$(APPUP_TARGET): $(APPUP_SRC) ../vsn.mk
- $(vsn_verbose)sed -e 's;%VSN%;$(VSN);' $< > $@
-
-# ----------------------------------------------------
-# Release Target
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_release_targets.mk
-
-release_spec: opt
- $(INSTALL_DIR) "$(RELSYSDIR)/src"
- $(INSTALL_DATA) $(ERL_FILES) $(HRL_FILES) "$(RELSYSDIR)/src"
- $(INSTALL_DIR) "$(RELSYSDIR)/ebin"
- $(INSTALL_DATA) $(TARGET_FILES) "$(RELSYSDIR)/ebin"
-
-release_docs_spec:
-
diff --git a/lib/appmon/src/appmon.app.src b/lib/appmon/src/appmon.app.src
deleted file mode 100644
index aa6a08772e..0000000000
--- a/lib/appmon/src/appmon.app.src
+++ /dev/null
@@ -1,24 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. 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, appmon,
- [{description, "DEVTOOLS CXC 138 16"},
- {vsn, "%VSN%"},
- {modules, [appmon, appmon_a, appmon_dg, %% appmon_info, moved to runtime tools
- appmon_lb, appmon_place, appmon_txt,process_info,appmon_web]},
- {registered,[appmon, appmon_info, appmon_txt,webappmon_server,proc_info]},
- {applications, [kernel, stdlib]}]}.
diff --git a/lib/appmon/src/appmon.appup.src b/lib/appmon/src/appmon.appup.src
deleted file mode 100644
index 0d918b6081..0000000000
--- a/lib/appmon/src/appmon.appup.src
+++ /dev/null
@@ -1,18 +0,0 @@
-%%
-%% %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/appmon/src/appmon.erl b/lib/appmon/src/appmon.erl
deleted file mode 100644
index ba98a24400..0000000000
--- a/lib/appmon/src/appmon.erl
+++ /dev/null
@@ -1,1081 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2012. 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(appmon).
--behaviour(gen_server).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,create,3}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,start,1}}]).
-
-%%%---------------------------------------------------------------------
-%%% Appmon main module.
-%%% Creates the main window and receives load and application
-%%% information from all connected nodes.
-%%%---------------------------------------------------------------------
-
-%% External exports
--export([start/0, stop/0]).
-
-%% gen_server callbacks
--export([init/1, handle_cast/2, handle_info/2, terminate/2]).
--export([handle_call/3, code_change/3]). % not used
-
-%% Canvas button data
--record(canvasbutton, {text, ul, ll, rect, x, y, w, h}).
-
-%% Options - all the fields are GS radio buttons
--record(options, {single, many, time, queue, prog, linear}).
-
-%% Main window data
--record(win, {name, % atom() Monitored node
- window, % gsobj()
- wwindow, % int() Window width
- hwindow, % int() Window height
- options, % #options{}
- canvas, % gsobj()
- wcanvas, % int() Canvas width
- hcanvas, % int() Canvas height
- l1, l2, % gsobj() Canvas lines
- leds, % [gsobj()] Load meter
- nodelabel, % {gsobj(),gsobj()}
- appobjs=[], % [gsobj()] Buttons etc.
- nodemenu}). % gsobj() Node menu
-
-%% Node data
--record(mnode, {name, % atom() Node name
- status, % alive | dead
- pid, % pid()
- apps, % [{Pid,App,Descr}]
- load}). % {Old, New}
-
-%% Internal state data
--record(state, {gs, % pid()
- wins=[], % [#win()] GUIs
- window_mode, % single | many
- load_mode1, % time | queue
- load_mode2, % prog | linear
- lbpid, % pid()
- mnodes=[]}). % [#mnode{}]
-
-%%%---------------------------------------------------------------------
-%%% External exports
-%%%---------------------------------------------------------------------
-
-start() ->
- gen_server:start({local, appmon}, ?MODULE, [], []).
-
-stop() ->
- gen_server:cast(appmon, stop).
-
-
-%%%---------------------------------------------------------------------
-%%% gen_server callbacks
-%%%---------------------------------------------------------------------
-
-%%----------------------------------------------------------------------
-%% Func: init/1
-%% Returns: {ok, State} |
-%% {ok, State, Timeout} |
-%% ignore |
-%% {stop, Reason}
-%%----------------------------------------------------------------------
-init([]) ->
- process_flag(trap_exit, true),
-
- %% Subscribe to {nodeup,Node} and {nodedown,Node} messages
- net_kernel:monitor_nodes(true),
-
- LbPid = appmon_lb:start(self ()),
-
- %% Check which remote nodes have appmon code available (OTP-4887)
- NodesOk = lists:filter(fun(Node) -> check_node(Node) end, nodes()),
- Nodes = [node()|NodesOk],
-
- %% Start monitoring the existing nodes
- MNodes = mk_mnodes(Nodes, LbPid),
-
- %% Draw the main window
- GS = gs:start([{kernel,true}]),
- GUI = draw_win(GS, node()),
-
- %% Update the Nodes menu with all known nodes
- lists:foreach(fun(Node) ->
- display_addnode(GUI, Node)
- end,
- Nodes),
-
- %% Mark the default options as selected in the Options menu
- display_setopt(GUI, single),
- display_setopt(GUI, time),
- display_setopt(GUI, prog),
-
- {ok, #state{gs=GS, wins=[GUI],
- window_mode=single, load_mode1=time, load_mode2=prog,
- lbpid=LbPid, mnodes=MNodes}}.
-
-check_node(Node) ->
- case rpc:call(Node, code, which, [appmon]) of
- File when is_list(File) ->
- true;
- _ -> % non_existing (| cover_compiled)
- false
- end.
-
-%%----------------------------------------------------------------------
-%% Func: handle_call/3
-%% Returns: {reply, Reply, State} |
-%% {reply, Reply, State, Timeout} |
-%% {noreply, State} |
-%% {noreply, State, Timeout} |
-%% {stop, Reason, Reply, State} | (terminate/2 is called)
-%% {stop, Reason, State} (terminate/2 is called)
-%%----------------------------------------------------------------------
-handle_call(norequest, _From, State) ->
- {reply, null, State}.
-
-%%----------------------------------------------------------------------
-%% Func: handle_cast/2
-%% Returns: {noreply, State} |
-%% {noreply, State, Timeout} |
-%% {stop, Reason, State} (terminate/2 is called)
-%%----------------------------------------------------------------------
-handle_cast(stop, State) ->
- {stop, normal, State}.
-
-%%----------------------------------------------------------------------
-%% Func: handle_info/2
-%% Returns: {noreply, State} |
-%% {noreply, State, Timeout} |
-%% {stop, Reason, State} (terminate/2 is called)
-%%----------------------------------------------------------------------
-%% Load information from a node
-handle_info({delivery, _Serv, load, Node, Load}, State) ->
-
- %% Update node information
- MNode = get_mnode(Node, State#state.mnodes),
- MNode1 = MNode#mnode{load=Load},
- MNodes = replace_mnode(Node, MNode1, State#state.mnodes),
-
- %% If Node is currently displayed, update graphics
- case get_win(Node, State#state.wins) of
- {ok, GUI} ->
- display_load(GUI, Load);
- false ->
- ignore
- end,
-
- {noreply, State#state{mnodes=MNodes}};
-
-%% Application information from a node
-handle_info({delivery, _Serv, app_ctrl, Node, Apps}, State) ->
-
- %% Update node information
- MNode = get_mnode(Node, State#state.mnodes),
- MNode1 = MNode#mnode{apps=Apps},
- MNodes = replace_mnode(Node, MNode1, State#state.mnodes),
-
- %% If Node is currently displayed, update graphics
- Wins = case get_win(Node, State#state.wins) of
- {ok, GUI} ->
- draw_clear(GUI),
- GUI1 = draw_apps(GUI, Apps),
- replace_win(Node, GUI1, State#state.wins);
- false ->
- State#state.wins
- end,
-
- appmon_lb:add_apps (State#state.lbpid, Apps, Node),
- {noreply, State#state{wins=Wins, mnodes=MNodes}};
-
-handle_info({nodeup, Node}, State) ->
-
- %% First, make sure appmon code is available at remode node,
- %% or the node should be ignored (OTP-3591)
- case check_node(Node) of
- true ->
-
- %% If this is a previously unknown node, update window's
- %% 'Nodes' menu
- case get_mnode(Node, State#state.mnodes) of
- false ->
- display_addnode(State#state.wins, Node);
- _OldMnode ->
- ignore
- end,
-
- %% Update node information (=> state is automatically
- %% changed to 'alive')
- MNode = mk_mnode(Node, State#state.lbpid),
- MNodes = replace_mnode(Node, MNode, State#state.mnodes),
-
- %% If Node is currently displayed, update graphics
- case get_win(Node, State#state.wins) of
- {ok, GUI} ->
- display_nodeup(GUI, Node);
- false ->
- ignore
- end,
-
- appmon_lb:update_status(State#state.lbpid, Node, alive),
- {noreply, State#state{mnodes=MNodes}};
-
- false ->
- {noreply, State}
- end;
-
-handle_info({nodedown, Node}, State) ->
-
- %% If this is a previously unknown node, ignore the message.
- %% (The situation occurs when failing to connect to another node).
- %% Otherwise, update the node information.
- case get_mnode(Node, State#state.mnodes) of
- false ->
- {noreply, State};
- MNode ->
- MNode1 = MNode#mnode{status=dead},
- MNodes = replace_mnode(Node, MNode1, State#state.mnodes),
-
- %% If Node is currently displayed, update graphics
- Wins = case get_win(Node, State#state.wins) of
- {ok, GUI} ->
- display_nodedown(GUI),
- GUI1 = draw_clear(GUI),
- replace_win(Node, GUI1, State#state.wins);
- false ->
- State#state.wins
- end,
-
- appmon_lb:remove_node(State#state.lbpid, Node),
- {noreply, State#state{wins=Wins, mnodes=MNodes}}
- end;
-
-%% Application 'button' events
-handle_info({gs, _Obj, buttonpress, Data, _Arg}, State) ->
- {canvasbutton, CBtn, _App} = Data,
- press(CBtn),
- {noreply, State};
-handle_info({gs, _Obj, buttonrelease, Data, [_,X,Y|_]}, State) ->
- {canvasbutton, CBtn, {application, App, Node}} = Data,
- release(CBtn),
-
- %% Check that mouse button was released over the button!
- L = CBtn#canvasbutton.x, R = L + CBtn#canvasbutton.w,
- T = CBtn#canvasbutton.y, B = T + CBtn#canvasbutton.h,
- if
- X>L, X<R, Y>T, Y<B ->
- MNode = get_mnode(Node, State#state.mnodes),
- {value, {Pid, _App, _Descr}} =
- lists:keysearch(App, 2, MNode#mnode.apps),
- appmon_a:start(Node, App, Pid);
- true ->
- ignore
- end,
- {noreply, State};
-
-handle_info({gs, _Button, click, Data, _Arg}, State) ->
- ThisNode = node(),
- case Data of
-
- %% File menu item
- listbox ->
- appmon_lb:open_win(State#state.lbpid,
- parse_nodes(State#state.mnodes)),
- {noreply, State};
- {close, WinObj} ->
- {ok, GUI} = get_win2(WinObj, State#state.wins),
- gs:destroy(WinObj),
-
- %% Terminate if this was the only open window
- case remove_win(GUI#win.name, State#state.wins) of
- [] ->
- {stop, normal, State};
- Wins ->
- {noreply, State#state{wins=Wins}}
- end;
- exit ->
- {stop, normal, State};
-
- %% Actions menu item
- {action, Action, WinObj} ->
- {ok, GUI} = get_win2(WinObj, State#state.wins),
- Node = GUI#win.name,
-
- if
- Node==ThisNode ->
- case Action of
- ping ->
- %% Ignore - makes no sense to ping yourself
- ignore;
- _ -> % reboot | restart | stop
- apply(init, Action, [])
- end;
-
- Node/=ThisNode ->
- case Action of
- ping ->
- net_adm:ping(Node);
- _ -> % reboot | restart | stop
- rpc:cast(Node, init, Action, [])
- end
- end,
- {noreply, State};
-
- %% Options menu item
- {window_mode, Mode} ->
-
- %% Update windows so they all show the same options
- lists:foreach(fun(GUI) ->
- display_setopt(GUI, Mode)
- end,
- State#state.wins),
- {noreply, State#state{window_mode=Mode}};
-
- {option, Tag, Option} ->
-
- %% Update windows so they all show the same options
- lists:foreach(fun(GUI) ->
- display_setopt(GUI, Tag)
- end,
- State#state.wins),
-
- %% Update all appmon_info processes about which kind of
- %% load data is desired
- lists:foreach(fun(MNode) ->
- appmon_info:load(MNode#mnode.pid,
- MNode#mnode.name,
- true,
- Option)
- end,
- State#state.mnodes),
-
- if
- Tag==time; Tag==queue ->
- {noreply, State#state{load_mode1=Tag}};
- Tag==prog; Tag==linear ->
- {noreply, State#state{load_mode2=Tag}}
- end;
-
- %% Nodes menu item
- {node, Node, WinObj} ->
-
- %% Check first if this window is already displayed
- case get_win(Node, State#state.wins) of
- {ok, GUI} ->
-
- %% Node is already displayed, raise its window
- gs:config(GUI#win.window, raise),
-
- {noreply, State};
-
- %% Node is not displayed
- false ->
-
- %% Redraw existing window or create a new window
- %% depending on window mode
- case State#state.window_mode of
-
- single ->
- {ok, GUI} =
- get_win2(WinObj, State#state.wins),
-
- %% Clear window and correct the node name
- draw_clear(GUI),
- GUI1 = draw_nodename(GUI, Node),
-
- %% Update window with the correct node name
- %% and the applications running at the node
- MNode = get_mnode(Node, State#state.mnodes),
- GUI2 = case MNode#mnode.status of
- dead ->
- display_nodedown(GUI1),
- GUI1;
- alive ->
- display_nodeup(GUI1, Node),
- draw_apps(GUI1,
- MNode#mnode.apps)
- end,
- Wins = replace_win(GUI#win.name, GUI2,
- State#state.wins),
-
- {noreply, State#state{wins=Wins}};
-
- many ->
- GUI = draw_win(State#state.gs, Node),
-
- %% Update Nodes menu with all known nodes -
- %% use MNodes to get them in the right order
- lists:foreach(fun(MNode) ->
- Name =
- MNode#mnode.name,
- display_addnode(GUI,
- Name)
- end,
- State#state.mnodes),
-
- %% Mark selected options in the Options menu
- display_setopt(GUI, many),
- display_setopt(GUI, State#state.load_mode1),
- display_setopt(GUI, State#state.load_mode2),
-
- %% Add the applications running at the node
- MNode = get_mnode(Node, State#state.mnodes),
-
- GUI1 = case MNode#mnode.status of
- dead ->
- display_nodedown(GUI),
- GUI;
- alive ->
- display_nodeup(GUI, Node),
- draw_apps(GUI,
- MNode#mnode.apps)
- end,
- Wins = [GUI1|State#state.wins],
-
- {noreply, State#state{wins=Wins}}
- end
- end;
-
- %% Help menu = Help button
- help ->
- HelpFile = filename:join([code:lib_dir(appmon),
- "doc", "html", "part_frame.html"]),
- case State#state.wins of
- [Win] ->
- tool_utils:open_help(Win#win.window, HelpFile);
- _ ->
- tool_utils:open_help(State#state.gs, HelpFile)
- end,
- {noreply, State};
-
- _Other ->
- {noreply, State}
- end;
-handle_info({gs, WinObj, configure, _, [WWindow, HWindow|_]}, State) ->
- {ok, GUI} = get_win2(WinObj, State#state.wins),
- GUI1 = draw_resize(GUI, WWindow, HWindow),
- display_scrollbar(GUI1),
- Wins = replace_win(GUI#win.name, GUI1, State#state.wins),
- {noreply, State#state{wins=Wins}};
-handle_info({gs, WinObj, destroy, _, _}, State) -> % OTP-1179
- {ok, GUI} = get_win2(WinObj, State#state.wins),
-
- %% Terminate if this was the only open window
- case remove_win(GUI#win.name, State#state.wins) of
- [] ->
- {stop, normal, State};
- Wins ->
- {noreply, State#state{wins=Wins}}
- end;
-
-handle_info(stop, State) ->
- {stop, normal, State};
-handle_info({'EXIT', Pid, Reason}, State) ->
- case Reason of
- shutdown ->
- %% Appmon is being asked to shut down, eg during reboot
- {stop, Reason, State};
- _ ->
- case State#state.gs of
-
- %% GS exited, kill appmon
- {0, Pid} ->
- {stop, normal, State};
-
- _ ->
- {noreply, State}
- end
- end;
-handle_info(_Info, State) ->
- {noreply, State}.
-
-%%----------------------------------------------------------------------
-%% Func: terminate/2
-%% Purpose: Shutdown the server
-%% Returns: any (ignored by gen_server)
-%%----------------------------------------------------------------------
-terminate(_Reason, State) ->
- bcast(State#state.mnodes, {kill}),
- appmon_lb:stop(State#state.lbpid),
- ok.
-
-%%----------------------------------------------------------------------
-%% Func: code_change/3
-%% Purpose: Convert process state when code is changed
-%% Returns: {ok, NewState}
-%%----------------------------------------------------------------------
-code_change(_OldVsn, State, _Extra) ->
- {ok, State}.
-
-
-%%%---------------------------------------------------------------------
-%%% Internal functions
-%%%---------------------------------------------------------------------
-
-%%----------------------------------------------------------------------
-%% MNode manipulating functions
-%%----------------------------------------------------------------------
-
-%% mk_mnodes(Nodes, LbPid) -> MNodes
-%% Nodes -> [atom()]
-%% LbPid -> pid()
-%% MNodes -> [#mnode{}]
-mk_mnodes([Node|Nodes], LbPid) ->
- [mk_mnode(Node, LbPid) | mk_mnodes(Nodes, LbPid)];
-mk_mnodes([], _LbPid) ->
- [].
-
-mk_mnode(Node, LbPid) ->
-
- %% Create an appmon process at the node
- {ok, Pid} = appmon_info:start_link(Node, self(), []),
-
- appmon_lb:add_node(LbPid, Node),
- appmon_info:load(Pid, Node, true, [{timeout,1000}]),
- appmon_info:app_ctrl(Pid, Node, true, []),
-
- #mnode{name=Node, status=alive, pid=Pid}.
-
-%% get_mnode(Node, MNodes) -> MNode | false
-%% Node -> atom()
-%% MNodes -> [#mnode{}]
-%% MNode -> #mnode{}
-get_mnode(Node, MNodes) ->
- case lists:keysearch(Node, #mnode.name, MNodes) of
- {value, MNode} ->
- MNode;
- false ->
- false
- end.
-
-%% replace_mnode(Node, MNode, MNodes1) -> Mnodes2
-%% Node -> atom()
-%% MNode -> #mnode{}
-%% MNodes1 -> MNodes2 -> [#mnode{}]
-%% Replaces, or adds if previously not included, the mnode with name
-%% Node in MNodes1 with MNode.
-replace_mnode(Node, MNode, [#mnode{name=Node} | MNodes]) ->
- [MNode | MNodes];
-replace_mnode(Node, MNode, [MNode2 | MNodes]) ->
- [MNode2 | replace_mnode(Node, MNode, MNodes)];
-replace_mnode(_Node, MNode, []) ->
- [MNode].
-
-
-%%----------------------------------------------------------------------
-%% GUI list manipulating functions
-%%----------------------------------------------------------------------
-
-%% get_win(Node, Wins) -> Win
-%% Node -> atom()
-%% Wins -> [#win{}]
-%% Win -> #win{}
-get_win(Node, Wins) ->
- case lists:keysearch(Node, #win.name, Wins) of
- {value, Win} ->
- {ok, Win};
- false ->
- false
- end.
-
-%% get_win2(WinObj, Wins) -> Win
-%% Window -> gsobj()
-%% Wins -> [#win{}]
-%% Win -> #win{}
-get_win2(WinObj, Wins) ->
- case lists:keysearch(WinObj, #win.window, Wins) of
- {value, Win} ->
- {ok, Win};
- false ->
- false
- end.
-
-%% replace_win(Node, Win, Wins) -> Wins2
-%% Node -> atom()
-%% Win -> #win{}
-%% Wins -> Wins2 -> [#win{}]
-replace_win(Node, Win, Wins) ->
- lists:keyreplace(Node, #win.name, Wins, Win).
-
-%% remove_win(Node, Wins) -> Wins2
-%% Node -> atom()
-%% Wins -> Wins2 -> [#win{}]
-remove_win(Node, Wins) ->
- lists:keydelete(Node, #win.name, Wins).
-
-
-
-
-%%----------------------------------------------------------------------
-%% GUI manipulating functions
-%%----------------------------------------------------------------------
--define(PAD, 10). % Pad between objects
--define(PAD2, 4*?PAD). % Pad betw. node lbl and app
-
--define(hMENUBAR, 25). % Note: Hardwired in Tcl/Tk
-
--define(xNODELBL, 60). % Node label
--define(yNODELBL, 35).
--define(hNODELBL, 20).
-
--define(xMETER, 5). % Meter
--define(yMETER, ?yNODELBL).
--define(wMETER, 20).
--define(hMETER, ?hNODELBL + ?PAD + ?PAD2 + ?hBTN).
--define(LEDCOUNT, 16).
-
--define(xBTN, ?xNODELBL). % Application buttons
--define(yBTN, ?yNODELBL + ?hNODELBL + ?PAD + ?PAD2).
--define(wBTN, 70). % min width
--define(hBTN, 20).
-
--define(wCANVAS, 470 + ?wMETER + 3*?PAD). % Canvas
--define(hCANVAS, ?yNODELBL + ?hNODELBL + ?PAD + ?PAD2 + ?hBTN + 2*?PAD).
-
--define(wWIN, ?wCANVAS). % Window
--define(hWIN, ?hMENUBAR + ?hCANVAS).
-
-%%--Main window---------------------------------------------------------
-
-draw_win(GS, Node) ->
-
- %% Main window
- NodeStr = atom_to_list(Node),
- Win = gs:create(window, GS, [{title,
- "APPMON: Overview on " ++ NodeStr},
- {width, ?wWIN}, {height, ?hWIN},
- {configure, true}]),
- Canvas = gs:create(canvas, Win, [{x, 0}, {y, ?hMENUBAR},
- {width, ?wCANVAS},
- {height, ?hCANVAS}]),
- L1 = gs:create(line, Canvas, [{coords,
- [{0,?yNODELBL-?PAD},
- {?wCANVAS,?yNODELBL-?PAD}]}]),
- L2 = gs:create(line, Canvas, [{coords,
- [{0,?hCANVAS-?PAD},
- {?wCANVAS,?hCANVAS-?PAD}]}]),
-
- %% Standard buttons
- MenuBar = gs:create(menubar, Win, [{height, ?hMENUBAR}]),
-
- FileMenuBtn = gs:create(menubutton, MenuBar,
- [{label, {text,"File"}}]),
- FileMenu = gs:create(menu, FileMenuBtn, []),
- gs:create(menuitem, FileMenu, [{label, {text,"Show List Box..."}},
- {data, listbox}]),
- gs:create(menuitem, FileMenu, [{label, {text, "Close"}},
- {data, {close, Win}}]),
- gs:create(menuitem, FileMenu, [{itemtype, separator}]),
- gs:create(menuitem, FileMenu, [{label, {text, "Exit"}},
- {data, exit}]),
-
- ActionMenuBtn = gs:create(menubutton, MenuBar,
- [{label,{text,"Actions"}}]),
- ActionMenu = gs:create(menu, ActionMenuBtn, []),
- gs:create(menuitem, ActionMenu, [{label, {text,"Reboot"}},
- {data, {action, reboot, Win}}]),
- gs:create(menuitem, ActionMenu, [{label, {text,"Restart"}},
- {data, {action, restart, Win}}]),
- gs:create(menuitem, ActionMenu, [{label, {text,"Stop"}},
- {data, {action, stop, Win}}]),
- gs:create(menuitem, ActionMenu, [{label, {text,"Ping"}},
- {data, {action, ping, Win}}]),
-
- OptMenuBtn = gs:create(menubutton, MenuBar,
- [{label, {text,"Options"}}]),
- OptMenu = gs:create(menu, OptMenuBtn, []),
- G0 = now(), % Group identity unique per window!
- SMI = gs:create(menuitem, OptMenu, [{label, {text,"One window"}},
- {itemtype, radio}, {group, G0},
- {data, {window_mode, single}}]),
- MMI = gs:create(menuitem, OptMenu, [{label, {text,"Many windows"}},
- {itemtype, radio}, {group, G0},
- {data, {window_mode, many}}]),
- gs:create(menuitem, OptMenu, [{itemtype, separator}]),
- G1 = now(),
- TMI = gs:create(menuitem, OptMenu, [{label, {text,"Load: time"}},
- {itemtype, radio}, {group, G1},
- {data,
- {option, time,
- [{load_method,time}]}}]),
- QMI = gs:create(menuitem, OptMenu, [{label, {text,"Load: queue"}},
- {itemtype, radio}, {group, G1},
- {data,
- {option, queue,
- [{load_method,queue}]}}]),
- G2 = now(),
- PMI = gs:create(menuitem, OptMenu,
- [{label, {text,"Load: progressive"}},
- {itemtype, radio}, {group, G2},
- {data, {option, prog, [{load_scale,prog}]}}]),
- LMI = gs:create(menuitem, OptMenu, [{label, {text,"Load: linear"}},
- {itemtype, radio}, {group, G2},
- {data,
- {option, linear,
- [{load_scale,linear}]}}]),
-
- NodeMenuBtn = gs:create(menubutton, MenuBar,
- [{label, {text,"Nodes"}}]),
- NodeMenu = gs:create(menu, NodeMenuBtn, []),
-
- HelpMenuBtn = gs:create(menubutton, MenuBar,
- [{label, {text,"Help"}}, {side, right}]),
- HelpMenu = gs:create(menu, HelpMenuBtn, []),
- gs:create(menuitem, HelpMenu, [{label, {text,"Help"}},
- {data, help}]),
-
- %% Meter
- HLed = trunc((?hMETER)/(?LEDCOUNT)),
- Leds = draw_leds(?LEDCOUNT, Canvas, ?yMETER, HLed, []),
- leds_down(Leds, ?LEDCOUNT, 0),
- gs:create(text, Canvas, [{coords,
- [{?xMETER, ?yMETER+HLed*?LEDCOUNT}]},
- {anchor, nw},
- {font, {screen,8}},
- {text, "Load"}]),
- gs:create(text, Canvas, [{coords, [{?xMETER+?wMETER, ?yMETER}]},
- {anchor, nw},
- {font, {screen,8}},
- {text, "Hi"}]),
- gs:create(text, Canvas, [{coords, [{?xMETER+?wMETER,
- ?yMETER+HLed*?LEDCOUNT}]},
- {anchor, w},
- {font, {screen,8}},
- {text, "Lo"}]),
-
- %% Node label
- WNodeLbl = 8*length(NodeStr)+10,
- NLRect = gs:create(rectangle, Canvas,
- [{coords, [{?xNODELBL,?yNODELBL},
- {?xNODELBL+WNodeLbl,
- ?yNODELBL+?hNODELBL}]},
- {fill, black}]),
- Xc = ?xNODELBL + round(WNodeLbl/2),
- Yc = ?yNODELBL + round(?hNODELBL/2),
- NLText = gs:create(text, Canvas, [{text, NodeStr},
- {fg, {250,235,215}},
- {coords, [{Xc,Yc}]},
- {anchor, c}]),
- NodeLbl = {NLRect, NLText},
-
- gs:config(Win, {map, true}),
- #win{name=Node,
- window=Win, wwindow=?wWIN, hwindow=?hCANVAS,
- options=#options{single=SMI, many=MMI,
- time=TMI, queue=QMI, prog=PMI, linear=LMI},
- canvas=Canvas, wcanvas=?wCANVAS, hcanvas=?hCANVAS,
- l1=L1, l2=L2, leds=Leds, nodelabel=NodeLbl, nodemenu=NodeMenu}.
-
-draw_leds(N, Canvas, Y, HLed, Leds) when N>0 ->
- Led = gs:create(rectangle, Canvas,
- [{coords,
- [{?xMETER,Y}, {?xMETER+?wMETER,Y+HLed}]}]),
- draw_leds(N-1, Canvas, Y+HLed, HLed, [Led | Leds]);
-draw_leds(0, _Canvas, _Y, _HLed, Leds) ->
- Leds.
-
-%%--Draw functions------------------------------------------------------
-%% Functions that modify the GUI and its data (win{})
-
-%% Display the node name in the window title
-%% (The name in the node label is changed by display_nodeup|nodedown)
-%% Used when a changing the node to display
-draw_nodename(GUI, Node) ->
- NodeStr = atom_to_list(Node),
- gs:config(GUI#win.window,
- {title, "APPMON: Overview on " ++ NodeStr}),
- GUI#win{name=Node}.
-
-%% Resize the canvas (when the window has been resized)
-draw_resize(GUI, W, H) ->
- Hc = H - ?hMENUBAR,
- gs:config(GUI#win.canvas, [{width, W}, {height, Hc}]),
- Yline1 = ?yNODELBL-?PAD,
- Yline2 = ?hCANVAS-?PAD,
- gs:config(GUI#win.l1, [{coords, [{0,Yline1},{W,Yline1}]}]),
- gs:config(GUI#win.l2, [{coords, [{0,Yline2},{W,Yline2}]}]),
- GUI#win{wwindow=W, hwindow=Hc}.
-
-%% Clear the GUI from applications and connecting lines
-draw_clear(GUI) ->
- draw_clear2(GUI#win.appobjs),
- gs:config(GUI#win.canvas, [{hscroll, false}]),
- GUI#win{appobjs=[]}.
-draw_clear2([CBtn | AppObjs]) when is_record(CBtn, canvasbutton) ->
- gs:destroy(CBtn#canvasbutton.text),
- gs:destroy(CBtn#canvasbutton.ul),
- gs:destroy(CBtn#canvasbutton.ll),
- gs:destroy(CBtn#canvasbutton.rect),
- draw_clear2(AppObjs);
-draw_clear2([GSObj | AppObjs]) ->
- gs:destroy(GSObj),
- draw_clear2(AppObjs);
-draw_clear2([]) ->
- ignore.
-
-%% Display the applications, which are a list of tuples: {Pid,App,Descr}
-%% Display them in the reversed order to get them chronologically
-%% from left to right.
-draw_apps(GUI, Apps) ->
- {AppObjs, WCanvas} = draw_apps(GUI, lists:reverse(Apps), ?xNODELBL,
- undefined, 0, []),
- NewGUI = GUI#win{wcanvas=WCanvas, appobjs=AppObjs},
- display_scrollbar(NewGUI),
- NewGUI.
-
-draw_apps(GUI, [App | Apps], X, Lx0, N, GSObjs) ->
-
- %% Some necessary data
- {_Pid, AppName, _Descr} = App,
- Text = atom_to_list(AppName),
- Width = erlang:max(8*length(Text)+10, ?wBTN),
-
- %% Connect the application to the node label with a line
- %% Lx0 = leftmost X coordinate (above previous application button)
- %% Lx = X coordinate, Ly1, Ly2 = top and bottom Y coordinates
- Lx = X + trunc(Width/2),
- Line = case N of
- %% First (leftmost application) - draw a vertical line
- %% between the node label and application button
- 0 ->
- Ly1 = ?yNODELBL + ?hNODELBL +?PAD,
- Ly2 = Ly1 + ?PAD2,
- gs:create(line, GUI#win.canvas,
- [{coords, [{Lx, Ly1}, {Lx, Ly2}]}]);
- %% Nth application, N>1 - draw a horizontal line from
- %% line connecting to the previous application button,
- %% to above this application button, then vertically down
- %% to the application button
- _ ->
- Ly1 = ?yNODELBL + ?hNODELBL + ?PAD + ?PAD2/2,
- Ly2 = Ly1 + ?PAD2/2,
- gs:create(line, GUI#win.canvas,
- [{coords, [{Lx0, Ly1}, {Lx, Ly1},
- {Lx, Ly2}]}])
- end,
-
- %% The application is represented using a 'canvasbutton'
- Data = {application, AppName, GUI#win.name},
- AppBtn = canvasbutton(GUI#win.canvas, Text, X, ?yBTN, Width, ?hBTN,
- Data),
-
- draw_apps(GUI, Apps, X+Width+?PAD, Lx, N+1, [AppBtn, Line|GSObjs]);
-draw_apps(_GUI, [], X, _N, _Lx0, GSObjs) ->
- {GSObjs, X}.
-
-%%--Display functions---------------------------------------------------
-%% Functions that modify the GUI but not its data
-
-%% Add a new node to the Nodes menu
-%% Used when a new node has connected
-display_addnode([GUI|GUIs], Node) ->
- display_addnode(GUI, Node),
- display_addnode(GUIs, Node);
-display_addnode([], _Node) ->
- ignore;
-display_addnode(GUI, Node) ->
- Txt = "Show " ++ atom_to_list(Node),
- gs:create(menuitem, GUI#win.nodemenu,
- [{label, {text,Txt}},
- {data, {node, Node, GUI#win.window}}]).
-
-%% Show that a node has come back up
-display_nodeup(GUI, Node) ->
- {Rect, Text} = GUI#win.nodelabel,
-
- %% Check coordinates for the rectangle and compute the new width
- [{L, T}, {_R, B}] = gs:read(Rect, coords),
- NodeStr = atom_to_list(Node),
- W = 8*length(NodeStr)+10,
-
- gs:config(Rect, [{coords, [{L, T}, {L+W, B}]}, {fill, black}]),
- gs:config(Text, [{text, NodeStr}, {fg, {250,235,215}},
- {coords,
- [{L+round(W/2), T+round((?hNODELBL)/2)}]}]).
-
-%% Show that a node has gone down
-display_nodedown(GUI) ->
- {Rect, Text} = GUI#win.nodelabel,
-
- [{L, T}, {_R, B}] = gs:read(Rect, coords),
- gs:config(Rect, [{coords, [{L, T}, {L+114, B}]}, {fill, gray}]),
- gs:config(Text, [{text, "No connection"}, {fg, black},
- {coords, [{L+57, T+round((?hNODELBL)/2)}]}]).
-
-%% Add/remove scrollbars as necessary
-display_scrollbar(GUI) ->
-
- WWindow = GUI#win.wwindow,
- HWindow = GUI#win.hwindow,
- WCanvas = GUI#win.wcanvas,
- HCanvas = GUI#win.hcanvas,
- if
- WCanvas>WWindow ->
- gs:config(GUI#win.canvas,
- [{hscroll, bottom},
- {scrollregion,{0,0,WCanvas,HCanvas}}]);
- true ->
- gs:config(GUI#win.canvas, [{hscroll, false}])
- end,
- if
- HCanvas>HWindow ->
- gs:config(GUI#win.canvas,
- [{vscroll, left},
- {scrollregion,{0,0,WCanvas,HCanvas}}]);
-
- true ->
- gs:config(GUI#win.canvas, [{vscroll, false}])
- end.
-
-%% Select option radio buttons
-display_setopt(GUI, Option) ->
- gs:config(radiobutton(GUI, Option), {select,true}).
-
-radiobutton(GUI, single) -> (GUI#win.options)#options.single;
-radiobutton(GUI, many) -> (GUI#win.options)#options.many;
-radiobutton(GUI, time) -> (GUI#win.options)#options.time;
-radiobutton(GUI, queue) -> (GUI#win.options)#options.queue;
-radiobutton(GUI, prog) -> (GUI#win.options)#options.prog;
-radiobutton(GUI, linear) -> (GUI#win.options)#options.linear.
-
-%% Display load
-%% Used when load information is received from the displayed node
--define(highloadfg, {255,99,71}).
--define(midloadfg, yellow).
--define(lowloadfg, green).
--define(highloadbg, {140,157,178}).
--define(midloadbg, ?highloadbg).
--define(lowloadbg, ?highloadbg).
-
-display_load(GUI, {Old, New}) ->
- if
- Old == New ->
- true;
- Old > New ->
- leds_down(GUI#win.leds, Old, New);
- true ->
- leds_up(GUI#win.leds, Old, New)
- end.
-
-leds_down(_Leds, Old, New) when Old == New ->
- done;
-leds_down(Leds, Old, New) when Old > New ->
- reset_led(Leds, Old),
- leds_down(Leds, Old-1, New).
-leds_up(_Leds, Old, New) when Old == New ->
- done;
-leds_up(Leds, Old, New) when Old < New ->
- set_led(Leds, Old),
- leds_up(Leds, Old+1, New).
-
-led_on_col(N) when N > 13 -> ?highloadfg;
-led_on_col(N) when N > 9 -> ?midloadfg;
-led_on_col(_) -> ?lowloadfg.
-
-led_off_col(N) when N > 13 -> ?highloadbg;
-led_off_col(N) when N > 9 -> ?midloadbg;
-led_off_col(_) -> ?lowloadbg.
-
-reset_led(_Leds, 0) -> ok;
-reset_led(Leds, N) ->
- gs:config(lists:nth(N, Leds), [{fill, led_off_col(N)}]).
-
-set_led(_Leds, 0) -> ok;
-set_led(Leds, N) ->
- gs:config(lists:nth(N, Leds), [{fill, led_on_col(N)}]).
-
-%%----------------------------------------------------------------------
-%% Utilities
-%%----------------------------------------------------------------------
-
-bcast(MNodes, Msg) ->
- lists:foreach(fun(MNode) ->
- case MNode#mnode.status of
- alive ->
- MNode#mnode.pid ! Msg;
- dead ->
- ignore
- end
- end,
- MNodes).
-
-%% parse_nodes(MNodes) -> NodeApps
-%% MNodes -> [#mnode{}]
-%% NodeApps -> [{Node, Status, Apps}]
-%% Node -> atom()
-%% Status -> alive | dead
-%% Apps -> [{Pid, App}]
-%% Pid -> pid()
-%% App -> atom()
-parse_nodes(MNodes) ->
- parse_nodes(MNodes, []).
-parse_nodes([MNode|MNodes], NodeApps) ->
- Apps = parse_apps(MNode#mnode.apps, []),
- parse_nodes(MNodes,
- [{MNode#mnode.name,MNode#mnode.status,Apps}|NodeApps]);
-parse_nodes([], NodeApps) ->
- NodeApps.
-
-parse_apps([{Pid, App, _Descr}|Rest], Apps) ->
- parse_apps(Rest, [{Pid, App}|Apps]);
-parse_apps([], Apps) ->
- Apps.
-
-%%----------------------------------------------------------------------
-%% Canvas buttons
-%%----------------------------------------------------------------------
-
-canvasbutton(Canvas, Text, X, Y, W, H, Data) ->
-
- %% Draw a rectangle (for event catching)
- Rect = gs:create(rectangle, Canvas, [{coords, [{X,Y}, {X+W,Y+H}]},
- {fill, gs:read(Canvas, bg)},
- {buttonpress, true},
- {buttonrelease, true}]),
-
- %% Make the rectangle area look like a 3D button by using lines
- Ul = gs:create(line, Canvas, [{coords, [{X,Y+H},{X,Y},{X+W,Y}]},
- {fg, white}, {width, 2}]),
- Ll = gs:create(line, Canvas, [{coords, [{X,Y+H},{X+W,Y+H},{X+W,Y}]},
- {fg, {87,87,87}}, {width, 2}]),
-
- %% Write the text in the middle
- Xc = X + round(W/2),
- Yc = Y + round(H/2),
- T = gs:create(text, Canvas, [{text, Text}, {coords, [{Xc,Yc}]},
- {anchor, c},
- {buttonpress, true},
- {buttonrelease, true}]),
-
- %% Create the canvasbutton object
- CBtn = #canvasbutton{text=T, ul=Ul, ll=Ll, rect=Rect,
- x=X, y=Y, w=W, h=H},
-
- %% Configure the data
- gs:config(T, {data, {canvasbutton, CBtn, Data}}),
- gs:config(Rect, {data, {canvasbutton, CBtn, Data}}),
-
- CBtn.
-
-press(Canvasbutton) ->
- gs:config(Canvasbutton#canvasbutton.ul, {fg, {87,87,87}}),
- gs:config(Canvasbutton#canvasbutton.ll, {fg, white}).
-
-release(Canvasbutton) ->
- gs:config(Canvasbutton#canvasbutton.ul, {fg, white}),
- gs:config(Canvasbutton#canvasbutton.ll, {fg, {87,87,87}}).
diff --git a/lib/appmon/src/appmon_a.erl b/lib/appmon/src/appmon_a.erl
deleted file mode 100644
index 6838a7a275..0000000000
--- a/lib/appmon/src/appmon_a.erl
+++ /dev/null
@@ -1,1122 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2012. 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(appmon_a).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,create,3}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,start,1}}]).
-
-%%----------------------------------------------------------------------
-%%
-%% Monitors an application, i.e its supervision tree.
-%%
-%%----------------------------------------------------------------------
-%%
-%%
-%% INTRODUCTION
-%% ------------
-%%
-%% This file contains a description of the files involved
-%% and the communication between the appmon_a display
-%% manager and the appmon_a2 information gatherer. Further
-%% information on the placement algorithm can be found in
-%% the place.erl file.
-%%
-%%
-%% FILES
-%% -----
-%%
-%% The supervision tree graphical software consists of
-%% the following files:
-%%
-%% appmon_a Gen server driving the process display window.
-%% Responsible for assigning gs identifiers to all
-%% processes and process link
-%% appmon_a2 The process information gathering routines.
-%% Works by following the process links from application
-%% master once every second
-%% dg The process database is implemented as a shared
-%% digraph (see manual pages for digraph) and this is
-%% the routines handling this digraph. Since the digraph
-%% is shared appmon_a2 will put some info into it that the
-%% appmon_a later will modify. The structures used are
-%% described in dg.hrl
-%% place Places a tree, decides the x and y coordinates (not
-%% necessarily corresponding to window coordinates) of
-%% processes (or vertices to be specific). Note that
-%% special routines are used to transform the possibly
-%% cyclic digraph into a strict tree before trying to
-%% place it.
-%%
-%%
-%%
-%% IMPLEMENTATION DETAIL
-%% ---------------------
-%%
-%% The appmon_a module will follow links between processes,
-%% starting with the application master. A unique
-%% reference is used to prevent infinite recursion. Note
-%% that this process and link gathering is done in the
-%% live digraph so that already known processes are
-%% updated with the reference and new ones are added to
-%% the digraph. After all processes and links have been
-%% added or updated a search is made for those processes
-%% and links that have an old reference. These are those
-%% processes and links that are not present in the
-%% application any more. Those are extracted from the
-%% digraph and then deleted and the extracts are then
-%% used (by appmon_a) to delete the appropriate gs
-%% objects. The responsibilities of appmon_a is thus 1) add
-%% all new processes and links to the digraph and 2) make
-%% a list of all those objects from the digraph that have
-%% been deleted.
-%%
-%% When appmon_a2 has gathered all necessary information it
-%% notifies the appmon_a display manager. Note that this is
-%% implemented as a call (as opposed to a cast) to
-%% prevent appmon_a2 from changing the digraph while appmon_a
-%% uses it. appmon_a places all processes using the place
-%% module. place will place the processes in the x y
-%% planes, hopefully in a nice way, re-forming the
-%% digraph during the process into a strict tree using
-%% some simple heuristics, some links that makes the
-%% graph cyclic will be considered secondary and later
-%% coloured red. Note that the process links are not
-%% placed since their coordinates are those of the
-%% processes that they are links between. The place
-%% module is only concerned at a fairly high level of
-%% abstraction. Currently its x coordinates are used as
-%% real coordinates while the y coordinates must be
-%% scaled to correct values, thus the x plane is
-%% continous and the y plane is disctrete.
-%%
-%% Having placed processes the new ones are drawn on the
-%% display along with all new process links, then all
-%% processes and process links are moved to their
-%% possibly new positions. The place module is not
-%% sensitive to changes in position and therefore has no
-%% concept of which nodes will have to be moved. hence
-%% all nodes are moved (but most of them probably to the
-%% same position as before)
-%%
-%%
-%%
-%%
-%%----------------------------------------------------------------------
-
-
-
--export([start/2, start/3, stop/0]).
-
-
--record(astate, {app, name, client, digraph}).
-
--import(lists, [foreach/2]).
-
-%% gen server stuff
--behaviour(gen_server).
--export([init/1, handle_cast/2, handle_info/2, terminate/2]).
--export([handle_call/3, code_change/3]).
-
-
--define(APPSPACE, 10). % The space between apps
--define(NODEAREA_H, 90). % The height of a node
--define(BUTTAREA_H, 80). % The button area height
--define(APPBUTT_H, 20). % Height of appl button
--define(EDITORW, 260).
-
--define(MAXWIDTH, 800).
--define(MINWIDTH, 382).
--define(MAXHEIGHT, 450).
--define(MINHEIGHT, 325).
-
--define(SUPVIEWTXT, "Sup. view").
--define(PROCVIEWTXT, "Proc. view").
--define(CLOSETXT, "Close").
--define(REFRESHTXT, "Refresh").
--define(SAVEOPTSTXT, "Save options").
--define(HELPTXT, "Help").
-
--define(CHARWIDTH, 7). %Should use GS primitives
-
--define( darkkhaki, {189, 183, 107}).
--define( palegoldenrod, {238, 232, 170}).
--define( peachpuff4, {139, 119, 101}).
--define( red, red).
--define( darkgrey, {169, 169, 169}).
--define( lightgrey, {211, 211, 211}).
--define( royalblue, {65, 105, 225}).
--define( aquamarine4, {69, 139, 116}).
--define( palegreen4, {84, 139, 84}).
--define( darkseagreen, {105, 139, 105}).
--define( f_line_col, {150, 150, 255}).
-
-
--include("appmon_dg.hrl").
-
-
-%%------------------------------------------------------------
-%%------------------------------------------------------------
-
-
-start(NodeName, AppName) ->
- gen_server:start_link(?MODULE, {NodeName, AppName, AppName}, []).
-
-start(NodeName, AppName, AppId) ->
- gen_server:start_link(?MODULE, {NodeName, AppName, AppId}, []).
-
-
-stop() ->
- ok.
-
-
-
-%%------------------------------------------------------------
-%% Public interface
-
-
-%%------------------------------------------------------------
-%% Administration
-
-%% AppName is the name of the application, usually an atom like sasl
-%% or kernel, AppId is the application pid or the application name,
-%% either goes.
-init({NodeName, AppName, AppId}) ->
- process_flag(trap_exit, true),
- {ok, Client} = appmon_info:start_link(NodeName, self(), []),
- init_ref(),
- init_foreign_places(),
- DG = digraph:new([cyclic, private]),
- State = #astate{app=AppId, name=AppName, client=Client, digraph=DG},
- refresh(State),
- setup_base_win(NodeName, AppName),
- {ok, State}.
-
-terminate(_Reason, _State) ->
- ok.
-
-code_change(_OldVsn, State, _Extra) ->
- {ok, State}.
-
-handle_call(norequest, _From, State) ->
- {reply, null, State}.
-
-%%------------------------------------------------------------
-%% handle casts
-
-handle_cast({ping, _Node, _From}, State) ->
- {noreply, State};
-handle_cast(_Other, State) ->
- {noreply, State}.
-
-
-
-%%------------------------------------------------------------
-%% handle info
-
-handle_info({gs, _, click, _, [?CLOSETXT|_]}, State) ->
- {stop, normal, State};
-handle_info({gs, _, destroy, _, _}, State) ->
- {stop, normal, State};
-handle_info({gs, _, click, _, [?REFRESHTXT|_]}, State) ->
- refresh(State),
- {noreply, State};
-handle_info({gs, _, click, _, [?HELPTXT|_]}, State) ->
- HelpFile = filename:join([code:lib_dir(appmon),
- "doc", "html", "part_frame.html"]),
- tool_utils:open_help(win(), HelpFile),
- {noreply, State};
-handle_info({gs, Id, click, {mode, Mode}, _}, State) ->
- %%io:format("handle_info: Setting mode: ~p~n", [Mode]),
- set_mode(Id, Mode),
- {noreply, State};
-handle_info({gs, _, click, _, [?SUPVIEWTXT|_]}, State) ->
- refresh(State, [{info_type, sup}]),
- {noreply, State};
-handle_info({gs, _, click, _, [?PROCVIEWTXT|_]}, State) ->
- refresh(State, [{info_type, link}]),
- {noreply, State};
-handle_info({gs, Id, buttonpress, _,[1, X, Y|_]}, State) ->
- %%io:format("Id clicked: ~p~n", [gs:read(Id, {find, {X, Y}})]),
- catch find_pid(State, Id, X, Y),
- set_default_mode(),
- {noreply, State};
-handle_info({gs, Win, configure, _Data, [W, H|_]}, State) ->
- case win() of Win -> user_driven_resize(W, H);
- _-> ok
- end,
- {noreply, State};
-
-handle_info({delivery, _S, pinfo, _N, Res}, State) ->
- appmon_txt:print(Res),
- {noreply, State};
-handle_info({delivery, S, app, N, Res}, State) ->
- {delivery, _Serv, app, _Name, {Root, Vs, Ls, SecLs}} =
- flush({delivery, S, app, N, Res}),
- update2(Vs, Root, Ls, SecLs, State),
- {noreply, State};
-
-handle_info({kill}, State) ->
- {stop, normal, State};
-handle_info({state}, State) ->
- {noreply, State};
-handle_info({'EXIT', _Pid, _Reason}, State) ->
- {noreply, State};
-handle_info(_Other, State) ->
- {noreply, State}.
-
-
-%% Refresh sets new options for the request and forces an update of
-%% the screen ant status.
-refresh(State) ->
- refresh(State, []).
-refresh(State, Opts) ->
- appmon_info:app(State#astate.client,
- State#astate.name, true, Opts).
-
-
-
-%% find_pid finds the pid of the clicked object. The scenario is that
-%% the user clicks on an item in his window, that ObjId is searched
-%% for among all nodes (vertices) and if found action is taken
-%% depending on the current mode (see handle_info)
-find_pid(State, Id, X, Y) ->
- %% Try to manage both versions of GS, remove first case later.
- ObjList = case gs:read(Id, {find, {X, Y}}) of
- {error, _} ->
- gs:read(Id, {hit, {X, Y}}); % Try new format
- Num when is_integer(Num) -> [Num];
- _Other -> []
- end,
- DG = State#astate.digraph,
- All = appmon_dg:get(all, DG),
- find_pid2(ObjList, All, DG, State).
-
-find_pid2([Id | Ids], All, DG, State) ->
- case search_for_pid(All, DG, Id) of
- {ok, _KeyStr, Pid} ->
- handle_proc_press(mode(), Pid, State);
- _ -> find_pid2(Ids, All, DG, State)
- end;
-find_pid2([], _All, _DG, _State) -> ok.
-
-search_for_pid([V|Vs], DG, ObjId) ->
- VD = appmon_dg:get(data, DG, V),
- if ObjId==VD#vdata.txt_obj ->
- {ok, V, VD#vdata.type};
- true -> search_for_pid(Vs, DG, ObjId)
- end;
-search_for_pid([], _DG, _ObjId) -> false.
-
-
-%%
-%% called when a process has been clicked on.
-%%
-handle_proc_press(info, Pid, State) ->
- appmon_info:pinfo(State#astate.client, Pid, true,
- [{timeout, at_most_once}]);
-handle_proc_press(send, Pid, _State) ->
- {P, RawStr} = two_entries(winroot(), 250, 70,
- "Send", "To: ", "Msg: ",
- pid_to_list(Pid), "", bg()),
- Str = case lists:last(RawStr) of
- 46 -> RawStr;
- _ -> RawStr++"."
- end,
- case erl_scan:string(Str) of
- {ok, Tokens, _} ->
- case erl_parse:parse_term(Tokens) of
- {ok, Term} ->
- case catch list_to_pid(P) of
- To when is_pid(To) -> To ! Term;
- _ -> error
- end;
- _Error -> error
- end;
- _Error -> error
- end;
-handle_proc_press(trace, Pid, _State) ->
- case trace_state(Pid) of
- true ->
- io:format("Removing trace on ~p~n", [Pid]),
- sys:trace(Pid, false),
- set_trace_state(Pid, false);
- _Other ->
- io:format("Putting trace on ~p~n", [Pid]),
- sys:trace(Pid, true, 1000),
- set_trace_state(Pid, true)
- end;
-handle_proc_press(kill, Pid, _State) ->
- exit(Pid, kill).
-
-
-trace_state(Pid) -> get({trace_state, Pid}).
-set_trace_state(Pid, State) -> put({trace_state, Pid}, State).
-
-set_default_mode() ->
- {Id, Mode} = get(default_mode),
- case mode() of
- Mode -> true;
- _Other -> set_mode(Id, Mode)
- end.
-set_default_mode(Id, Mode) ->
- put(default_mode, {Id, Mode}),
- select(Id), %Dirty workaround
- set_default_mode().
-
-set_mode(Id, Mode) ->
- %%io:format("mode=~p~n", [Mode]),
- set_mode(Mode),
- deselect(),
- select(Id).
-
-set_mode(Mode) -> put(mode, Mode).
-mode() -> get(mode).
-
-flush({delivery, S, A, N, R}) ->
- receive
- {delivery, S, A, N, R2} ->
- flush({delivery, S, A, N, R2})
- after 0 ->
- {delivery, S, A, N, R}
- end.
-
-
-%%------------------------------------------------------------
-%% Real stuff
-%%
-update2(Vs, Root, Ls, SecLs, State) ->
- DG = State#astate.digraph,
- Ref = mk_ref(),
- Added = add_procs(Vs, DG, Ref),
- AddedLs = add_links(Ls, DG, Ref, primary),
- AddedLs2 = add_links(SecLs, DG, Ref, secondary),
- DelLs = del_links(appmon_dg:eget(all, DG), DG, Ref),
- Dels = del_procs(appmon_dg:get(all, DG), DG, Ref),
-
- LastX = appmon_place:place(DG, Root),
- Width = lists:max(LastX),
- Height = length(LastX),
-
- %% Delete things from screen
- del(Dels), del(DelLs),
-
- %% Add vertices to screen
- foreach(fun(V) -> draw_node(DG, V) end, Added),
-
- %% Add edges to screen
- foreach(fun(E) -> draw_edge(DG, E) end, AddedLs),
- foreach(fun(E) -> draw_edge(DG, E) end, AddedLs2),
-
- %% Move vertices on screen
- foreach(fun(V) -> move_vertex(DG, V) end, appmon_dg:get(all, DG)),
-
- tree_driven_resize(Width, Height),
-
- gs:config(win(), {map, true}), %Make win visible
- ok.
-
-%% Make an integer reference, could have used make_ref BIF but didn't
-mk_ref() -> put(reference, get(reference)+1).
-init_ref() -> put(reference, 0).
-
-
-%% Add processes (vertices) to digraph, use the string repr of pid as
-%% key in digraph.
-add_procs([{Pid, Str}|Vs], DG, Ref) ->
- case appmon_dg:add(DG, Str, mk_vdata(Str, Pid, Ref), Ref) of
- known -> add_procs(Vs, DG, Ref);
- updated -> add_procs(Vs, DG, Ref);
- _ ->
- case lists:member(32, Str) of
- true ->
- appmon_dg:set(x, DG, Str, foreign), % UNHOLY!
- add_procs(Vs, DG, Ref); % Don't add foreign
- _ -> [Str | add_procs(Vs, DG, Ref)]
- end
- end;
-add_procs([], _DG, _Ref) -> [].
-
-
-%% Add links to digraph. NOTE that foreign links get a special weight
-%% and that no link is added if it goes to a process not in the set of
-%% vertices.
-%%
-%% OTP-1970: Check that linked-to processes really exist.
-%%
-add_links([{V1, V2}|Ls], DG, Ref, Weight) ->
- L = case lists:member(32, V2) of
- true -> {V1, V2, foreign};
- _ -> {V1, V2, Weight}
- end,
- case appmon_dg:get(data, DG, V2) of
- false -> add_links(Ls, DG, Ref, Weight);
- VD ->
- if VD#vdata.ref == Ref -> % OTP-1970
- case appmon_dg:eadd(DG, L, mk_edata(L, Ref), Ref) of
- known -> add_links(Ls, DG, Ref, Weight);
- updated -> add_links(Ls, DG, Ref, Weight);
- _Other -> [L | add_links(Ls, DG, Ref, Weight)]
- end;
- true ->
- add_links(Ls, DG, Ref, Weight)
- end
- end;
-add_links([], _DG, _Ref, _Weight) -> [].
-
-%% Make an edge data structure
-mk_edata(_L, Ref) ->
- #edata{ref=Ref}.
-
-%% Make a vertex data structure, note that pid can be either a pid or
-%% a port, we're not picky here.
-mk_vdata(P, Pid, Ref) ->
- #vdata{ref=Ref, type=Pid, txt=P, width=width(P)}.
-width(Txt) -> ?CHARWIDTH*length(Txt)+10. % Should use GS stuff instead
-
-
-%% Delete those processes that have the wrong reference from the
-%% digraph. Returns a list of deleted procs and their data (to be able
-%% to erase things on screen).
-del_procs([V|Vs], DG, Ref) ->
- VD = appmon_dg:get(data, DG, V),
- if VD#vdata.ref /= Ref -> appmon_dg:del(DG, V),
- [{V, VD} | del_procs(Vs, DG, Ref)];
- true -> del_procs(Vs, DG, Ref)
- end;
-del_procs([], _DG, _Ref) -> [].
-
-
-%% Deletes links that have the wrong reference from the digraph, note
-%% that the weight of the edge is not considered here. Returns a list
-%% of deleted links and their data (to be able to erase things on
-%% screen).
-del_links([L | Ls], DG, Ref) ->
- ED = appmon_dg:eget(data, DG, L),
- if ED#edata.ref /= Ref -> appmon_dg:edel(DG, L),
- [{L, ED} | del_links(Ls, DG, Ref)];
- true -> del_links(Ls, DG, Ref)
- end;
-del_links([], _DG, _Ref) -> [].
-
-%% Del deletes the GS objects of the list of should-be-deleted
-%% items. Returns nothing particular.
-del(L) ->
- lists:foreach(fun({{V1, V2, Weight}, D}) when is_record(D, edata) ->
- if Weight== foreign ->
- dealloc_foreign({V1, V2, Weight});
- true -> ok end,
- destroy(D#edata.line);
- ({_I, D}) when is_record(D, vdata) ->
- destroy(D#vdata.sym_obj),
- destroy(D#vdata.txt_obj)
- end, L).
-
-
-move_vertex(DG, V) ->
- VData = appmon_dg:get(data, DG, V),
-%% io:format("Vertex ~p data: x:~p, oldx:~p, y:~p, oldy:~p offs:~p~n",
-%% [V, VData#vdata.x, VData#vdata.origx,
-%% VData#vdata.y, VData#vdata.origy, offsetx()]),
- if VData#vdata.x == foreign -> ok;
- true ->
- X = VData#vdata.x,
- Y = scaley(VData#vdata.y),
- OldX = VData#vdata.origx,
- OldY = scaley(VData#vdata.origy),
- if X==OldX, Y==OldY -> true;
- true ->
- %%io:format("Moving vertex: ~p~n", [V]),
-
- W = VData#vdata.width,
- {BoxC, TxtC} = calc_box_coords(X, Y, W),
-
- %% move the symbol and text
- gs:config(VData#vdata.sym_obj, [{coords, BoxC}]),
- gs:config(VData#vdata.txt_obj, [{coords, TxtC}]),
- foreach(fun(E) -> move_edge(DG, E) end,
- appmon_dg:get(edges, DG, V))
- end
- end.
-
-
-move_edge(DG, E) ->
- {{V1, V2, Weight}, V1, V2, ED} = appmon_dg:eget(edge, DG, E),
- VD1 = appmon_dg:get(data, DG, V1),
- VD2 = appmon_dg:get(data, DG, V2),
- Line = ED#edata.line,
- move_line(DG, VD1, VD2, Line, Weight).
-move_line(DG, VD1, VD2, Line, Weight) when is_list(Line) ->
- move_line(DG, VD1, VD2, hd(Line), Weight);
-move_line(_DG, VD1, VD2, Line, Weight) ->
- Coords = calc_coords(VD1, VD2, Weight),
- gs:config(Line, [{coords, Coords} | line_opts(Weight)]).
-
-%% Draw the vertex on the canvas
-draw_node(DG, V) ->
- %%io:format("Drawing~n",[]),
- Data = appmon_dg:get(data, DG, V),
-
- X = Data#vdata.x,
- Y = scaley(Data#vdata.y),
-
- {Sym, Txt} = draw(rectangle, sup_col(), Data#vdata.txt, X, Y,
- Data#vdata.width),
-
- appmon_dg:av(DG, V, Data#vdata{sym_obj=Sym, txt_obj=Txt}),
- true.
-
-%% Draws a symbol (rectangle for instance) on the canvas.
-draw(Symbol, Col, Txt, X, Y, W) ->
- {BoxC, TxtC} = calc_box_coords(X, Y, W),
- Box = gs:create(Symbol, canvas(), [{coords, BoxC}, {fill, Col}]),
-
- TxtObj = gs:create(text, canvas(), [{coords, TxtC},
- {anchor, c},
- %%{buttonpress, true},
- {text, Txt}]),
- {Box, TxtObj}.
-
-%% Returns {BoxCoords, TextCoords}
-calc_box_coords(X, Y, W) ->
- {[{X, Y-radius()}, {X+W, Y+radius()}], [{X+trunc(W/2), Y}]}.
-
-
-%% Draw a line on the canvas
-draw_edge(DG, E) ->
- {V1, V2, Weight} = E,
- Line = draw_line(DG, V1, V2, Weight),
-%% io:format("Line: ~p~n", [Line]),
- appmon_dg:eset(line, DG, E, Line).
-
-
-%% From is parent, To is child. If To is not a record then we are
-%% dealing with a link to a process on another node. Find a suitable
-%% place at the left margin and write the process name there and draw
-%% a line to it.
-%%
-draw_line(DG, From, To, foreign) ->
- VD1 = appmon_dg:get(data, DG, From),
- Y = find_foreign_place(VD1#vdata.y+0.5, foreign_places()),
- add_foreign_place({From, To, foreign}, Y),
-%% io:format("New Y: ~p~n", [Y]),
- appmon_dg:set(x, DG, To, 0),
- appmon_dg:set(y, DG, To, Y),
- VD2 = appmon_dg:get(data, DG, To),
- Coords = calc_coords(VD1, VD2, foreign),
-%% io:format("Node coords: ~p~n", [Coords]),
- L = gs:create(line, canvas(), [{coords, Coords} | line_opts(foreign)]),
- T = gs:create(text, canvas(), [{coords, [{0, 5+scaley(Y)}]},
- {anchor, nw}, {fg, f_line_col()},
-%% {font, {screen, 10}},
- {text, To}]),
- [L, T];
-
-draw_line(DG, From, To, Weight) ->
- VD1 = appmon_dg:get(data, DG, From),
- VD2 = appmon_dg:get(data, DG, To),
- Coords = calc_coords(VD1, VD2, Weight),
- gs:create(line, canvas(), [{coords, Coords} | line_opts(Weight)]).
-
-%%----------------------------------------------------------------------
-%%
-%% Line coordinate calculation
-%%
-%% Calculate coordinates for edges (links, lines). Primaries have a
-%% nice knee and secondaries are oriented differently. If weight is
-%% foreign then we will calculate a nice line to the left margin.
-%%
-calc_coords(From, To, foreign) ->
- Y = scaley(To#vdata.y),
- X1 = From#vdata.x+trunc(From#vdata.width/2),
- Y1 = scaley(From#vdata.y)+radius(),
- [{0, Y}, {X1-40, Y}, {X1, Y1}];
-calc_coords(From, To, primary) ->
- X1 = From#vdata.x+trunc(From#vdata.width/2),
- Y1 = scaley(From#vdata.y)+radius(),
-
- X2 = To#vdata.x+trunc(To#vdata.width/2),
- Y2 = scaley(To#vdata.y)-radius(),
-
- Y3 = trunc((Y1+Y2)/2),
- [{X1, Y1}, {X1, Y3}, {X2, Y3}, {X2, Y2}];
-
-calc_coords(V1, V2, _Weight) ->
- Y1 = scaley(V1#vdata.y),
- X1 = V1#vdata.x,
- X1w = X1+V1#vdata.width,
- Y2 = scaley(V2#vdata.y),
- X2 = V2#vdata.x,
- X2w = X2+V2#vdata.width,
-
- if Y1 == Y2 -> calc_u(X1, X1w, Y1, X2, X2w);
- X1w < X2 -> calc_s(X1w, Y1, X2, Y2);
- X2w < X1 -> calc_s(X1, Y1, X2w, Y2);
- true ->
- D1 = abs(X1-X2), D2 = abs(X1w-X2w),
- if D1 > D2 -> calc_rbrack(X1w, Y1, X2w, Y2);
- true -> calc_lbrack(X1, Y1, X2, Y2)
- end
- end.
-
-%% Calculates line coordinates that will go from bottom of one node to
-%% bottom of another on the same level. The line will form a nice "U".
-calc_u(X1, X1w, Y, X2, X2w) ->
- X3 = trunc((X1+X1w)/2),
- X4 = trunc((X2+X2w)/2),
- Y2 = Y+radius(),
- Y3 = Y2+20,
- [{X3, Y2}, {X3, Y3}, {X4, Y3}, {X4, Y2}].
-
-%% Calculates line coordinates that will go from right (or left) side
-%% to right (or left) side, thus forming a "[" or a "]" (bracket).
-calc_rbrack(X1, Y1, X2, Y2) ->
- X3 = 20 + if X1 > X2 -> X1;
- true -> X2
- end,
- [{X1, Y1}, {X3, Y1}, {X3, Y2}, {X2, Y2}].
-calc_lbrack(X1, Y1, X2, Y2) ->
- X3 = -20 + if X1 < X2 -> X1;
- true -> X2
- end,
- [{X1, Y1}, {X3, Y1}, {X3, Y2}, {X2, Y2}].
-
-%% Calculates line coordinates that will form a nice "S"
-calc_s(X1, Y1, X2, Y2) ->
- X3 = trunc((X1+X2)/2),
- [{X1, Y1}, {X3, Y1}, {X3, Y2}, {X2, Y2}].
-
-
-%% Options for lines (edges, links)
-line_opts(foreign) -> [{width, 2}, {smooth, true}, {fg, f_line_col()}];
-line_opts(primary) -> [{width, 2}, {smooth, false}, {fg, line_col()}];
-line_opts(_) -> [{width, 2}, {smooth, true}, {fg, sec_line_col()}].
-
-
-
-%%----------------------------------------------------------------------
-%%
-%% Handling of links to foreign processes
-%%
-%%----------------------------------------------------------------------
-dealloc_foreign(L) ->
-%% io:format("deallocing foreign: ~p~n", [L]),
- put(foreign_places, lists:keydelete(L, 1, foreign_places())).
-add_foreign_place(V, Y) ->
-%% io:format("Adding foreign: ~p~n", [V]),
- put(foreign_places, [{V, Y} | foreign_places()]).
-foreign_places() ->
- get(foreign_places).
-init_foreign_places() ->
- put(foreign_places, []).
-
-%% Find a good place for the foreign node
-find_foreign_place(StartY, L) ->
- case lists:keysearch(StartY, 2, L) of
- {value, _} -> find_foreign_place(StartY + 1, L);
- _ -> StartY
- end.
-
-
-%%------------------------------------------------------------
-%%
-%% Graphical stuff
-%%
-
-setup_base_win(NodeName, AppName) ->
- set_winroot(gs:start([{kernel,true}])),
-
- W = ?MINWIDTH, H = ?MINHEIGHT,
-
- Name = "APPMON: " ++ atom_to_list(AppName) ++ " on " ++
- atom_to_list(NodeName),
-
- set_win(gs:create(window, winroot(), [{title, Name}, %%{bg, red},
- {x, 250}, {y, 100},
- {width, W}, {bg, win_col()},
- {height, H+?BUTTAREA_H}])),
- %% standard buttons
- mk_std_butts(win(), W),
- set_canvas(gs:create(canvas, win(),[{x,0}, {y,?BUTTAREA_H},
- {width, W}, {height, H},
- {bg, bg()},
- {buttonpress, true}])),
-
- set_old_win_size(width, gs:read(win(), width)),
- set_old_win_size(height, gs:read(win(), height)),
-
-%% gs:config(win(), {map, true}), %Make win visible
- ok.
-
-
-nice_line_coords(W, H) ->
- [{0,H-10}, {W,H-10}].
-
-%%------------------------------
-%% Button stuff
-
-mk_butt_area(Win, W) ->
- H = ?BUTTAREA_H,
- F = gs:create(frame, Win,[{x,0}, {y,0}, %%{bg, frame_col()},
- {width,W}, {height,H}]),
- C = gs:create(canvas,F,[{x,0}, {y,0}, {width, W}, {height, H-9},
- {bg, bg()}]),
- L = gs:create(line,C,[{coords,nice_line_coords(W, H)}]),
-
- MB = gs:create(menubar, Win, []),
-
- FMB = gs:create(menubutton, MB, [{label, {text, "File"}}]),
- FM = gs:create(menu, FMB, []),
- gs:create(menuitem, FM, [{label, {text, ?CLOSETXT}}]),
-
- OMB = gs:create(menubutton, MB, [{label, {text, "Options"}}]),
- OM = gs:create(menu, OMB, []),
- gs:create(menuitem, OM, [{label, {text, ?REFRESHTXT}}]),
- Group = now(),
- gs:create(menuitem, OM, [{itemtype, separator}]),
- gs:create(menuitem, OM, [{label, {text, ?SUPVIEWTXT}}, {itemtype, radio},
- {group, Group}]),
- gs:create(menuitem, OM, [{label, {text, ?PROCVIEWTXT}}, {select, true},
- {group, Group}, {itemtype, radio}]),
-
- HMB = gs:create(menubutton, MB, [{label, {text, "Help"}}, {side, right}]),
- HM = gs:create(menu, HMB, []),
- gs:create(menuitem, HM, [{label, {text, ?HELPTXT}}]),
-
- {F, C, L}.
-
-mk_std_butts(Win, W) ->
- {F, C, L} = mk_butt_area(Win, W),
- set_bframe(F), set_bcanvas(C), set_bline(L),
-
- IButt = mk_mode_butt({text, "Info"}, {mode, info}, 10),
- mk_mode_butt({text, "Send"}, {mode, send}, 90),
- mk_mode_butt({text, "Trace"}, {mode, trace}, 170),
- mk_mode_butt({text, "Kill"}, {mode, kill}, 250),
-
- set_default_mode(IButt, info),
-
- true.
-
-select(Id) ->
- gs:config(Id, {bg, sel_col()}),
- set_selected(Id).
-
-deselect() ->
- gs:config(selected(), {bg, de_sel_col()}).
-
-mk_mode_butt(Label, Data, X) ->
- gs:create(button, bframe(), [{label, Label}, {x, X}, {y, 35},
- {data, Data}, {width, 70}, {height, 25}]).
-
-%%------------------------------------------------------------
-%% Graphical utilities
-
-mk_frame(P, X, Y, W, H, BG) ->
- gs:create(frame, P, [{x, X}, {y, Y}, {width, W}, {height, H}, {bg, BG}]).
-
-mk_butt(P, X, Y, W, H, Txt) ->
- gs:create(button, P, [{x, X}, {y, Y}, {height, H}, {width, W},
- {label, {text, Txt}}]).
-
-mk_butt(P, X, Y, Txt) ->
- mk_butt(P, X, Y, 70, 20, Txt).
-
-mk_label(P, X, Y, W, H, Txt, BG) ->
- gs:create(label, P, [{x, X}, {y, Y}, {height, H}, {width, W},
- {label, {text, Txt}}, {bg, BG}]).
-
-mk_entry(P, X, Y, W, H, Txt, BG) ->
- gs:create(entry, P, [{x, X}, {y, Y}, {height, H}, {width, W}, {text, Txt},
- {bg, BG}, {keypress, true}]).
-
-
-two_entries(Root, W, H, Name, LTxt1, LTxt2, StartTxt1, StartTxt2, BG) ->
- Win = gs:create(window, Root, [{title, Name}, %%{bg, red},
- %%{x, X}, {y, Y},
- {width, W}, {bg, BG},
- {height, H}]),
- F = mk_frame(Win, 0, 0, W, H, BG),
-
- mk_label(F, 10, 10, 30, 20, LTxt1, BG),
- mk_label(F, 10, 40, 30, 20, LTxt2, BG),
-
- E1 = mk_entry(F, 40, 10, 120, 20, StartTxt1, BG),
- E2 = mk_entry(F, 40, 40, 120, 20, StartTxt2, BG),
-
- Ok = mk_butt(F, 170, 10, "Ok"),
- Cn = mk_butt(F, 170, 40, "Cancel"),
- gs:config(Win, {map, true}),
-
- Ret = case catch two_entries_loop(E1, E2, Ok, Cn) of
- {P2, Msg} -> {P2, Msg};
- _Other ->
- false
- end,
- gs:destroy(Win),
- Ret.
-
-
-two_entries_loop(E1, E2, Ok, Cn) ->
- receive
- {gs, Ok, click, _, _} ->
- {gs:read(E1, text),
- gs:read(E2, text)};
- {gs, E1, keypress, _, ['Return'|_]} ->
- {gs:read(E1, text),
- gs:read(E2, text)};
- {gs, E2, keypress, _, ['Return'|_]} ->
- {gs:read(E1, text),
- gs:read(E2, text)};
- {gs, _, keypress, _, _} ->
- two_entries_loop(E1, E2, Ok, Cn);
- {gs, Cn, click, _, _} ->
- true
- end.
-
-%%--------------------------------------------------------------------
-%%
-%% Resizing routines.
-%%
-%% Resizing deals with a number of different interdependent
-%% sizes. Top size is the window size. From window size all other
-%% sizes are calculated, we call this the "leader" size. The
-%% canvas is usually the same size as the window, except for the
-%% row of buttons at the top of the windoww. The canvas is also
-%% displaced when the tree is smaller than the minimum window
-%% size.
-%%
-%%
-%% Window size - the size of the outer window. Note that
-%% provisions must be made for the button area at the top of the
-%% window, this is called WinAdj. this is the only item taht
-%% changes when the user manually resizes the window.
-%%
-%% Canvas size - The size of the canvas, should be equal to
-%% window size less the button area. Must be adjusted when the
-%% window has been manually resized. The canvas also has a
-%% scrollregion which must be maintained. Note that we could have
-%% used the canvas size as "leading" size, but this did not work
-%% since the canvas doesn't fill the complete window when the
-%% tree is smaller than the window.
-%%
-%% Tree size - The size of the tree. This may change whenever a
-%% new tree is delivered from the info routine.
-%%
-%% Dim - All these size adjustments are done in some dimension
-%% (width or height).
-%%
-%% Max, Min - The outmost window may not become larger than Max
-%% size or smaller than Min size when resized by the tree
-%% size. The user resizing is not restricted to these sizes.
-%%
-%% Scrollbars:
-%%
-%% Scrollbars are used whenever necessary, whenever the tree size
-%% is bigger than canvas size (in any dimension).
-%%
-%% Invariants:
-%%
-%% The three sizes are not varied at the same time. When the
-%% window is resized because of a new tree, then window and
-%% canvas must be updated. When the user has resized, then only
-%% the canvas must be changed (to fit in the window)
-%%
-%% Tree driven resize
-%%
-%% This occurs when the tree has been updated. The window may
-%% grow and shrink to fit the tree, but may not be smaller than
-%% Min and not bigger than Max (scrollbars will be used instead)
-%%
-
-tree_driven_resize(TWidth, THeight) ->
- gs:config(win(), {configure, false}),
- Width = TWidth+20,
- Height = scaley(THeight+1),
- put({width, tree}, Width),
- put({height, tree}, Height),
- adjust_win(width, Width),
- adjust_win(height, Height),
- fit_tree_to_win(width, Width),
- fit_tree_to_win(height, Height),
- check_scroll_region(Width, Height, gs:read(canvas(), scrollregion)),
- gs:config(win(), {configure, true}),
- ok.
-
-
-%% Will adjust the window size to the tree size (given the max and min
-%% restrictions.
-adjust_win(Dim, TreeSize) ->
- case get({Dim, user_resize}) of
- true -> ok;
- _ ->
- WinSize = gs:read(win(), Dim),%%get_dim(Dim, win()),
- case get_wanted_winsize(Dim, TreeSize) + winadj(Dim) of
- WinSize -> ok;
- NewSize ->
- %%set(Dim, win(), NewSize+winadj(Dim))
- set_old_win_size(Dim, NewSize),
- gs:config(win(), {Dim, NewSize})
- end
- end.
-
-get_wanted_winsize(Dim, Size) ->
- Max = maxsize(Dim), Min = minsize(Dim),
- if Size > Max -> Max;
- Size < Min -> Min;
- true -> Size
- end.
-
-set_old_win_size(Dim, Size) -> put({Dim, winsize}, Size).
-old_win_size(Dim) -> get({Dim, winsize}).
-
-
-%%--------------------------------------------------------------------
-%%
-%% user_driven_resize
-%%
-%% This is when the user drags the window to some size. This is
-%% basically the same as a tree resize, only this time the window
-%% itself must not be fiddled with. When the window has been
-%% resized this way then normal tree driven resize is not allow
-%% to alter the size in that dimension. User overrides.
-%%
-user_driven_resize(W, H) ->
- gs:config(win(), {configure, false}),
- check_user_resize(width, W),
- check_user_resize(height, H),
- check_scroll_region(get({width, tree}), get({height, tree}),
- gs:read(canvas(), scrollregion)),
- gs:config(win(), {configure, true}).
-
-check_user_resize(Dim, Size) ->
- case old_win_size(Dim) of
- Size -> false;
- _ ->
- put({Dim, user_resize}, true),
- set_old_win_size(Dim, Size),
- fit_tree_to_win(Dim, get({Dim, tree}))
- end.
-
-
-
-%%--------------------------------------------------------------------
-%%
-%% General resizing routines
-%%
-%% fit_tree_to_win - Will fit the canvas into a pre-sized window in
-%% one dimension.
-%%
-fit_tree_to_win(Dim, TreeSize) ->
- Size = gs:read(win(), Dim) - winadj(Dim),
- set_canvas_offset(Dim, Size, TreeSize),
- set_button_width(Dim, Size),
- if TreeSize > Size ->
- gs:config(canvas(), {trans_dim2vh(Dim), trans_dim2enable(Dim)});
- TreeSize < Size ->
- gs:config(canvas(), {trans_dim2vh(Dim), false});
- true ->
- gs:config(canvas(), {trans_dim2vh(Dim), false})
- end.
-
-
-%%------------------------------
-%% Set the canvas width and displacement in x.
-set_canvas_offset(height, Size, _) ->
- gs:config(canvas(), {height, Size});
-set_canvas_offset(width, Size, Size) ->
- gs:config(canvas(), [{x, 0}, {width, Size}]);
-set_canvas_offset(width, Size, TreeSize) when Size<TreeSize ->
- gs:config(canvas(), [{x, 0}, {width, Size}]);
-set_canvas_offset(width, Size, TreeSize) when Size>TreeSize->
- Val = trunc((Size-TreeSize)/2),
- gs:config(canvas(), [{x, Val}, {width, Size-Val}]).
-
-%%------------------------------
-%% Set the button area width
-set_button_width(height,_) -> ok;
-set_button_width(width, W) ->
- gs:config(bcanvas(), [{width, W}]),
- gs:config(bframe(), [{width, W}]),
- gs:config(bline(), [{coords, nice_line_coords(W, ?BUTTAREA_H)}]).
-
-
-%%------------------------------
-%% Update the scrollregion size if needed.
-check_scroll_region(W, H, {_, _, W, H}) -> ok;
-check_scroll_region(W, H, {_, _, _, _}) ->
- gs:config(canvas(), {scrollregion, {0, 0, W, H}}).
-
-
-%% Window sizing primitives
-winadj(width) -> 0;
-winadj(height) -> ?BUTTAREA_H.
-maxsize(width) -> ?MAXWIDTH;
-maxsize(height) -> ?MAXHEIGHT.
-minsize(width) -> ?MINWIDTH;
-minsize(height) -> ?MINHEIGHT.
-
-
-
-trans_dim2vh(width) -> hscroll;
-trans_dim2vh(height) -> vscroll.
-trans_dim2enable(width) -> bottom;
-trans_dim2enable(height) -> right.
-
-
-
-
-
-%%------------------------------------------------------------
-%% Global Window info
-
-winroot() -> get(winroot).
-win() -> get(win).
-canvas() -> get(canvas).
-bframe() -> get(bframe).
-bcanvas() -> get(bcanvas).
-bline() -> get(bline).
-set_winroot(X) -> put(winroot, X).
-set_win(X) -> put(win, X).
-set_canvas(X) -> put(canvas, X).
-set_bframe(X) -> put(bframe, X).
-set_bcanvas(X) -> put(bcanvas, X).
-set_bline(X) -> put(bline, X).
-
-sup_col() -> ?darkkhaki.
-%%work_col() -> ?orange.
-bg() -> ?palegoldenrod.
-line_col() -> ?peachpuff4. %% saddlebrown.darkgoldenrod
-f_line_col() -> ?royalblue. %% saddlebrown.darkgoldenrod
-sec_line_col() -> ?red.
-win_col() -> bg(). %%darkolivegreen.
-
-sel_col() -> ?darkgrey.
-de_sel_col() -> ?lightgrey.
-set_selected(Id)-> put(selected, Id).
-selected() -> get(selected).
-
-scaley(Y) -> 55*Y.
-radius() -> 10.
-
-destroy(undefined) -> true;
-destroy(L) when is_list(L) -> lists:foreach(fun(X) -> destroy(X) end , L);
-destroy(Win) -> gs:destroy(Win).
-
diff --git a/lib/appmon/src/appmon_dg.erl b/lib/appmon/src/appmon_dg.erl
deleted file mode 100644
index f53defa946..0000000000
--- a/lib/appmon/src/appmon_dg.erl
+++ /dev/null
@@ -1,205 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-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%
-%%------------------------------------------------------------
-%%
-%% Digraph handling for process view GUI. Feeble attempt at data
-%% separation. Provides functional interface to the data structures
-%% vdata and edata, v for vertex and e for edge.
-%%
-%%------------------------------------------------------------
--module(appmon_dg).
-
--include("appmon_dg.hrl").
-
-%% Exports for vertices
--export([get/3, get/2, set/4, av/3, add/4, del/2, visited/3]).
-
-%% Exports for edges
--export([eget/2, eget/3, eset/4, eadd/4, edel/2, ae/3]).
-
-%% Exports for convenience
--export([print_dg/1]).
-
-
-%%------------------------------------------------------------
-
-
-eget(all, DG) ->
- digraph:edges(DG).
-
-eget(data, DG, E) ->
- case digraph:edge(DG, E) of
- {_, _V1, _V2, Data} -> Data;
- _Other -> false
- end;
-eget(edge, DG, {V1, V2}) ->
- case digraph:edge(DG, {V1, V2}) of
- {E, W1, W2, ED} -> {E, W1, W2, ED};
- Other ->
- case digraph:edge(DG, {V2, V1}) of
- {E, W1, W2, ED} -> {E, W1, W2, ED};
- Other -> false
- end
- end;
-
-%% Weight in edge name
-eget(edge, DG, {V1, V2, Weight}) ->
- case digraph:edge(DG, {V1, V2, Weight}) of
- {E, W1, W2, ED} -> {E, W1, W2, ED};
- _Other -> false
- end;
-eget(in, DG, V) ->
- efilter(digraph:in_edges(DG, V)).
-
-efilter(Es) ->
- lists:filter(fun({_V1, _V2, primary}) -> true;
- (_E) -> false end,
- Es).
-
-eset(ref, DG, E, Ref) ->
- {E2, _V1, _V2, D} = eget(edge, DG, E),
- update_e(DG, E2, D#edata{ref=Ref});
-eset(line, DG, E, Line) ->
- {E2, _V1, _V2, D} = eget(edge, DG, E),
- update_e(DG, E2, D#edata{line=Line}).
-
-edel(DG, E) ->
- digraph:del_edge(DG, E).
-
-eadd(DG, E, D, Ref) ->
- case eget(edge, DG, E) of
- {_, _, _, ED} when is_record(ED, edata), ED#edata.ref == Ref ->
- known;
- {_, _, _, ED} when is_record(ED, edata), ED#edata.ref /= Ref ->
- update_e(DG, E, ED#edata{ref=Ref}),
- updated;
- _Other ->
- ae(DG, E, D)
- end.
-
-ae(DG, {V1, V2, Weight}, D) ->
- digraph:add_edge(DG, {V1, V2, Weight}, V1, V2, D).
-
-update_e(DG, {V1, V2, Weight}, D) ->
- digraph:del_edge(DG, {V1, V2, Weight}),
- digraph:add_edge(DG, {V1, V2, Weight}, V1, V2, D).
-
-%% Filter destination vertex from a list of edges
-vfilter(Vs) ->
- lists:map(fun({_V1, V2, _Weight}) -> V2;
- ({_V1, V2}) -> V2
- end, Vs).
-
-get(all, DG) ->
- digraph:vertices(DG).
-
-get(data, DG, {V1, V2}) ->
- case digraph:edge(DG, {V1, V2}) of
- {_,_,_,Data} -> Data;
- _Other -> false
- end;
-get(data, DG, V) ->
- case digraph:vertex(DG, V) of
- {_,Data} -> Data;
- _Other -> false
- end;
-
-%% Return all children of vertex V (those which V has edges to)
-get(out, DG, V) ->
- vfilter(efilter(digraph:out_edges(DG, V)));
-get(in, DG, V) ->
- digraph:in_neighbours(DG, V);
-get(edges, DG, V) ->
- digraph:edges(DG, V);
-get(w, DG, V) ->
- Data = get(data, DG, V),
- Data#vdata.width;
-get(x, DG, V) ->
- Data = get(data, DG, V),
- Data#vdata.x.
-
-set(type, DG, V, Type) ->
- D = get(data, DG, V),
- av(DG, V, D#vdata{type=Type});
-
-set(ref, DG, V, Ref) ->
- D = get(data, DG, V),
- av(DG, V, D#vdata{ref=Ref});
-
-set(y, DG, V, Y) ->
- D = get(data, DG, V),
- av(DG, V, D#vdata{y=Y});
-
-set(data, DG, V, D) when is_record(D, vdata)->
- av(DG, V, D);
-
-set(x, DG, V, X) ->
- D = get(data, DG, V),
- if D#vdata.x /= X ->
- av(DG, V, D#vdata{x=X});
- true -> true
- end.
-
-visited(DG, {V1, V2}, Ref) -> % for edge
- D = eget(data, DG, {V1, V2}),
- if is_record(D, edata), D#edata.ref == Ref -> true;
- true -> false
- end;
-visited(DG, V, Ref) ->
- D = get(data, DG, V),
- if is_record(D, vdata), D#vdata.ref == Ref -> true;
- true -> false
- end.
-
-add(DG, V, D, Ref) ->
- case get(data, DG, V) of
- D2 when is_record(D2, vdata), D2#vdata.ref==Ref ->
- io:format("Ooops in ~p:add vertex~n", [?MODULE]),
- known;
- D2 when is_record(D2, vdata) ->
- %%io:format("~p touch vertex ~p~n", [self(), V]),
- set(ref, DG, V, Ref),
- set(type, DG, V, D#vdata.type),
- save_coords(DG, V),
- updated;
- _Other ->
- av(DG, V, D), added
- end.
-
-save_coords(DG, V) ->
- D = get(data, DG, V),
- D2 = D#vdata{origx=D#vdata.x, origy=D#vdata.y},
- av(DG, V, D2).
-
-del(DG, V) ->
- digraph:del_vertex(DG, V).
-
-
-av(DG, V, D) ->
- digraph:add_vertex(DG, V, D).
-
-print_dg(DG) ->
- io:format("Vertices:~n", []),
- lists:foreach(fun(V) -> io:format(" ~p ~p~n",
- [V, get(data, DG, V)]) end,
- get(all, DG)),
- io:format("Edges:~n", []),
- lists:foreach(fun(V) -> io:format(" ~p ~p~n",
- [V, eget(edge, DG, V)]) end,
- eget(all, DG)),
- true.
diff --git a/lib/appmon/src/appmon_dg.hrl b/lib/appmon/src/appmon_dg.hrl
deleted file mode 100644
index c3485cf1fd..0000000000
--- a/lib/appmon/src/appmon_dg.hrl
+++ /dev/null
@@ -1,45 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-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%
-
-
-
-%%
-%% The dg package record definitions
-%%
-%% This is the declarations of the datastructures used for the
-%% application monitoring software. All fields are reserved for the
-%% implementation except those stated otherwise
-%%
-
--record(vdata, {ref, %
- type, %
- x, %
- origx=-1, %
- y, %
- origy=-1, %
- txt="", % Set by user
- width=0, % Set by user
- sym_obj=undefined, %
- txt_obj}). %
-
-
-
--record(edata, {ref, %
- line, %
- weight}). %
-
diff --git a/lib/appmon/src/appmon_lb.erl b/lib/appmon/src/appmon_lb.erl
deleted file mode 100644
index 3ab6ce58e6..0000000000
--- a/lib/appmon/src/appmon_lb.erl
+++ /dev/null
@@ -1,696 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2012. 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%
-
-%%% Due to the fact that the application buttons in the appmon window
-%%% gets too small to read when the number of applications increases,
-%%% this listbox window has been created.
-%%% Because of the limitations of GS a listbox was chosen to keep
-%%% the nodes and applications. When it's possible to scroll a frame I
-%%% think one should put in scrollbars in the appmon main window.
-%%% The listbox solution is too slow with lots of applications.
-%%%
-%%% In the listbox the nodes are shown with their applications beneith.
-%%% By double clicking on an application name, or a single click and
-%%% then pressing the load button, its application window is started.
-
--module(appmon_lb).
--compile([{nowarn_deprecated_function,{gs,button,3}},
- {nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,listbox,3}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,start,0}},
- {nowarn_deprecated_function,{gs,window,3}}]).
-
--export ([
- start/1,
- stop/1,
- add_node/2,
- remove_node/2,
- add_apps/3,
- remove_app/3,
- open_win/2,
- update_status/3
- ]).
-
--export ([init/1]).
-
--define (LB_W, 200). % List box width
--define (LB_H, 400). % List box height
--define (BUTT_W, 100).
--define (WIN_W, ?LB_W + ?BUTT_W + 25). % Window width
--define (WIN_H, ?LB_H + 20). % Window height
-
-
-%%% #node{}
-%%%
-%%% The record 'node' contains the name of the node, its status and
-%%% the applications running on that node.
-%%%
-%%% node == atom ()
-%%% status == alive || dead
-%%% apps == [#app{}]
-%%%
-
--record (node, {node, %% Name of the node
- status = alive,
- apps = []}).
-
-%%% #app{}
-%%%
-%%% The record 'app' contains the name of the application and its pid
-%%%
-%%% app == atom ()
-%%% pid == pid ()
-%%%
-
--record (app, {app,
- pid}).
-
-
-%%% #win{}
-%%%
-%%% The record 'win' contains the pid of the listbox window,
-%%% its x and y position, its width and height.
-%%%
-%%% pid == win_closed || pid ()
-%%% x == integer ()
-%%% y == integer ()
-%%% width == integer ()
-%%% height == integer ()
-%%%
-
--record (win, {pid = win_closed,
- x = 50,
- y = 50,
- width = ?WIN_W,
- height = ?WIN_H}).
-
-
-
-%%% Every function in the interface is called with the pid
-%%% of this recieve loop, called 'LbPid'.
-%%%
-
-
-%%% start /1
-%%%
-%%% start returns the pid of the spawned receive loop or
-%%% it will call exit/2 after a timeout.
-%%%
-%%% Pre:
-%%% CallingPid == pid ()
-%%%
-%%% Def:
-%%% pid () || exit/2
-%%%
-
-start (CallingPid) ->
- PidInit = spawn (?MODULE, init, [CallingPid]),
-
- %% Wait for a initialization completion message from
- %% the spawned process before returning its Pid.
-
- receive
- {initialization_complete, PidInit} ->
- PidInit
-
- %% (Conditional) Failure to start within the time limit
- %% will result in termination (Timeout may be infinite).
-
- after
- 60000 ->
- exit (PidInit, kill),
- exit ({startup_timeout, ?MODULE})
- end.
-
-
-
-%%% stop /1
-%%%
-%%% stop exits the receive loop
-%%%
-%%% Post:
-%%% exiting the receive loop
-%%%
-
-stop (LbPid) ->
- call (LbPid, stop).
-
-
-
-%%% add_node /2
-%%%
-%%% add_node adds the given node to the DB list.
-%%%
-%%% Pre:
-%%% Node == atom ()
-%%%
-%%% Post:
-%%% Node is added to the DB list
-%%%
-
-add_node (LbPid, Node) ->
- call (LbPid, {add_node, Node}).
-
-
-
-%%% remove_node /2
-%%%
-%%% remove_node removes the given node from the DB list.
-%%%
-%%% Pre:
-%%% Node == atom ()
-%%%
-%%% Post:
-%%% Node is removed from the DB list
-%%%
-
-remove_node (LbPid, Node) ->
- call (LbPid, {remove_node, Node}).
-
-
-
-%%% add_apps /3
-%%%
-%%% add_apps add the given applications to the given
-%%% node in the DB list.
-%%%
-%%% Pre:
-%%% Apps == [App]
-%%% App == {Name, Pid}
-%%% Name == atom ()
-%%% Pid == pid ()
-%%% Node == atom ()
-%%%
-%%% Post:
-%%% Node#node{apps = Apps}
-%%%
-
-add_apps (LbPid, Apps, Node) ->
- call (LbPid, {add_apps, Apps, Node}).
-
-
-
-%%% remove_app /3
-%%%
-%%% remove_app remove the given application from the
-%%% given node in the DB list.
-%%%
-%%% Pre:
-%%% App == atom ()
-%%% Node == atom ()
-%%%
-%%% Def:
-%%% Node#node{apps = OldApps - App}
-%%%
-
-remove_app (LbPid, App, Node) ->
- call (LbPid, {remove_app, App, Node}).
-
-
-
-%%% open_win /3
-%%%
-%%% open_win opens the listbox window with the given nodes
-%%% and their applications.
-%%%
-%%% Pre:
-%%% Nodes_apps == [{Node, Status, Apps}]
-%%% Node == atom ()
-%%% Status == alive || dead
-%%% Apps == [App]
-%%% App == {AppName, AppPid}
-%%% AppName == atom ()
-%%% AppPid == pid ()
-%%%
-%%% Post:
-%%% Window with listbox
-%%%
-
-open_win (LbPid, Nodes_apps) ->
- call (LbPid, {open_win, Nodes_apps}).
-
-
-
-%%% update_status /3
-%%%
-%%% update_status changes the status for the given node.
-%%%
-%%% Pre:
-%%% Node == atom ()
-%%% Status == alive || dead
-%%%
-%%% Def:
-%%% Node#node{status = Status}
-%%%
-
-update_status (LbPid, Node, Status) ->
- call (LbPid, {update_status, Node, Status}).
-
-
-
-%%% call /2
-%%%
-%%% call sends the given action to the listbox receive loop.
-%%%
-%%% Pre:
-%%% Action == atom () || tuple ()
-%%%
-
-call (LbPid, Action) ->
- LbPid ! Action.
-
-
-
-%%% init /1
-%%%
-
-init (CallingPid) ->
- CallingPid ! {initialization_complete, self ()},
- loop (#win{}, []).
-
-
-
-%%% loop /2
-%%%
-%%% loop is the recive loop for the listbox window process.
-%%%
-%%% Pre:
-%%% Win == #win{}
-%%% Data == [#node{}]
-%%%
-
-loop (Win, Data) ->
- receive
- {add_node, Node} ->
- NewData = add_node_1 (Node, Data),
- update (NewData, Win#win.pid),
- loop (Win, NewData);
-
- {remove_node, Node} ->
- NewData = dead_node (Node, Data),
- update (NewData, Win#win.pid),
- loop (Win, NewData);
-
- {add_apps, Apps, Node} ->
- NewData = add_apps_1 (Apps, Node, Data),
- update (NewData, Win#win.pid),
- loop (Win, NewData);
-
- {remove_app, App, Node} ->
- NewData = remove_app_1 (App, Node, Data),
- update (NewData, Win#win.pid),
- loop (Win, NewData);
-
- {open_win, Nodes_apps} ->
- NewData = parse_data ([], Nodes_apps),
- NewWin = Win#win{pid = init_win ({Win#win.x, Win#win.y})},
- update (NewData, NewWin#win.pid),
- loop (NewWin, NewData);
-
- {update_status, Node, Status} ->
- NewData = update_status_1 (Node, Status, Data),
- update (NewData, Win#win.pid),
- loop (Win, NewData);
-
- stop ->
- true;
-
-
- {gs, _Id, destroy, _D, _Arg} ->
- bye;
-
- {gs, _Id, configure, _D, [W, H | _]} ->
- NewWin = configure (Win#win.pid, W, H),
- loop (NewWin, Data);
-
- {gs, lb, doubleclick, _, _Txt} ->
- load_app (gs:read (lb, selection), Data),
- loop (Win, Data);
-
- {gs, lb, click, _, _Txt} ->
- loop (Win, Data);
-
- {gs, close, click, _D, _Arg} ->
- case Win#win.pid of
- win_closed ->
- true;
-
- _opened ->
- gs:destroy (Win#win.pid)
- end,
- loop (#win{}, Data);
-
- {gs, load, click, _D, _Txt} ->
- load_app (gs:read (lb, selection), Data),
- loop (Win, Data);
-
- {gs, clear, click, _D, _Txt} ->
- gs:config (lb, {selection, clear}),
- loop (Win, Data);
-
-
- _ ->
- loop (Win, Data)
- end.
-
-
-
-%%% init_win /1
-%%%
-
-init_win ({X, Y}) ->
- GS = gs:start (),
-
- Win = gs:window (win, GS, [{x, X},
- {y, Y},
- {width, ?WIN_W},
- {height, ?WIN_H},
- {title,"Appmon: nodes and applications"},
- {configure, true}]),
-
- gs:listbox (lb, Win, [{x, 5},
- {y, 10},
- {width, ?LB_W},
- {height, ?LB_H},
- {vscroll, right},
- {hscroll, bottom},
- {selectmode, single},
- {click, true},
- {doubleclick, true}]),
-
- gs:button (load, Win, [{x, ?WIN_W - ?BUTT_W - 10},
- {y, ?WIN_H - 120},
- {width, ?BUTT_W},
- {label, {text, "Load"}}]),
-
- gs:button (clear, Win, [{x, ?WIN_W - ?BUTT_W - 10},
- {y, ?WIN_H - 80},
- {width, ?BUTT_W},
- {label, {text, "Clear"}}]),
-
- gs:button (close, Win, [{x, ?WIN_W - ?BUTT_W - 10},
- {y, ?WIN_H - 40},
- {width, ?BUTT_W},
- {label, {text, "Close"}}]),
-
- gs:config (Win, {map, true}),
- Win.
-
-
-
-%%% add_node_1 /2
-%%%
-%%% add_node adds the given node in the given window
-%%% with its appications in a listbox.
-%%%
-
-add_node_1 (Node, []) ->
- [new_node (Node)];
-
-add_node_1 (Node, [H | T]) ->
- T1 = lists:keysort (#node.node, [new_node (Node) | T]),
- [H | T1].
-
-
-
-%%% dead_node /2
-%%%
-%%% dead_node returns a list with the given node's
-%%% status changed to dead.
-%%%
-
-dead_node (Node, Data) ->
- case lists:keysearch (Node, #node.node, Data) of
- {value, Node_rec} ->
- L = Node_rec#node.apps,
- lists:keyreplace (Node, #node.node,
- Data, new_node (Node, dead, L));
-
- _false ->
- Data
- end.
-
-
-
-
-
-%%% add_apps_1 /3
-%%%
-%%% add_apps_1 returns a list with the given application
-%%% into the old list inserted.
-%%%
-
-add_apps_1 (Apps, Node, Data) ->
- case lists:keysearch (Node, #node.node, Data) of
- {value, _Node_rec} ->
- NewApps = parse_apps (Apps, []),
- lists:keyreplace (Node, #node.node,
- Data, new_node (Node, NewApps));
-
- _false ->
- Data
- end.
-
-
-
-%%% remove_app_1 /3
-%%%
-%%% remove_app_1 returns a list with the given application
-%%% removed from the old list.
-%%%
-
-remove_app_1 (App, Node, Data) ->
-
- case lists:keysearch (Node, #node.node, Data) of
- {value, Node_rec} ->
- L = Node_rec#node.apps,
- L2 = lists:keydelete (App, #app.app, L),
- lists:keyreplace(Node, #node.node, Data, new_node(Node,L2));
-
- _false ->
- Data
- end.
-
-
-
-%%% configure /3
-%%%
-%%% configure returns a win record after the window has been
-%%% configured.
-%%%
-
-configure (WPid, W, H) ->
- X = gs:read (WPid, x),
- Y = gs:read (WPid, y),
-
- gs:config (lb, [{width, W - ?BUTT_W - 25}, {height, H - 20}]),
- gs:config (load, [{x, W - ?BUTT_W - 10}, {y, H - 120}]),
- gs:config (clear, [{x, W - ?BUTT_W - 10}, {y, H - 80}]),
- gs:config (close, [{x, W - ?BUTT_W - 10}, {y, H - 40}]),
-
- #win{pid = WPid, x = X, y = Y, width = W, height = H}.
-
-
-
-
-
-%%% load_app /2
-%%%
-%%% load_app opens the application window by calling
-%%% the appmon_a module.
-%%%
-
-load_app ([], _Data) -> %% no application chosen
- ok;
-
-load_app ([Index], Data) ->
- App = gs:read (lb, {get, Index}),
-
- case string:substr (App, 1, 3) of
- " " ->
- AppName = list_to_atom (string:substr (App, 4)),
-
- case get_node (AppName, Index, Data) of
- no_node ->
- ok;
-
- NodeName ->
- appmon_a:start (NodeName, AppName)
- end;
-
- _ ->
- ok
- end.
-
-
-
-%%% update_status_1 /3
-%%%
-%%% update_status_1 returns a list with the given
-%%% node's status updated.
-%%%
-
-update_status_1 (Node, Status, Data) ->
- case lists:keysearch (Node, #node.node, Data) of
- {value, Node_rec} ->
- lists:keyreplace (Node,
- #node.node,
- Data,
- new_node(Node,Status,Node_rec#node.apps));
-
- _not_found ->
- Data
- end.
-
-
-
-%%% update /2
-%%%
-%%% update updates the listbox with new data.
-%%%
-
-update (_Data, win_closed) ->
- true;
-
-update (Data, _Win) ->
- gs:config (lb, clear),
- lb_print (Data).
-
-
-
-%%% lb_print /1
-%%%
-%%% lb_print prints the list into the listbox.
-%%%
-
-lb_print ([]) ->
- ok;
-
-lb_print ([#node{node = Node, status = Status, apps = Apps} | T]) ->
- Str = io_lib:format ("~p (~p)", [Node, Status]),
- gs:config (lb, {add, Str}),
-
- case Status of
- alive ->
- lb_print_apps (Apps);
-
- _dead ->
- gs:config (lb, {add, ""}),
- ok
- end,
-
- lb_print (T).
-
-
-
-%%% lb_print_apps /1
-%%%
-%%% lb_print_apps prints the applications into the listbox.
-%%%
-
-lb_print_apps ([]) ->
- ok;
-
-lb_print_apps ([#app{app = App} | T]) ->
- Str = io_lib:format (" ~p", [App]),
- gs:config (lb, {add, Str}),
- lb_print_apps (T).
-
-
-
-%%% new_node /1, 2, 3
-%%%
-%%% new_node returna a new node record constructed
-%%% with the given data
-%%%
-
-new_node (Node) ->
- #node{node = Node}.
-
-new_node (Node, Apps) ->
- #node{node = Node, apps = Apps}.
-
-new_node (Node, Status, Apps) ->
- #node{node = Node, status = Status, apps = Apps}.
-
-
-
-%%% new_app /2
-%%%
-%%% new_app returns a new application record
-%%% constructed with the given data.
-%%%
-
-new_app (App, Pid) ->
- #app{app = App, pid = Pid}.
-
-
-
-%%% parse_apps /2
-%%%
-%%% parse_apps returns a list of application records.
-%%%
-
-parse_apps ([], [H | T]) ->
- [H | lists:keysort (#app.app, T)];
-
-parse_apps ([App | T], L) ->
- Pid = element (1, App),
- Name = element (2, App),
- parse_apps (T, [new_app (Name, Pid) | L]).
-
-
-
-%%% get_node /3
-%%%
-%%% get_node returns the node from the given list
-%%% or else no_node if it doesn't exists.
-%%%
-
-get_node (_App, _Index, []) ->
- no_node;
-
-get_node (App, Index, [Node | T]) ->
- Length = length (Node#node.apps) + 1,
-
- case Length < Index of
- true ->
- get_node (App, Index - Length, T);
-
- false ->
- Node#node.node
- end.
-
-
-
-%%% parse_data /2
-%%%
-%%% parse_data returns a list with node records.
-%%%
-
-parse_data (Data, []) ->
- Data;
-
-parse_data (Data, [{Node, Status, Apps} | T]) ->
- Apps_1 = parse_apps (Apps, []),
- parse_data ([new_node (Node, Status, Apps_1) | Data], T).
-
-
-
diff --git a/lib/appmon/src/appmon_place.erl b/lib/appmon/src/appmon_place.erl
deleted file mode 100644
index fe1e909d7c..0000000000
--- a/lib/appmon/src/appmon_place.erl
+++ /dev/null
@@ -1,192 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2010. 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%
-%%------------------------------------------------------------
-%%
-%% Places a Digraph in a tree-like manner. The vertices in the digraph
-%% is updated with x and y positions. The operation is not atomic. The
-%% digraph may be cyclic but edges must then have been labeled primary
-%% or secondary and the set of primary links must make up a non-cyclic
-%% graph (a tree).
-%%
-%%
-%% IMPLEMENTATION DETAIL
-%% ---------------------
-%%
-%% The placement algorithm is straightforward, place the
-%% nodes in the vertical plane (y-plane) and then place
-%% nodes in the horisontal plane (x-plane).
-%%
-%% First all nodes are placed in the y (vertical) plane
-%% by a standard traversing of the tree. We then place
-%% the tree in the x (horisontal) plane. Each node is
-%% placed in the middle of its children as far to the
-%% left as possible, preferably at the left margin. Two
-%% things can make a node not be placed at the left
-%% margin and that is the case when a previous node has
-%% been placed at the same vertical level as the node we
-%% are trying to place (thus forcing a placement further
-%% to the right), and the second case is when the middle
-%% of the subtree of the node is not at the left margin
-%% (which it only is when the subtree is empty). The
-%% algorithm obviously depends on keeping track of the
-%% rightmost positions at all depths, and this
-%% information is also usefull when calculating the width
-%% of the tree.
-%%
-%%
-%%
-%%------------------------------------------------------------
-
-
-
--module(appmon_place).
-
--export([place/2]).
-
--include("appmon_dg.hrl").
-
-
--import(lists, [foreach/2, foldl/3]).
-
-
-place(DG, Root) ->
- case appmon_dg:get(data, DG, Root) of
- false -> [0];
- _Other ->
- placey(DG, Root, 1),
- placex(DG, Root, [])
- end.
-
-
-%%------------------------------------------------------------
-%%
-%%
-%% Placing a graph in y plane
-%% --------------------------
-%%
-%% Place nodes in the graph in the y plane rather stupidly
-%%
-
-placey(DG, V, Y) ->
- appmon_dg:set(y, DG, V, Y),
- Y1 = Y+1,
- foreach(fun(C) -> placey(DG, C, Y1) end, appmon_dg:get(out, DG, V)).
-
-
-
-
-%%------------------------------------------------------------
-%%
-%%
-%% Place a tree in the x plane
-%% ---------------------------
-%%
-%% Place nodes in the tree in the x plane. The goal of the x
-%% placement is to place all nodes as far to the left as possible
-%% while maintaining a nice tree shape.
-%%
-%% To place a node we must first place its children, the
-%% intention is to place the current node in the middle and above
-%% its children. The calc_mid function will place the node in the
-%% middle of its children. If the node should be placed further
-%% to the right than the middle of its children, then its
-%% children are moved DeltaX positions to be balanced under the
-%% node. Thus at the end the node and its children form a nice
-%% looking tree.
-%%
-%% The function also maintains the 'rightmost x on each level'
-%% list LastX by putting its own position on top of the list
-%%
-%%
-
-placex(DG, V, LastX) ->
- Ch = appmon_dg:get(out, DG, V),
- ChLX = foldl(fun(C, Accu) -> placex(DG, C, Accu) end,
- tll(LastX),
- Ch),
-
- Width = appmon_dg:get(w, DG, V),
- MyX = calc_mid(DG, Width, Ch),
- DeltaX = calc_delta(MyX, hdd(LastX)+spacex()),
-
- appmon_dg:set(x, DG, V, MyX),
- move(DG, V, [MyX+Width | ChLX], DeltaX).
-
-
-%%------------------------------------------------------------
-%%
-%%
-%% Move a subtree DeltaX positions to the right
-%% --------------------------------------------
-%%
-%% Used when moving children to balance under an already placed
-%% parent. Note that the correct LastX depends on the ordering of
-%% the children which must be the same as when the children were
-%% first placed. It must be ensured that hdd(NewLastX) is the
-%% same as hdd(NewLastX)+DeltaX. If the order of children is
-%% preserved then so is hdd(LastX). Another solution would be to
-%% set hdd(LastX) from the parent
-%%
-%% Note the two base clauses, one for the no-children case and
-%% one optimisation clause (unneccessary perhaps) for DeltaX==0
-%%
-
-move(_DG, _L, LastX, 0) -> LastX;
-move(DG, V, LastX, DeltaX) -> move2(DG, V, LastX, DeltaX).
-
-move2(DG, V, LastX, DeltaX) ->
- NewX = appmon_dg:get(x, DG, V)+DeltaX,
- appmon_dg:set(x, DG, V, NewX),
- ChLX = foldl(fun(C, LX) -> move2(DG, C, LX, DeltaX) end,
- tll(LastX),
- appmon_dg:get(out, DG, V)),
- [erlang:max(NewX+appmon_dg:get(w, DG, V), hdd(LastX)) | ChLX].
-
-
-%%------------------------------------------------------------
-%%
-%%
-%% Calculate the middle position of the children
-%% ---------------------------------------------
-%%
-%% Calculates the mid x position for a list of children. This
-%% position is later compared to the position dictated by LastX
-%% in calc_delta.
-
-calc_mid(_DG, _Width, []) -> 0;
-calc_mid(DG, Width, ChList) ->
- LeftMostX = appmon_dg:get(x, DG, hd(ChList)),
- Z2 = lists:last(ChList),
- RightMostX = appmon_dg:get(x, DG, Z2)+appmon_dg:get(w, DG, Z2),
- trunc((LeftMostX+RightMostX)/2)-trunc(Width/2).
-
-calc_delta(Mid, Right) ->
- if Right>Mid -> Right-Mid;
- true -> 0
- end.
-
-
-
-%% Special head and tail
-%% Handles empty list in a non-standard way
-tll([]) -> [];
-tll([_|T]) -> T.
-hdd([]) -> 0;
-hdd([H|_]) -> H.
-
-spacex() -> 20. % Should be macro??
diff --git a/lib/appmon/src/appmon_txt.erl b/lib/appmon/src/appmon_txt.erl
deleted file mode 100644
index 056265af90..0000000000
--- a/lib/appmon/src/appmon_txt.erl
+++ /dev/null
@@ -1,307 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2012. 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%
-%%------------------------------------------------------------
-%%
-%% Simple text viewer
-%%
-%%------------------------------------------------------------
-
--module(appmon_txt).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,create,3}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,start,1}}]).
--export([start/0, start/1, print/1, fprint/1]).
-
-%% gen_server stuff
--export([init/1, handle_call/3, handle_cast/2, handle_info/2,
- terminate/2]).
-
--define(LOADTXT, "Load file").
--define(SAVETXT, "Save file").
--define(SAVEASTXT, "Save as").
--define(CLOSETXT, "Close").
--define(HELPTXT, "Help").
-
-%%------------------------------------------------------------
-%%
-%% start/0 starts an open text viewer that can be filled with
-%% whatever.
-%%
-%%------------------------------------------------------------
-start() ->
- start([]).
-
-%%------------------------------------------------------------
-%%
-%% start(ListOfOptions) starts an open text viewer with options
-%%
-%% Options can be
-%% {file, FileName} - insert contents of file
-%% locked - the text cannot be edited
-%% {text, Text} - insert text at startup
-%%
-%%------------------------------------------------------------
-start(Opts) ->
- gen_server:start_link({local, ?MODULE}, ?MODULE, Opts, []).
-
-%% Start a text viewer if necessary
-print(Txt) ->
- catch start(),
- gen_server:call(?MODULE, {add_txt, Txt}),
- ok.
-
-fprint(File) ->
- catch start(),
- gen_server:call(?MODULE, {add_file, File}),
- ok.
-
-
-%%------------------------------------------------------------
-%% gen server admin
-
-init(Opts) ->
- process_flag(trap_exit, true),
- setup_base_win(),
- default_status(),
- setup_opts(Opts),
- {ok, []}.
-
-terminate(_Reason, _State) ->
- ok.
-
-%%------------------------------------------------------------
-%% gen server stuff
-handle_call({add_txt, Txt}, _From, State) ->
- do_insert_text(Txt),
- scroll_to_last_line(),
- {reply, ok, State};
-handle_call({add_file, FileName}, _From, State) ->
- do_load_file(FileName),
- {reply, ok, State};
-handle_call(_Request, _From, State) ->
- {reply, ok, State}.
-handle_cast(_Request, State) ->
- {noreply, State}.
-handle_info({gs, _, click, _, [?CLOSETXT|_]}, State) ->
- {stop, normal, State};
-handle_info({gs, _, click, _, [?LOADTXT|_]}, State) ->
- ui_load(),
- {noreply, State};
-handle_info({gs, _, configure, _, [W, H | _]}, State) ->
- resize(W, H),
- {noreply, State};
-
-handle_info({gs, _, destroy, _, _}, State) ->
- {stop, normal, State};
-handle_info(Request, State) ->
- io:format("~p got info: ~p~n", [self(), Request]),
- print_status("Not implemented"),
- {noreply, State}.
-
-
-%%------------------------------------------------------------
-%% Handle options
-
-setup_opts([Opt|Opts]) ->
- setup_opt(Opt),
- setup_opts(Opts);
-setup_opts([]) -> ok.
-
-setup_opt(Opt) ->
- case Opt of
- {file, FileName} ->
- do_load_file(FileName);
- locked ->
- do_lock();
- {text, Text} ->
- do_insert_text(Text);
- _Other ->
- ok
- end.
-
-do_load_file(FileName) ->
- case catch i_load_file(FileName) of
- ok ->
- default_status();
- _Other ->
- print_status(lists:append(["File not found: ", FileName]))
- end.
-
-i_load_file(FileName) ->
- {ok, Bin} = file:read_file(FileName),
- L = binary_to_list(Bin),
- i_do_clear(),
- do_insert_text(L),
- ok.
-
-ui_load() ->
- Title = "Load file",
- Files = get_file_list(),
- case catch ui_list_dialog(Title, "File: ", Files) of
- {ok, FileName} ->
- do_load_file(FileName);
- _Other ->
- print_status("Load cancelled")
- end.
-
-get_file_list() ->
- case file:list_dir(".") of
- {ok, FileList} -> lists:sort(FileList);
- _Other -> []
- end.
-
-do_insert_text(Text) ->
- gs:config(editor(), {insert, {'end', Text}}),
- ok.
-
-%% Scrolls editor to show the last rows
-scroll_to_last_line() ->
- H = gs:read(editor(), size),
- R = gs:read(editor(), height),
- TopRow = H-R/15,
- if TopRow > 0 -> gs:config(editor(), {vscrollpos, TopRow});
- true -> gs:config(editor(), {vscrollpos, 0})
- end,
- ok.
-
-do_lock() ->
- gs:config(editor(), {enable, false}).
-
-i_do_clear() ->
- gs:config(editor(), clear).
-
-%%------------------------------------------------------------
-%% Graphical stuff
-
-label_h() -> 20.
-menu_h() -> 29.
-
-setup_base_win() ->
- H = 400, W=580,
- LabelHeight=label_h(), MenuHeight=menu_h(),
-
- F = gs:start([{kernel,true}]),
- set_winroot(F),
-
- Win = gs:create(window, F, [{width, W}, {height, H},
- {title,"APPMON: Process Information"}]),
-
- E = gs:create(editor, Win, [{x, 0}, {y, MenuHeight},
- {width, W},
- {height, H-MenuHeight-LabelHeight-1},
- {vscroll, right}]),
- set_editor(E),
-
- L = gs:create(label, Win, [{x, 0}, {y, H-LabelHeight},
- {height,LabelHeight }, {width, W},
- {align, w}]),
- set_status(L),
- print_status("Loading"),
-
- gs:config(Win, {map, true}),
-
- MB = gs:create(menubar, Win, []),
-
- FMB = gs:create(menubutton, MB, [{label, {text, "File"}}]),
- FM = gs:create(menu, FMB, []),
- gs:create(menuitem, FM, [{label, {text, ?CLOSETXT}}]),
-
- gs:config(Win, {configure, true}),
- ok.
-
-resize(W, H) ->
- gs:config(editor(), [{width, W}, {height, H-label_h()-menu_h()}]),
- gs:config(status(), [{y, H-label_h()}, {width, W}]),
- ok.
-
-%%------------------------------------------------------------
-%% ui_list_dialog(
-%%
-%% Traditional dialog with a list box and a selection field that
-%% is updated from the list box.
-%%
-%% Returns {ok, String} if successful and something else if not
-%%
-%% Title - the name of the window
-%% LeadText - the lead text on the selection field
-%% List - a list of items that will be displayed in the list box
-%%
-%%------------------------------------------------------------
-
-ui_list_dialog(Title, LeadText, TxtList) ->
- W = 200, H = 300,
-
- Win = gs:create(window, winroot(), [{title, Title},
- {width, W},{height, H}]),
- Ok = gs:create(button, Win, [{x, 10}, {y,10},
- {width, 50}, {height, 20},
- {label, {text, "Ok"}}]),
- Cn = gs:create(button, Win, [{x, 70}, {y,10},
- {width, 50}, {height, 20},
- {label, {text, "Cancel"}}]),
-
- gs:create(label, Win, [{x, 10}, {y, 50},
- {width, 60}, {height, 20},
- {label, {text, LeadText}}]),
- Box = gs:create(entry, Win, [{x, 10}, {y, 70},
- {width, 160}, {height, 20},
- {keypress, true}]),
- List = gs:create(listbox, Win, [{x, 10}, {y, 100}, {width, 180},
- {height, 190},
- {items, TxtList}, {vscroll, right},
- {hscroll, false}, {click, true},
- {doubleclick, true},
- {keypress, true}]),
- gs:config(Win, {map, true}),
-
- RetVal = ui_load_loop(Box, List, Ok, Cn),
-
- gs:destroy(Win),
-
- RetVal.
-
-ui_load_loop(Box, List, Ok, Cn) ->
- receive
- {gs, Box, keypress, _, ['Return'|_]} ->
- {ok, gs:read(Box, text)};
- {gs, Box, keypress, _, _} ->
- ui_load_loop(Box, List, Ok, Cn);
- {gs, Ok, click, _, _} ->
- {ok, gs:read(Box, text)};
- {gs, List, doubleclick, _, [_Idx, Txt|_]} ->
- {ok, Txt};
- {gs, List, click, _, [_Idx, Txt|_]} ->
- gs:config(Box, {text, Txt}),
- ui_load_loop(Box, List, Ok, Cn);
- _Other ->
- something_else
- end.
-
-%% The status row at the bottom of the window
-set_status(Id) -> put(status_row, Id).
-status() -> get(status_row).
-print_status(Msg) -> gs:config(get(status_row), {label, {text, Msg}}).
-default_status() -> print_status("Done").
-
-set_editor(X) -> put(editor, X).
-editor() -> get(editor).
-
-winroot() -> get(winroot).
-set_winroot(X) -> put(winroot, X).
diff --git a/lib/appmon/src/appmon_web.erl b/lib/appmon/src/appmon_web.erl
deleted file mode 100644
index 048f7fa165..0000000000
--- a/lib/appmon/src/appmon_web.erl
+++ /dev/null
@@ -1,1031 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2001-2011. 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%
-%%
-
-%%%---------------------------------------------------------------------
-%%% File : webappmon.erl
-%%% Author : Martin G. <[email protected]>
-%%% Purpose : Frontend to the webbased version of appmon.
-%%% Created : 24 Apr 2001 by Martin G. <[email protected]>
-%%%---------------------------------------------------------------------
-
--module(appmon_web).
-
-%% The functions that the user can call to interact with the genserver
--export([init/1,handle_call/3,handle_cast/2,handle_info/2]).
--export([terminate/2,code_change/3]).
-
--export([node_info/2,application_info/2,application_env/2]).
--export([proc_info/2,trace/2]).
--export([start/0,stop/0,start_link/0]).
-
-%% Export the function that returns the configuration data needed by
-%% webtool
--export([configData/0]).
-
--behaviour(gen_server).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Start the genserver %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-start_link()->
- gen_server:start_link({local,webappmon_server},appmon_web,[],[]).
-start()->
- gen_server:start({local,webappmon_server},appmon_web,[],[]).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Stop the genserver %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-stop()->
- gen_server:call(webappmon_server,stop,1000).
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Get the page that shows the nodes and the apps on the sel node %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-node_info(Env,Input)->
- gen_server:call(webappmon_server,{node_data,Env,Input}).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Get the application process tree %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-application_info(Env,Input)->
- gen_server:call(webappmon_server,{app_data,Env,Input}).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Get the page that shows the data about the process %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-proc_info(Env,Input)->
- gen_server:call(webappmon_server,{proc_data,Env,Input}).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Get the spec on the app %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-application_env(Env,Input)->
- gen_server:call(webappmon_server,{app_env,Env,Input}).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Toggle the trace flag for the selected process %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-trace(Env,Input)->
- gen_server:call(webappmon_server,{trace,Env,Input}).
-
-configData()->
- {appmon,[{web_data,{"WebAppmon","/appmon/main_frame.html"}},
- {alias,{"/appmon",code:priv_dir(appmon)}},
- {alias,{erl_alias,"/erl",[appmon_web]}},
- {start,{child,{backend,{process_info,start_link,[]},
- permanent,100,worker,[process_info]}}},
- {start,{child,{{local,webappmon_server},
- {appmon_web,start_link,[]},
- permanent,100,worker,[appmon_web]}}}
- ]}.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% Callback functions for the genserver %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-init(_Arg)->
- {ok,[]}.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Create the different pages %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-handle_call({node_data,_Env,Input},_From,State)->
- {reply,app_and_node_sel_page(Input),State};
-
-handle_call({app_data,_Env,Input},_From,State)->
- {reply,process_tree_page(Input),State};
-
-handle_call({proc_data,_Env,Input},_From,State)->
- {reply,process_specifickation_page(Input),State};
-
-handle_call({app_env,_Env,Input},_From,State)->
- {reply,application_specifickation_page(Input),State};
-
-handle_call({trace,_Env,Input},_From,State)->
- {reply,toggle_trace(Input),State}.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Shutdown the genserver %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-terminate(_,_State)->
- ok.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Callback function currently not used ... %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-handle_cast(_,State)->
- {noreply,State}.
-
-handle_info(_,State)->
- {noreply,State}.
-
-code_change(_OldVsn,State,_Extra)->
- {ok,State}.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% %%
-%% Private functions to create the part of the sides that is common %%
-%% to all sides %%
-%% %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Create the Header for the page If we now the mimetype use that type%%
-%% otherwise use text %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-header() ->
- header("text/html").
-header(MimeType) ->
- "Content-type: " ++ MimeType ++ "\r\n\r\n".
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Create the Htmlheader sett the title of the side to nothing if %%
-%% we dont know the name of the side %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-html_header()->
- html_header("").
-
-html_header(Part) ->
- "<HTML BGCOLOR=\"#FFFFFF\">\n" ++
- "<HEAD>\n" ++
- "<TITLE>Appmon " ++ Part ++ "</TITLE>\n" ++
- "</HEAD>\n".
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Close the Html tag and if neccessay add some clean upp %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-html_end()->
- "</HTML>".
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% %%
-%% The functions that creates the whole pages by collecting %%
-%% the necessary data %%
-%% %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Returns the page where the user see's which nodes and apps that %%
-%% are availible for monitoring %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-app_and_node_sel_page(Input)->
- [header(),
- html_header(),
- node_body(httpd:parse_query(Input)),
- html_end()].
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Returns the process tree for the application whose name is %%
-%% the first value in the Inputs key/value list %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-process_tree_page(Input)->
- [header(),
- html_header(),
- application_javascript(httpd:parse_query(Input)),
- application_body(httpd:parse_query(Input)),
- html_end()].
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Send trace on or off to the process thats pid is the third arg of %%
-%% the inputs key/val list. Then it returns the process tree for the %%
-%% the application that is the first key/val pair of input %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-toggle_trace(Input)->
- send_trace(httpd:parse_query(Input)),
- [header(),
- html_header(),
- application_javascript(httpd:parse_query(Input)),
- application_body(httpd:parse_query(Input)),
- html_end()].
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Creates the page that shows all information about the process that %%
-%% that is the first arg of th input key/val pairs %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-process_specifickation_page(Input)->
- [header(),
- html_header(),
- process_body(httpd:parse_query(Input)),
- html_end()].
-
-application_specifickation_page(Input)->
- [header(),
- html_header(),
- application_env_body(httpd:parse_query(Input)),
- html_end()].
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% The Private functions that do the job %%
-%% To build the the page that shows the applications %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Build the body of the side that shows the node name and %%
-%% the application list %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-node_body([{"node",Node}|_Rest])->
- case process_info:is_node(Node) of
- {true,Controlled_node,Name} ->
- "<BODY BGCOLOR=\"#FFFFFF\">" ++
- node_selections_javascripts() ++
- node_selection(Controlled_node) ++
- node_title() ++
- application_tree(Controlled_node,Name) ++
- "</BODY>";
-
- {false,Server_node,Name} ->
- "<BODY BGCOLOR=\"#FFFFFF\">" ++
- node_selections_javascripts() ++
- node_selection(Server_node) ++
- node_title() ++
- application_tree(Server_node,Name) ++
- "</BODY>"
- end;
-
-node_body(_Whatever)->
- node_body([{atom_to_list(node),atom_to_list(node())}]).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Returns the javascript that sets a new node to monitor %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-node_selections_javascripts()->
- "<SCRIPT>
- function node_selected()
- {
- parent.frames.base_frames.location=\"../../appmon/start_info.html\"
- window.location =\"./node_info?node=\" + " ++
- "document.node_selection.nodes[document.node_selection.nodes.selectedIndex].value;
- }
- </SCRIPT>".
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Insert the html code that shows the combobox where the user can %%
-%% select another node to monitor %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-node_selection(Node)->
- " <FORM ACTION=\"./node_info\" NAME=node_selection>\n
- <TABLE WIDTH=\"100%\" BORDER=\"0\">\n
- <TR><TD ALIGN=\"center\">\n
- <SELECT NAME=nodes onChange=\"node_selected()\">\n" ++
- print_nodes(order_nodes(Node,process_info:get_nodes())) ++
- "</SELECT>\n
- </TD></TR>\n
- </TABLE>\n
- </FORM>".
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Add the node we are working with in the beginning of the list and %%
-%% remove it from other places so its always the first in the listbox %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-order_nodes(Node,Node_list)->
- [Node|lists:delete(Node,Node_list)].
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Take the list of nodes and make it to a list of options to the %%
-%% the combobox %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-print_nodes([])->
- [];
-print_nodes([Node|Rest])->
- "<OPTION value=\"" ++
- atom_to_list(Node) ++
- "\">" ++
- atom_to_list(Node) ++
- "\n" ++
- print_nodes(Rest).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Create the header of the node info page i.e. the name of the node %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-node_title()->
- " <TABLE WIDTH=\"100%\" BORDER=\"0\">
- <TR><TD ALIGN=\"center\"><FONT SIZE=5>Applications</FONT></TD></TR>
- </TABLE>\n".
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Build the body of the side that shows the node i.e the application %%
-%% list %%
-%% Node and Node_name are the same just different types %%
-%% Node are the atom Node_name the string of the node name %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-application_tree(Node,Node_name)->
- Fun=fun(Name)->
- Name_str =atom_to_list(Name),
- "<LI><A HREF=\"./application_info?name=" ++ Name_str ++
- "&mode=all&node=" ++ Node_name ++
- "\" TARGET=main><B>" ++ Name_str ++
- "</B></A>" ++ print_space(15-length(Name_str),[]) ++
- "<A HREF=\"./application_env?name=" ++ Name_str ++
- "&node=" ++ Node_name ++
- "\" TARGET=\"main\"><FONT SIZE=2>spec</FONT></A></LI>\n"
- end,
- "<UL>" ++
- lists:map(Fun, (process_info:get_applications(Node))) ++
- "</UL>" ++
- "<FORM Name=reload>" ++
- "<INPUT TYPE=\"button\" onClick=\"node_selected()\"
- VALUE=\"Reload\">\n" ++
- "</FORM>" ++
- "<!--<A HREF=\"../../appmon/application_help.html\" TARGET=main>Help</A>-->".
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Print spaces between the application name and the spec link %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-print_space(N,Space)when N >0 ->
- print_space(N-1,"&nbsp;" ++ Space);
-print_space(_N,Space)->
- Space.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% The Private functions that do the job %%
-%% To build the the page that shows process in an application %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%Generates the javascript that govern the look of the page that %%
-%%the processes of an application %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%Args is the list whit input args should be App Mode, Node
-application_javascript(Args)when length(Args)>=3 ->
- Vars=
- "<SCRIPT>
- var proc;
- var app=\"" ++ element(2,lists:nth(1,Args)) ++ "\";
- var node=\"" ++ element(2,lists:nth(3,Args)) ++ "\";",
- CommonFuncs=
- " function reload_bottom_frame()
- {parent.proc_data.location.href=\"/appmon/blank.html\";}
-
- function show_process_info()
- {
- if(proc.indexOf(\"#Port\")== -1)
- {
- if(proc.charAt(0)==\'<\')
- window.location=\"./proc_info?name=\" + proc + \"&node=\" + node
- else
- {
- start=proc.indexOf(\"<\");
- endpoint=proc.lastIndexOf(\">\");
- window.location=\"./proc_info?name=\" + proc.slice(start,endpoint+1) + \"&node=\" + node ;
- }
- }
- }
-
- function trace()
- {
- if(proc.charAt(0)==\'<\')
- window.location=\"./trace?name=\" + app + \"&mode=\" + get_mode() + \"&node=\" + node + \"&proc=\" + proc;
- else
- {
- start=proc.indexOf(\"<\");
- endpoint=proc.lastIndexOf(\">\");
- window.location=\"./trace?name=\" + app + \"&mode=\" + get_mode() + \"&node=\" + node + \"&proc=\" +
- proc.slice(start,endpoint+1) ;
- }
-
- }
-
- function reload_page()\n
- {
- window.location=\"./application_info?name=\" + app + \"&mode=\" + get_mode() + \"&node=\" + node ;
- }
- function get_mode()
- {
- for (i= 0; i < document.reload_form.mode.length; i++)
- {
- if (document.reload_form.mode[i].checked)
- return(document.reload_form.mode[i].value);
- }
- return(\"all\");
- }",
- Vars++CommonFuncs++"</SCRIPT>";
-application_javascript(_)->
- "<SCRIPT></SCRIPT>".
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Create the body i.e the process tree for the applications whose %%
-%% name is the second arg in the first tuple %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%args is the list [{_,Appname},{_,Mode},{_Node}]
-application_body(Args) when is_list(Args),length(Args) >= 3 ->
- App=element(2,lists:nth(1,Args)),
- Mode=element(2,lists:nth(2,Args)),
- Node=element(2,lists:nth(3,Args)),
- "<BODY BGCOLOR=\"FFFFFF\" onLoad=reload_bottom_frame() >"
- ++ mode_selection(Mode) ++
- selected_app_header(App,Node) ++ process_tree(App,Mode,Node)++
- "</BODY>";
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% If the pattern above ain't match then something is wrong %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-application_body(_Whatever)->
- "Please use the links to the left".
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Create the part of the process tree page side where the user can %%
-%% select the mode the view the tree in. %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-mode_selection(Mode)->
- "<FORM NAME=\"reload_form\">\n" ++
- "<TABLE>" ++
- "<TR>\n" ++
- "<!--<TD><INPUT TYPE=\"button\" NAME=\"refresh_but\" VALUE=\"Reload\" onClick=\"reload_page()\">
- &nbsp;&nbsp;&nbsp;&nbsp;</TD>\n-->" ++
- print_radio_buttons([{"all","All processes"},{"sup_child","Supervised processes"},
- {"sup","Only supervisors"}],Mode) ++
- "</TR>\n </TABLE>\n" ++
- "</FORM>".
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Print the radiobuttons. if the mode is the one the current %%
-%% radiobutton represent set the one checked %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-print_radio_buttons([],_)->
- [];
-print_radio_buttons([{Mode,Name}|Rest],Mode)->
- "<TD><INPUT TYPE=\"radio\" NAME=\"mode\" CHECKED=\"true\" VALUE=\""++
- Mode ++"\" onClick=\"reload_page()\">&nbsp;&nbsp;" ++Name ++
- "</TD>\n" ++ print_radio_buttons(Rest,Mode);
-print_radio_buttons([{Mode1,Name}|Rest],Mode)->
- "<TD><INPUT TYPE=\"radio\" NAME=\"mode\" VALUE=\""++ Mode1 ++
- "\" onClick=\"reload_page()\">&nbsp;&nbsp;" ++ Name ++
- "</TD>\n" ++
- print_radio_buttons(Rest,Mode).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% The part that shows the name of the application that the process %%
-%% tree represent %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-selected_app_header(App,Node)->
- {Year,Mon,Day}=date(),
- "<TABLE>
- <TR>
- <TD>Node:</TD>
- <TD>" ++Node ++"</TD>
- </TR>
- <TR>
- <TD>Application:</TD>
- <TD>" ++App ++"</TD>
- </TR>
- <TR>
- <TD>Date:</TD>
- <TD>" ++ integer_to_list(Day) ++ "/" ++
- integer_to_list(Mon) ++"&nbsp;-&nbsp;"++
- integer_to_list(Year) ++
- "</TD>
- </TR>
- </TABLE>
- <TABLE WIDTH=100%>
- <TR>
- <TD>
- <HR WIDTH=\"80%\">
- <!--<FONT SIZE=4>Process tree</FONT>
- <HR ALIGN=\"center\" WIDTH=\"80%\">-->
- </TD>
- </TR>
- </TABLE>".
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%get the process tree from process_info and build the nested %%
-%% unordered list that represent the applications process tree %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-process_tree(App,Mode,Node)->
- case process_info:get_processes(list_to_atom(App),
- list_to_atom(Mode),
- list_to_atom(Node)) of
- unknown->
- "Unknown application please update application tree";
- {Tree,Traced_dict} ->
- "<UL>" ++
- htmlify_tree(Tree,Traced_dict,1,Node,Mode,App) ++
- "</UL>"
- end.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Build each node in the tree and then build its children %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-htmlify_tree({Pid,Childs,Childs2},Proc_tab,N,Node,Mode,App)->
- case ets:lookup(Proc_tab,Pid) of
- [] when N<3->
- print_pid(Pid,Node,Mode,App,notrace)++
- htmlify_prim_child(Childs,Proc_tab,N+1,Node,Mode,App) ++
- htmlify_sec_child(Childs2);
- [_Traced]->
- print_pid(Pid,Node,Mode,App,"<FONT SIZE=2 COLOR=\"firebrick\">Stop Trace</FONT>")++
- htmlify_prim_child(Childs,Proc_tab,N+1,Node,Mode,App) ++
- htmlify_sec_child(Childs2);
- []->
- print_pid(Pid,Node,Mode,App,"<FONT SIZE=2>Start Trace</FONT>")++
- htmlify_prim_child(Childs,Proc_tab,N+1,Node,Mode,App) ++
- htmlify_sec_child(Childs2)
- end.
-
-print_pid(Pid,Node,_Mode,_App,notrace)->
- "<LI><A TARGET=\"proc_data\" STYLE=\"text-decoration:none; color:blue\" HREF=\"./proc_info?name=" ++ urlify_pid(Pid) ++
- "&node="++ Node ++" \" >"++ htmlify_pid(Pid,[]) ++
- "</A>";
-
-print_pid([$P,$o,$r,$t|Rest],_Node,_Mode,_App,_TrMode)->
- "<LI>" ++ htmlify_pid([$P,$o,$r,$t|Rest],[]);
-
-print_pid(Pid,Node,Mode,App,TrMode)->
- "<LI><A TARGET=\"proc_data\" STYLE=\"text-decoration:none; color:blue\" HREF=\"./proc_info?name=" ++
- urlify_pid(Pid) ++ "&node="++ Node ++" \" >"++
- htmlify_pid(Pid,[]) ++ "</A>"++
- "&nbsp;&nbsp;&nbsp
- <A HREF=\"./trace?app="++App++"&mode="++Mode++
- "&node="++Node++"&proc="++urlify_pid(Pid)++"\">
- "++TrMode++"</A>".
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Change the '<' sign and the '>' sign to the html representation %%
-%% of the sign %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-htmlify_pid([60|Pid],New)->
- htmlify_pid(Pid,";tl&"++New);
-htmlify_pid([139|Pid],New)->
- htmlify_pid(Pid,";tl&"++New);
-
-htmlify_pid([62|Pid],New)->
- htmlify_pid(Pid,";tg&"++New);
-htmlify_pid([155|Pid],New)->
- htmlify_pid(Pid,";tg&"++New);
-htmlify_pid([Chr|Pid],New)->
- htmlify_pid(Pid,[Chr|New]);
-htmlify_pid([],New)->
- lists:reverse(New).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Change the < and > sign to the representation of the signs in %%
-%% the HTTP protocol %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-urlify_pid(Pid) ->
- case re:run(Pid,"[<](.*)[>]",[{capture,all_but_first,list}]) of
- {match,[PidStr]}->
- "%3C"++PidStr++"%3E";
- _->
- Pid
- end.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Change the < and > sign from the representation of the signs in %%
-%% the HTTP protocol %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-unurlify_pid(Pid)->
- unurlify_pid(Pid,[]).
-
-unurlify_pid([$%,$3,$C|Rest],New)->
- unurlify_pid(Rest,[60|New]);
-
-unurlify_pid([$%,$3,$E|Rest],New)->
- unurlify_pid(Rest,[62|New]);
-unurlify_pid([Chr|Rest],New)->
- unurlify_pid(Rest,[Chr|New]);
-
-unurlify_pid([],New)->
- lists:reverse(New).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Make html of the list of primary childs %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-htmlify_prim_child([],_Proc_tab,_N,_Node,_Mode,_App)->
- [];
-
-htmlify_prim_child(Childs,Proc_tab,N,Node,Mode,App)->
- Fun=fun(Child)->
- htmlify_tree(Child,Proc_tab,N,Node,Mode,App)
- end,
- "<UL>\n" ++ lists:map(Fun,Childs) ++ "</UL>\n".
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Make html of hte list whit sedondary childs, they has no childs %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-htmlify_sec_child([])->
- [];
-
-htmlify_sec_child(Sec_child_list)->
- Htmlify_child=fun(Pid1)->
- "<LI><FONT COLOR=\"#FF2222\">" ++ Pid1 ++
- "</FONT></LI>\n"
- end,
- "<UL>" ++ lists:map(Htmlify_child,Sec_child_list) ++ "</UL>\n".
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% The Private functions that do the job %%
-%% To build the the page that shows process data %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% The function that creates the collects the various part of %%
-%% the side that shows information about a specific process, %%
-%% Pid_name should be the list representation of a pid %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-process_body(Args) when length(Args)==2->
- Pid=element(2,lists:nth(1,Args)),
- Node=element(2,lists:nth(2,Args)),
- "<BODY BGCOLOR=\"#FFFFFF\">" ++
- process_information_table(Pid,Node) ++ "</BODY>";
-
-process_body(_)->
- "<BODY BGCOLOR=\"#FFFFFF\">Please dont call this side manually</BODY>".
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Create the table that shows the name of the pid to show extended %%
-%% info about %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Get the table that shows the extended info about a process %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-process_information_table(Pid_name,Node)->
- PidID=unurlify_pid(Pid_name),
- case catch list_to_pid(PidID) of
- Pid when is_pid(Pid) ->
- get_process_table(Pid,Node);
- _Other ->
- io_lib:format("Not a process id ~s",[PidID])
- end.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Create the table that shoows the extended info about processes %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-get_process_table(Pid,Node_name) when is_list(Node_name)->
- Node=list_to_atom(Node_name),
- get_process_table(Pid,Node);
-
-get_process_table(Pid,Node) when is_atom(Node)->
- case lists:member(Node,[node()|nodes()]) of
- true->
- Proc_data=process_info:get_process_data(Pid,Node),
- "<TABLE BORDER=1 >
- <TR BGCOLOR=\"#8899AA\"><TD COLSPAN=6 ALIGN=\"center\" >
- <FONT size=4> Process" ++
- htmlify_pid(pid_to_list(Pid),[]) ++ "</FONT>
- </TD></TR>" ++
- start_process_proc_data(Proc_data) ++
- "</TABLE><BR><BR>";
- _ ->
- "Please try again the Node dont exists"
- end.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% The process information is quite messy tidi it up by creating a %%
-%% table that looks like key val %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-start_process_proc_data(Proc_data)->
- %%Pic out the special cases the links and the process dict
- {Special,Usual}=split_proc_data(Proc_data),
- Usual2=append_empty(Usual),
- UsualProcData=process_proc_data(Usual2,0),
- SpecProcData=process_proc_data(Special),
- UsualProcData++SpecProcData.
-
-append_empty(List) when length(List) rem 2 == 0 ->
- List;
-append_empty(List)->
- append_empty(lists:append(List,[empty])).
-
-split_proc_data(Proc_data)->
- Spec=lists:map(fun(Key)->
- case lists:keysearch(Key,1,Proc_data) of
- {value,Data}->
- Data;
- _ ->
- not_included
- end
- end,[links,dictionary,messages]),
- Spec2=clear(Spec,[]),
- Usual=lists:filter(fun({Key,_Val})->
- case Key of
- messages ->
- false;
- links ->
- false;
- dictionary ->
- false;
- _ ->
- true
- end
- end,Proc_data),
- {Spec2,Usual}.
-
-clear([],New)->
- New;
-clear([not_included|Spec],New)->
- clear(Spec,New);
-clear([Other|Spec],New)->
- clear(Spec,[Other|New]).
-
-process_proc_data(Data,3)->
- "</TR>"++process_proc_data(Data,0);
-process_proc_data([],_N)->
- [];
-process_proc_data(Data,0)->
- "<TR>"++process_proc_data(Data,1);
-
-process_proc_data([empty|Data],N)->
- "<TD>&nbsp;</TD><TD>&nbsp;</TD> "++process_proc_data(Data,N+1);
-
-process_proc_data([{current_function,MFA}|Rest],N)->
- "<TD NOWRAP=true><FONT SIZE=3><B>Current function:</B></TD><TD><FONT SIZE=3>"++
- io_lib:format("~p",[MFA]) ++"</TD>\n " ++
- process_proc_data(Rest,N+1);
-
-process_proc_data([{error_handler,Mod}|Rest],N)->
- "<TD NOWRAP=\"true\"><B><FONT SIZE=3>Error handler:</B></TD><TD><FONT SIZE=3>"
- ++ atom_to_list(Mod) ++ "</TD>\n" ++
- process_proc_data(Rest,N+1);
-
-process_proc_data([{group_leader,Grp}|Rest],N)->
- "<TD NOWRAP=\"true\"><FONT SIZE=3><B>Group leader:</B></TD><TD><FONT SIZE=3>" ++
- htmlify_pid(pid_to_list(Grp),[]) ++ "</TD>\n " ++
- process_proc_data(Rest,N+1);
-
-process_proc_data([{heap_size,Size}|Rest],N)->
- "<TD NOWRAP=\"true\"><FONT SIZE=3><B>Heap size:</B></TD><TD><FONT SIZE=3>"
- ++ integer_to_list(Size) ++ "</TD>\n " ++
- process_proc_data(Rest,N+1);
-
-process_proc_data([{initial_call,MFA}|Rest],N)->
- "<TD NOWRAP=\"true\"><FONT SIZE=3><B>Initial call:</B></TD><TD><FONT SIZE=3>"++
- io_lib:format("~p",[MFA]) ++"</TD>\n " ++
- process_proc_data(Rest,N+1);
-
-process_proc_data([{message_queue_len,Size}|Rest],N)->
- "<TD NOWRAP=\"true\"><FONT SIZE=3><B>Message queue length:</B></TD><TD><FONT SIZE=3>" ++
- integer_to_list(Size) ++ "</TD>\n " ++
- process_proc_data(Rest,N+1);
-
-process_proc_data([{priority,Level}|Rest],N)->
- "<TD><FONT SIZE=3><B>Process priority:</B></TD><TD><FONT SIZE=3>" ++
- atom_to_list(Level) ++ "</TD>\n " ++
- process_proc_data(Rest,N+1);
-
-process_proc_data([{reductions,Number}|Rest],N)->
- "<TD ><FONT SIZE=3><B>Number of executed reductions:</B></TD>
- <TD><FONT SIZE=3>" ++ integer_to_list(Number) ++ "</TD>\n " ++
- process_proc_data(Rest,N+1);
-
-process_proc_data([{registered_name,Name}|Rest],N)->
- "<TD NOWRAP=\"true\"><FONT SIZE=3><B>Process Name:</B></TD><TD><FONT SIZE=3>"
- ++ atom_to_list(Name) ++ "</TD>\n" ++
- process_proc_data(Rest,N+1);
-
-process_proc_data([{stack_size,Size}|Rest],N)->
- "<TD NOWRAP=\"true\"><FONT SIZE=3><B>Stack size:</B></TD><TD><FONT SIZE=3>"
- ++ integer_to_list(Size) ++ "</TD>\n " ++
- process_proc_data(Rest,N+1);
-
-process_proc_data([{status,Status}|Rest],N)->
- "<TD NOWRAP=\"true\"><FONT SIZE=3><B>Process status:</B></TD><TD><FONT SIZE=3>"
- ++ atom_to_list(Status) ++ "</TD>\n " ++
- process_proc_data(Rest,N+1);
-
-process_proc_data([{trap_exit,Boolean}|Rest],N)->
- "<TD NOWRAP=\"true\" ><FONT SIZE=3><B>Trap Exit:</B></TD><TD><FONT SIZE=3>"
- ++ atom_to_list(Boolean) ++ "</TD>\n " ++
- process_proc_data(Rest,N+1);
-
-process_proc_data([{Key,Val}|Rest],N)->
- "<TD NOWRAP=\"true\" ><FONT SIZE=3><B>" ++ io_lib:write(Key) ++
- "</B></TD><TD><FONT SIZE=3>" ++ io_lib:write(Val) ++
- "</TD>\n " ++
- process_proc_data(Rest,N).
-
-process_proc_data([])->
- [];
-process_proc_data([{links,List_of_pids}|Rest])->
- "<TR><TD NOWRAP=\"true\"><FONT SIZE=3><B>Links:</B></TD><TD COLSPAN=5><FONT SIZE=3>"++ print_links(List_of_pids) ++"</TD></TR>\n " ++
- process_proc_data(Rest);
-
-process_proc_data([{messages,Queue}|Rest])->
- "<TR><TD NOWRAP=\"true\"><FONT SIZE=3><B>Message Queue:</B></TD><TD COLSPAN=5><FONT SIZE=3>" ++ io_lib:write(Queue) ++ "</TD></TR>\n " ++
- process_proc_data(Rest);
-
-process_proc_data([{dictionary,Dict}|Rest])->
- "<TR><TD NOWRAP=\"true\"><FONT SIZE=3><B>Process dictionary:</B></TD><TD COLSPAN=5><FONT SIZE=3>&nbsp;</TD></TR>\n " ++
- get_dictionary_data(Dict) ++
- process_proc_data(Rest).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% In the process info there are the links to other processes print %%
-%% this pid %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-print_links(Pids)->
- print_links(Pids,[]).
-
-print_links([],Links)->
- htmlify_pid(Links,[]);
-
-print_links([Pid],Links) when is_pid(Pid) ->
- print_links([],Links ++ pid_to_list(Pid));
-
-print_links([Pid],Links) when is_port(Pid) ->
- print_links([],Links ++ erlang:port_to_list(Pid));
-
-print_links([Pid|Rest],Links) when is_pid(Pid) ->
- print_links(Rest,Links ++ pid_to_list(Pid) ++ ", ");
-
-print_links([Pid|Rest],Links) when is_port(Pid) ->
- print_links(Rest,Links ++ erlang:port_to_list(Pid) ++ ", ").
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Fix the data in the process dictionary %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-get_dictionary_data([])->
- [];
-
-get_dictionary_data([{Key,Val}|Dict])->
- FormatedVal=add_space(htmlify_pid(lists:flatten(fix_type(Val)),[])),
- "<TR><TD><FONT SIZE=3>" ++
- htmlify_pid(lists:flatten(fix_type(Key)),[]) ++
- "</TD><TD COLSPAN=5><FONT SIZE=3>" ++
- FormatedVal++ "</TD></TR>\n" ++
- get_dictionary_data(Dict).
-
-add_space(List)->
- add_space(List,0,[]).
-add_space([],_Len,New) ->
- lists:reverse(New);
-add_space([Char|Rest],Len,New)when Len<50 ->
- add_space(Rest,Len+1,[Char|New]);
-
-add_space([$\,|Rest],_Len,New) ->
- add_space(Rest,0,[$\ ,$,|New]);
-
-add_space([Char|Rest],Len,New) ->
- add_space(Rest,Len+1,[Char|New]).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Interpret the type of the data and make it to a list %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-fix_type(Val) when is_atom(Val) ->
- atom_to_list(Val);
-fix_type(Val) when is_float(Val) ->
- float_to_list(Val);
-fix_type(Val) when is_integer(Val) ->
- integer_to_list(Val);
-fix_type(Val) when is_list(Val) ->
- case io_lib:printable_list(Val) of
- true->
- case Val of
- []->
- io_lib:write(Val);
- _->
- Val
- end;
- _->
- io_lib:write(Val)
- end;
-fix_type(Val) when is_pid(Val) ->
- pid_to_list(Val);
-fix_type(Val) when is_port(Val) ->
- erlang:port_to_list(Val);
-fix_type(Val) when is_tuple(Val) ->
- io_lib:write(Val);
-fix_type(_Val) ->
- [].
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% The Private functions that send the trace signal to the process %%
-%% thats the 4 member of the Arg list %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-send_trace(Args)when length(Args)>=4->
- {_,Proc}=lists:nth(4,Args),
- Pid2=unurlify_pid(Proc),
- process_info:send_trace(Pid2);
-
-send_trace(_Args)->
- arg_error.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Private functions that prints the application environment %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-application_env_body(Args)when length(Args)>=2 ->
- App=element(2,lists:nth(1,Args)),
- Node=element(2,lists:nth(2,Args)),
- "<SCRIPT>
- function reload_bottom_frame()
- {parent.proc_data.location.href=\"/appmon/blank.html\";}
- </SCRIPT>
- <BODY BGCOLOR=\"#FFFFFF\" onLoad=reload_bottom_frame()>"
- ++ application_env_table(App,Node) ++ "</BODY>";
-
-application_env_body(_)->
- "<BODY BGCOLOR=\"#FFFFFF\">Please dont call this side manually</BODY>".
-
-application_env_table(App,Node)->
- case process_info:get_application_keys(list_to_atom(App),
- list_to_atom(Node)) of
- {ok,List}->
- "<TABLE BORDER=1>" ++ application_env_head(App,Node) ++
- print_key_list(List,[]) ++ "</TABLE>";
- _ ->
- "Please try again,something went wrong"
- end.
-
-application_env_head(App,Node)->
- "<TR BGCOLOR=\"#8899AA\"><TD ALIGN=\"center\" COLSPAN=3>
- <FONT SIZE=6>" ++ App ++ "@" ++ Node ++ "</FONT>\n
- </TD></TR>
- <TR><TD COLSPAN=3>&nbsp</TD></TR>
- <TR BGCOLOR=\"#8899AA\">
- <TD><B>Key</B></TD><TD><B>Val/Sec. key</B></TD><TD><B>Sec. Val</B></TD>
- </TR>".
-
-print_key_list([],Result)->
- Result;
-
-print_key_list([{application,Name}|Rest],Result)->
- print_key_list(Rest,Result ++ print_key("Application name :",Name));
-
-print_key_list([{description,Desc}|Rest],Result)->
- print_key_list(Rest,Result ++ print_key("Description :",Desc));
-
-print_key_list([{vsn,Ver}|Rest],Result)->
- print_key_list(Rest,Result ++ print_key("Version :",Ver));
-
-print_key_list([{id,Id}|Rest],Result)->
- print_key_list(Rest,Result ++ print_key("ID:",fix_type(Id)));
-
-print_key_list([{modules,Mods}|Rest],Result)->
- print_key_list(Rest,Result ++ print_key("Modules:","&nbsp;") ++
- print_secondary_list(Mods,[]));
-
-print_key_list([{maxP,Max}|Rest],Result)->
- print_key_list(Rest,Result ++
- print_key("Max nr of processes",fix_type(Max)));
-
-print_key_list([{maxT,Max}|Rest],Result)->
- print_key_list(Rest,Result ++
- print_key("Max running sec:",fix_type(Max)));
-
-print_key_list([{registered,Names}|Rest],Result)->
- print_key_list(Rest,Result ++
- print_key("Registered names:","&nbsp;") ++
- print_secondary_list(Names,[]));
-
-print_key_list([{applications,Apps}|Rest],Result)->
- print_key_list(Rest,Result ++ print_key("Depends on:","&nbsp") ++
- print_secondary_list(Apps,[]));
-
-print_key_list([{included_applications,Inc_apps}|Rest],Result)->
- print_key_list(Rest,Result ++
- print_key("Included applications:",
- fix_type(Inc_apps)));
-
-print_key_list([{env,Env}|Rest],Result)->
- print_key_list(Rest,Result ++
- print_key("Environment:",fix_type(Env)));
-
-print_key_list([{mod,Mod}|Rest],Result)->
- print_key_list(Rest,Result ++
- print_key("Application callback mod:",
- fix_type(Mod)));
-
-print_key_list([{start_phases,Phase_arg}|Rest],Result)->
- print_key_list(Rest,Result ++
- print_key("Application callback mod:",
- fix_type(Phase_arg)));
-
-print_key_list([_|Rest],Result)->
- print_key_list(Rest,Result).
-
-print_key(Label,Val)->
- "<TR>
- <TD><B>" ++ Label ++ "</B></TD><TD>" ++ Val ++
- "</TD><TD>&nbsp;</TD>
- </TR>".
-
-print_key2(Label,Val)->
- "<TR>
- <TD>&nbsp;</TD><TD>" ++ Label ++ "</TD><TD>" ++ Val ++ "</TD>
- </TR>".
-
-print_secondary_list([],Result)->
- Result;
-print_secondary_list([{Mod,Ver}|Rest],Result) ->
- print_secondary_list(Rest,Result ++
- print_key2(fix_type(Mod),fix_type(Ver)));
-
-print_secondary_list([Mod|Rest],Result) ->
- print_secondary_list(Rest,Result ++
- print_key2(fix_type(Mod),"&nbsp;")).
diff --git a/lib/appmon/src/process_info.erl b/lib/appmon/src/process_info.erl
deleted file mode 100644
index e5d44ae50e..0000000000
--- a/lib/appmon/src/process_info.erl
+++ /dev/null
@@ -1,662 +0,0 @@
-%%
-%% %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%
--module(process_info).
--behavior(gen_server).
-
--export([start/0, start_link/0, stop/0]).
--export([is_node/1, get_nodes/0,
- get_applications/1, get_application_keys/2,
- get_processes/3, get_process_data/2,
- send_trace/1]).
-
-%% gen_server callbacks
--export([init/1, handle_call/3, handle_cast/2, handle_info/2,
- terminate/2, code_change/3]).
-
--record(data, {que=undef,
- procs=undef,
- links=undef,
- links2=undef}).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% %%
-%% Functions to retrieve information about which application %%
-%% at the node %%
-%% %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-start() ->
- gen_server:start({local, proc_info}, process_info, [], []).
-
-start_link() ->
- gen_server:start_link({local, proc_info}, process_info, [], []).
-
-stop() ->
- gen_server:call(proc_info, stop, 1000).
-
-%% is_node(NodeS) -> {bool(), Node, NodeS2}
-%% NodeS = NodeS2 = string()
-%% Node = node()
-is_node(NodeS) ->
- Node = list_to_atom(NodeS),
- case lists:member(Node, [node()|nodes()]) of
- true->
- {true, Node, NodeS};
- false ->
- {false, node(), atom_to_list(node())}
- end.
-
-%% get_nodes() -> [node()]
-get_nodes() ->
- [node()|nodes()].
-
-%% get_applications(Node) -> [App]
-%% Node = node()
-%% App = atom()
-%% Returns the list of all applications with a supervision tree (that
-%% is, not library applications such as stdlib) at Node.
-get_applications(Node) ->
- Info = rpc:call(Node, application, info, []),
- {value, {running, Apps}} = lists:keysearch(running, 1, Info),
- [App || {App, Pid} <- Apps, is_pid(Pid)].
-
-%% get_application_keys(App, Node) -> {ok, Keys} | {error, Reason}
-%% Node = node()
-%% App = atom()
-%% Keys = [{Key, Val}]
-%% Key = atom()
-%% Val = term()
-%% Reason = badapp | badrpc
-get_application_keys(App, Node) ->
- case rpc:call(Node, application, get_all_key, [App]) of
- {ok, Keys} ->
- {ok, Keys};
- undefined ->
- {error, badapp};
- {badrpc, _} ->
- {error, badrpc}
- end.
-
-%% get_processes(App, Mode, Node) -> {Tree, Dict} | unknown
-%% App = atom()
-%% Mode = sup | sup_child | all
-%% Node = node()
-get_processes(App, Mode, Node) ->
- gen_server:call(proc_info, {get_processes, App, Mode, Node}).
-
-%% get_process_data(Pid, Node) -> ProcData
-%% Pid = pid()
-%% Node = node()
-%% ProcData -- see erlang:process_info/1
-get_process_data(Pid, Node) ->
- case rpc:call(Node, erlang, process_info, [Pid]) of
- {badrpc, _} ->
- [{error,"Please try again"}];
- Res ->
- Res
- end.
-
-%% send_trace(PidL) -> void()
-send_trace(PidL) ->
- gen_server:call(proc_info, {send_trace, PidL}).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% %%
-%% gen_server callbacks %%
-%% %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-init([]) ->
- {ok, ets:new(procs, [])}.
-
-handle_call({get_processes, App, Mode, Node}, _From, State) ->
- case do_get_processes(App, Mode, Node) of
- unknown ->
- {reply, unknown, State};
- Tree ->
- {reply, {Tree, State}, State}
- end;
-handle_call({send_trace, PidL}, _From, State) ->
- do_send_trace(PidL, State),
- {reply, ok, State};
-handle_call(stop, _From, State) ->
- {stop, normal, ok, State}.
-
-handle_cast(_, State) ->
- {noreply, State}.
-
-handle_info(_, State) ->
- {noreply, State}.
-
-terminate(_Reason, _State) ->
- ok.
-
-code_change(_, State, _) ->
- {ok, State}.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% %%
-%% Internal functions %%
-%% %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%% do_get_processes(App, Mode, Node) -> Tree | unknown
-%% App = atom()
-%% Mode = all | sup | sup_childs
-%% Node = node()
-%% Tree = term()
-do_get_processes(App, Mode, Node) ->
- case rpc:call(Node, application_controller, get_master, [App]) of
- Pid when is_pid(Pid) ->
- start_collecting_data(Pid, Mode, Node);
- undefined ->
- unknown
- end.
-
-%% Initiate the database, get the processes and the links.
-%% Then build lists and return them.
-start_collecting_data(Pid, Mode, Node) ->
- Db = get_database(),
- {Db2, Tree} = build_graph({master,Pid}, Db, Pid, Mode, Node),
- delete_database(Db2),
- Tree.
-
-get_database() ->
- P = ets:new(procs,[]),
- L = ets:new(link,[bag]),
- L2 = ets:new(link2,[bag]),
- Q = queue:new(),
- ets:insert(P, {whereis(application_controller), crap}),
- ets:insert(P, {whereis(gs), crap}),
- #data{que=Q, procs=P, links=L, links2=L2}.
-
-delete_database(Db) ->
- ets:delete(Db#data.procs),
- ets:delete(Db#data.links),
- ets:delete(Db#data.links2).
-
-%% The thought is
-%% 1. Get the processes that links to Pid.
-%% Pid is the application master the first time.
-%% 2. Add the processes to the database and clear the list of children
-%% from processes which for some resason not should be there.
-%% 3. Queue the children, so we later can se if they have any links.
-%% 4. Add links to the childrens.
-%% 5. When the whole tree is retreived remove the unnecessary processes
-%% depending on the mode.
-%% 6. Take all links that point to the same pid and sort out
-%% the primary and secondary relations.
-%% If more than one process links to the same process, the relation
-%% between a supervisor and a process is primary. The rest is
-%% secondary, there is no different in real world just in logic
-%% between a secondary and a primary relation.
-%% When all processes in the application is collected,
-%% fix secondary links and return the tree.
-build_graph(finish, Db, Grp, Mode, Node) ->
- Db = fix_links(Db, Grp, Node),
- delete_unwanted(Db, Mode, Grp),
- Tree = start_tree(Db, Node),
- {Db, Tree};
-build_graph(Pid, Db, Grp, Mode, Node) ->
- Children = get_children(Pid, Mode, Node),
- Children2 = add_and_remove(Children, Pid, Db, Grp, Node),
- Q2 = queue_children(Db#data.que, Children2),
- add_children(Pid, Db, Children2, 1),
- case queue:out(Q2) of
- {empty, _}->
- build_graph(finish, Db, Grp, Mode, Node);
- {{value,NPid}, Q3}->
- Db2 = Db#data{que=Q3},
- build_graph(NPid,Db2,Grp,Mode,Node)
- end.
-
-%% Collect the processes which the current process has a link to
-%% Pid is now the application_master and the application master's
-%% child is the application supervisor but in reality there are two
-%% application master processes.
-%% Fix this by reordering the processes a little.
-get_children({master,Pid}, _Mode, Node) when is_pid(Pid) ->
- %% Get the master pid
- MPid = case application_master:get_child(Pid) of
- {Pid1, _App} -> Pid1;
- Pid1 -> Pid1
- end,
- %% Get the second appplication master process and order them
- %% correctly
- case rpc:call(Node, erlang, process_info, [MPid,links]) of
- {links, [H|T]} -> [H,MPid|T];
- {links, []} -> MPid
- end;
-get_children({Pid, _Name}, _Mode, Node) when is_pid(Pid),
- Node==node(Pid) ->
- {links,Links} = rpc:call(Node, erlang, process_info, [Pid,links]),
- Links;
-get_children(Pid, _Mode, Node) when is_pid(Pid), Node==node(Pid) ->
- {links,Links} = rpc:call(Node, erlang, process_info, [Pid,links]),
- Links;
-get_children(Pid, _Mode, Node) when is_pid(Pid), Node/=node(Pid) ->
- [];
-get_children(Port, _Mode, _Node) when is_port(Port) ->
- [].
-
-%% Add the links to the database.
-%% The first case -- when it is the application master process -- there
-%% is only one real child even though there are more links.
-add_children({master,Pid}, Db, [Child|_Rest], N) ->
- add_child(Pid, Db, Child, N);
-add_children(_Pid, _Db, [], _N) ->
- ok;
-add_children(Pid, Db, [Child|Rest], N) ->
- add_child(Pid, Db, Child, N),
- add_children(Pid, Db, Rest, N+1).
-
-add_child(Pid, Db, Child, N) ->
- case ets:match_object(Db#data.links, {Pid,Child,'_'}) of
- [] ->
- ets:insert(Db#data.links, {Pid,Child,N});
- _ ->
- ok
- end.
-
-%% Add the list of processes to the queue.
-queue_children(Queue, []) ->
- Queue;
-queue_children(Queue, [H|T]) ->
- Q = queue:in(H, Queue),
- queue_children(Q, T).
-
-%% The processess that we already has added to the database are
-%% not children to the current process, so we don't need to add them a
-%% second time.
-remove_used_children([], _Db, New_list) ->
- lists:reverse(New_list);
-remove_used_children([Child|Rest], Db, New) ->
- case ets:lookup(Db#data.procs, Child) of
- [] ->
- remove_used_children(Rest, Db, [Child|New]);
- _ ->
- remove_used_children(Rest, Db, New)
- end.
-
-%% Take the list of links and separate it into a list with ports and a
-%% list with pids.
-separate_ports([], Pids, Ports) ->
- {Pids, Ports};
-separate_ports([Child|Rest], Pids, Ports) ->
- if
- is_port(Child) ->
- separate_ports(Rest, Pids, [Child|Ports]);
- is_pid(Child) ->
- separate_ports(Rest, [Child|Pids], Ports)
- end.
-
-%% Add the current pid to the ets table with processes and clear
-%% the list of children from processes that should not be there.
-%% In the first case, no children are used so it's not necessary.
-add_and_remove(Children, {master,Pid}, Db, _Grp, Node)
- when is_pid(Pid), Node==node(Pid) ->
- ets:insert(Db#data.procs, {Pid, {master,master}, controller}),
- {_Pids,Ports} = separate_ports(Children, [], []),
- Ports++Children;
-%% This clause is removable when using only link as retrieving mode .
-add_and_remove(Children, {Pid,_Name}, Db, Grp, Node)
- when is_pid(Pid), Node==node(Pid) ->
- ets:insert(Db#data.procs, {Pid,
- rpc:call(Node,erlang,process_info,
- [Pid,registered_name])}),
- {Pids, Ports} = separate_ports(Children, [], []),
- Children1 = remove_used_children(Pids, Db, []),
- Children2 = remove_others_children(Children1, Grp, Node),
- Ports++Children2;
-add_and_remove(Children, Pid, Db, Grp, Node) when is_pid(Pid),
- Node==node(Pid) ->
- ets:insert(Db#data.procs, {Pid,
- rpc:call(Node,erlang,process_info,
- [Pid,registered_name])}),
- {Pids, Ports} = separate_ports(Children, [], []),
- Children1 = remove_used_children(Pids, Db, []),
- Children2 =remove_others_children(Children1, Grp, Node),
- Ports++Children2;
-add_and_remove(_Children, Pid, _Db, _Grp, Node) when is_pid(Pid),
- Node/=node(Pid) ->
- [];
-%% Take care of the ports, don't add them to the table with processes.
-add_and_remove(_Children, Pid, _Db, _Grp, _Node) when is_port(Pid) ->
- [].
-
-%% Control that the application's group leader is the group leader of
-%% Pid
-group_leader_check({Pid,_Name}, Grp, Node) ->
- group_leader_check(Pid, Grp, Node);
-group_leader_check(Pid, Grp, Node) ->
- case rpc:call(Node, erlang, process_info, [Pid,group_leader]) of
- {_Item, Grp} -> yes;
- _ -> no
- end.
-
-%% Take the list of children and remove the ones with anoother group
-%% leader.
-remove_others_children(Children, Grp, Node) ->
- lists:filter(fun(Child) ->
- case group_leader_check(Child, Grp, Node) of
- yes -> true;
- no -> false
- end
- end,
- Children).
-
-%% Mark the processes in the procs table as either supervisor or worker.
-fix_links(Db, Leader, Node) ->
- {Sup,_Work} = mark_supervisors_workers(Db, Leader, Node),
- ets:match_delete(Db#data.procs, {'_',crap}),
- [_Pid|Procs] = ets:tab2list(Db#data.procs),
- N_links = get_n_links(Procs, Db#data.links, []),
- N_links2 = take_sup_links(Sup, Db#data.links, N_links),
- add_shared_links(N_links2, Db#data.links2),
- Db.
-
-%% Add the links that point to the same child to the shared links table
-add_shared_links(N_links, Links2) ->
- Insert_fun = fun(Link) -> ets:insert(Links2, Link) end,
- lists:map(fun(List) -> lists:map(Insert_fun, List) end, N_links).
-
-%% Take the list of links that point to the same children and remove
-%% the ones that are children to supervisors.
-%% The first argument is a list of the supervisors.
-%% N_links contains a list of list of links that points to the same
-%% child.
-take_sup_links([], _Db, N_links) ->
- N_links;
-take_sup_links([H|Supervised], Links_table, N_links) ->
- N_list_fun = fun(Link) ->
- insert_sup_links(Link, H, Links_table)
- end,
- N_links2 = lists:map(fun(Link_list) ->
- lists:filter(N_list_fun,Link_list)
- end,
- N_links),
- take_sup_links(Supervised, Links_table, N_links2).
-
-%% Insert the supervised links in the primary links list.
-%% This function should be used as a fun to the filter function in
-%% take_sup_links/3.
-insert_sup_links({From,To,N}, Sup, Links_table) ->
- case From of
- Sup ->
- ets:insert(Links_table, {From,To,N}),
- false;
- _ ->
- true
- end.
-
-%% Get the links which points to the same children.
-get_n_links([], _Links, N_link) ->
- N_link;
-get_n_links([{Pid,_,_}|Procs], Links, N_link) ->
- case ets:match_object(Links, {'_',Pid,'_'}) of
- L when length(L)>1 ->
- ets:match_delete(Links, {'_',Pid,'_'}),
- get_n_links(Procs, Links, [L|N_link]);
- _L ->
- get_n_links(Procs, Links, N_link)
- end;
-get_n_links([{Pid,_}|Procs], Links, N_link) ->
- case ets:match_object(Links, {'_',Pid,'_'}) of
- L when length(L)>1 ->
- ets:match_delete(Links, {'_',Pid,'_'}),
- get_n_links(Procs, Links, [L|N_link]);
- _L ->
- get_n_links(Procs, Links, N_link)
- end.
-
-%% Mark the processes that are in the supervisor tree as either worker
-%% or supervisor.
-mark_supervisors_workers(Db, Leader, Node) ->
- %% Get the supervisors and workers.
- {Sup_list, Worker_list} = get_by_supervisors1(Leader),
- %% Update the supervisor pids.
- lists:map(fun(Pid) ->
- ets:insert(Db#data.procs,
- {Pid,
- rpc:call(Node, erlang,process_info,
- [Pid,registered_name]),
- supervisor})
- end,
- Sup_list),
- %% Update the worker pids.
- lists:map(fun(Pid) ->
- ets:insert(Db#data.procs,
- {Pid,
- rpc:call(Node, erlang,process_info,
- [Pid,registered_name]),
- worker})
- end,
- Worker_list),
- {lists:reverse(Sup_list), Worker_list}.
-
-%% The second way to retrieve the applications processes is to go by
-%% the supervision tree.
-get_by_supervisors1(Leader) ->
- case application_master:get_child(Leader) of
- {Pid, _Name}->
- get_by_supervisors([{namn,Pid,supervisor,list_of_mods}],
- [], []);
- Pid ->
- get_by_supervisors([{namn,Pid,supervisor,list_of_mods}],
- [], [])
- end.
-
-get_by_supervisors([], Sup, Work) ->
- {Sup, Work};
-get_by_supervisors([{_,Pid,supervisor,_}|Rest], Sup, Work)
- when is_pid(Pid) ->
- Children = supervisor:which_children(Pid),
- Children2 = lists:append(Children, Rest),
- get_by_supervisors(Children2, [Pid|Sup], Work);
-get_by_supervisors([{_,Pid,_,_}|Rest], Sup, Work) when is_pid(Pid) ->
- get_by_supervisors(Rest, Sup, [Pid|Work]);
-get_by_supervisors([_Whatever|Rest], Sup, Work) ->
- get_by_supervisors(Rest, Sup, Work).
-
-%% Use pattern matching to select mode and delete the unneccesary pids
-delete_unwanted(Db, sup_child, App_pid) ->
- delete_not_in_supervisor_tree(Db),
- add_main_link(Db, App_pid),
- Db;
-delete_unwanted(Db, all, _App_pid) ->
- Db;
-delete_unwanted(Db, sup, App_pid) ->
- delete_workers(Db),
- delete_not_in_supervisor_tree(Db),
- add_main_link(Db, App_pid),
- Db.
-
-add_main_link(Db, App_pid) ->
- case application_master:get_child(App_pid) of
- {Pid, _Name} when is_pid(Pid) ->
- ets:insert(Db#data.links, {App_pid,Pid,1});
- Pid when is_pid(Pid) ->
- ets:insert(Db#data.links, {App_pid,Pid,1});
- _ ->
- false
- end.
-
-%% Delete the processes that are in the supervision tree but are
-%% workers, and their links.
-delete_workers(Db) ->
- Pids = ets:match_object(Db#data.procs, {'_','_',worker}),
- Pids2 =
- lists:map(
- fun({Pid,_,_}) ->
- %% Remove the unwanted pids from the process table.
- ets:match_delete(Db#data.procs, {Pid,'_','_'}),
- %% Remove the links to and from the pid.
- ets:match_delete(Db#data.links, {Pid,'_','_'}),
- ets:match_delete(Db#data.links, {'_',Pid,'_'}),
- ets:match_delete(Db#data.links2, {Pid,'_','_'}),
- ets:match_delete(Db#data.links2, {'_',Pid,'_'})
- end,
- Pids),
- Pids2.
-
-%% Delete the processes that are not in the supervision tree.
-delete_not_in_supervisor_tree(Db) ->
- Pids = ets:match_object(Db#data.procs,{'_','_'}),
- Pids2 =
- lists:map(
- fun({Pid,_}) ->
- %% Remove the unwanted from the process table.
- ets:match_delete(Db#data.procs, {Pid,'_'}),
- %% Remove the links to and from the pid.
- ets:match_delete(Db#data.links, {Pid,'_','_'}),
- ets:match_delete(Db#data.links, {'_',Pid,'_'}),
- ets:match_delete(Db#data.links2, {Pid,'_','_'}),
- ets:match_delete(Db#data.links2, {'_',Pid,'_'})
- end,
- Pids),
- Pids2.
-
-%% Start generating the tree.
-start_tree(Db, Node) ->
- case get_master(Db) of
- no -> false;
- Pid ->
- build_node(Pid, Db, Node)
- end.
-
-%% Build a node and then it runs itself on every child to the current
-%% pid.
-build_node(Pid, Db, Node) when is_pid(Pid), Node==node(Pid) ->
- Sort_fun = fun sort_order/2,
- Fix_sec_name_fun = fun(Pid2) -> get_link_name(Pid2, Db) end,
- Build_tree_fun = fun({_,Pid1,_}) -> build_node(Pid1,Db,Node) end,
- Children = ets:match_object(Db#data.links, {Pid,'_','_'}),
- Children1 = lists:sort(Sort_fun, Children),
- Sec_children = ets:match_object(Db#data.links2, {Pid,'_','_'}),
- {get_name(Pid,Db),
- lists:map(Build_tree_fun,Children1),
- lists:map(Fix_sec_name_fun,Sec_children)};
-build_node(Pid, _Db, Node) when is_pid(Pid), Node/=node(Pid) ->
- {"Runs on another node:"++erlang:pid_to_list(Pid), [], []};
-build_node(Pid, _Db, _Node) when is_port(Pid) ->
- {"Port :"++erlang:port_to_list(Pid), [], []}.
-
-%% Select the name of the pid from the database where we previosly
-%% added it.
-get_name(Pid, Db) ->
- case ets:lookup(Db#data.procs, Pid) of
- [{_,{_,master},_}] -> pid_to_list(Pid);
- [{_,{_,Name}}] -> atom_to_list(Name)++" : "++pid_to_list(Pid);
- [{_,{_,Name},_}] -> atom_to_list(Name)++" : "++pid_to_list(Pid);
- _ -> pid_to_list(Pid)
- end.
-
-%% Select the name of the process which we have a link to.
-get_link_name({_,Pid,_}, Db) when is_pid(Pid) ->
- case ets:lookup(Db#data.procs, Pid) of
- [{_,{_,Name}}] -> atom_to_list(Name)++" : "++pid_to_list(Pid);
- [{_,{_,Name},_}] -> atom_to_list(Name)++" : "++pid_to_list(Pid);
- _ -> pid_to_list(Pid)
- end;
-get_link_name({_,Port,_}, _Db) when is_port(Port) ->
- "Port :"++" : ";
-get_link_name(_, _) ->
- "".
-
-%% Sort the links in the order they where added, in ascending order.
-sort_order({_,_,N1}, {_,_,N2}) when N1>N2 -> true;
-sort_order(_N1, _N2) -> false.
-
-%% Select the pid of the application master.
-get_master(Db) ->
- case ets:match_object(Db#data.procs,
- {'_',{master,master},controller}) of
- [{Pid,_,_}|_Rest] -> Pid;
- _ -> no
- end.
-
-%% The main function to handle tracing.
-%% Checks if the process is in the table with traced processes. If so,
-%% it stops the trace, otherwise it starts the trace.
-do_send_trace(PidL, Traced_tab) ->
- Pid = list_to_pid(PidL),
- Key = get_key(Pid),
- case catch ets:lookup(Traced_tab, Key) of
- [] ->
- trace_process(Pid, Key, true, Traced_tab);
- [_Object]->
- trace_process(Pid, Key, false, Traced_tab)
- end,
- filter_procs(Traced_tab, ets:tab2list(Traced_tab)).
-
-get_key(Pid) ->
- Node = node(Pid),
- case rpc:call(Node, erlang, process_info, [Pid,registered_name]) of
- [] -> pid_to_list(Pid);
- {registered_name, Name} ->
- atom_to_list(Name)++" : "++pid_to_list(Pid)
- end.
-
-%% Tries to toggle the trace flag for the process.
-trace_process(Pid, Key, On_or_off, Procs_tab) ->
- case rpc:call(node(Pid), sys, trace, [Pid,On_or_off,1000]) of
- timeout ->
- Node = node(Pid),
- io:fwrite("timeout node= ~w, Pid= ~w mode= ~w ~n",
- [Node, Pid, On_or_off]);
- {badrpc, _} ->
- Node = node(Pid),
- io:fwrite("badrpc node= ~w, Pid= ~w mode= ~w ~n",
- [Node, Pid, On_or_off]);
- Res ->
- Node = node(Pid),
- io:fwrite("anymode ~w node= ~w, Pid= ~w mode= ~w ~n",
- [Res, Node, Pid,On_or_off]),
- case On_or_off of
- true -> ets:insert(Procs_tab, {Key,On_or_off});
- false -> ets:delete(Procs_tab, Key)
- end
- end.
-
-%% Check if the processes in the ets table with traced processes
-%% are alive. If not, remove them.
-filter_procs(Tab, Tab_list) ->
- lists:foreach(fun({Key,_Val}) -> is_alive(Key, Tab) end, Tab_list).
-
-is_alive(Key, Tab) ->
- case get_pid(Key) of
- nopid -> false;
- Pid -> is_alive2(Pid, Key, Tab)
- end.
-
-%% Key is either a pid in list form or Pidname:Pid in list form.
-get_pid(Key) ->
- case catch list_to_pid(string:substr(Key,string:rchr(Key,$<))) of
- Pid when is_pid(Pid) ->
- Pid;
- _ ->
- nopid
- end.
-
-is_alive2(Pid, Key, Tab) ->
- case catch rpc:call(node(Pid), erlang, is_process_alive, [Pid]) of
- true -> true;
- false ->
- catch ets:delete(Tab, Key),
- ok
- end.
diff --git a/lib/appmon/vsn.mk b/lib/appmon/vsn.mk
deleted file mode 100644
index 5585c5e1c2..0000000000
--- a/lib/appmon/vsn.mk
+++ /dev/null
@@ -1 +0,0 @@
-APPMON_VSN = 2.1.14.2
diff --git a/lib/compiler/doc/src/compile.xml b/lib/compiler/doc/src/compile.xml
index 73d75851cf..1459f696a0 100644
--- a/lib/compiler/doc/src/compile.xml
+++ b/lib/compiler/doc/src/compile.xml
@@ -350,12 +350,18 @@ module.beam: module.erl \
parsed code before the code is checked for errors.</p>
</item>
- <tag><c>asm</c></tag>
+ <tag><c>from_asm</c></tag>
<item>
<p>The input file is expected to be assembler code (default
file suffix ".S"). Note that the format of assembler files
- is not documented, and may change between releases - this
- option is primarily for internal debugging use.</p>
+ is not documented, and may change between releases.</p>
+ </item>
+
+ <tag><c>from_core</c></tag>
+ <item>
+ <p>The input file is expected to be core code (default
+ file suffix ".core"). Note that the format of core files
+ is not documented, and may change between releases.</p>
</item>
<tag><c>no_strict_record_tests</c></tag>
diff --git a/lib/compiler/src/beam_block.erl b/lib/compiler/src/beam_block.erl
index cf5244e1ce..402fbe2e2e 100644
--- a/lib/compiler/src/beam_block.erl
+++ b/lib/compiler/src/beam_block.erl
@@ -123,15 +123,24 @@ is_last_bool([], _) -> false.
collect_block(Is) ->
collect_block(Is, []).
+collect_block([{allocate,N,R}|Is0], Acc) ->
+ {Inits,Is} = lists:splitwith(fun ({init,{y,_}}) -> true;
+ (_) -> false
+ end, Is0),
+ collect_block(Is, [{set,[],[],{alloc,R,{nozero,N,0,Inits}}}|Acc]);
collect_block([{allocate_zero,Ns,R},{test_heap,Nh,R}|Is], Acc) ->
- collect_block(Is, [{set,[],[],{alloc,R,{no_opt,Ns,Nh,[]}}}|Acc]);
+ collect_block(Is, [{set,[],[],{alloc,R,{zero,Ns,Nh,[]}}}|Acc]);
collect_block([I|Is]=Is0, Acc) ->
case collect(I) of
error -> {reverse(Acc),Is0};
Instr -> collect_block(Is, [Instr|Acc])
end.
+collect({allocate,N,R}) -> {set,[],[],{alloc,R,{nozero,N,0,[]}}};
collect({allocate_zero,N,R}) -> {set,[],[],{alloc,R,{zero,N,0,[]}}};
+collect({allocate_heap,Ns,Nh,R}) -> {set,[],[],{alloc,R,{nozero,Ns,Nh,[]}}};
+collect({allocate_heap_zero,Ns,Nh,R}) -> {set,[],[],{alloc,R,{zero,Ns,Nh,[]}}};
+collect({init,D}) -> {set,[D],[],init};
collect({test_heap,N,R}) -> {set,[],[],{alloc,R,{nozero,nostack,N,[]}}};
collect({bif,N,F,As,D}) -> {set,[D],As,{bif,N,F}};
collect({gc_bif,N,F,R,As,D}) -> {set,[D],As,{alloc,R,{gc_bif,N,F}}};
@@ -144,6 +153,10 @@ collect({set_tuple_element,S,D,I}) -> {set,[],[S,D],{set_tuple_element,I}};
collect({get_list,S,D1,D2}) -> {set,[D1,D2],[S],get_list};
collect(remove_message) -> {set,[],[],remove_message};
collect({'catch',R,L}) -> {set,[R],[],{'catch',L}};
+collect(fclearerror) -> {set,[],[],fclearerror};
+collect({fcheckerror,{f,0}}) -> {set,[],[],fcheckerror};
+collect({fmove,S,D}) -> {set,[D],[S],fmove};
+collect({fconv,S,D}) -> {set,[D],[S],fconv};
collect(_) -> error.
%% embed_lines([Instruction]) -> [Instruction]
diff --git a/lib/compiler/src/beam_flatten.erl b/lib/compiler/src/beam_flatten.erl
index 25428c0c10..5603a677e8 100644
--- a/lib/compiler/src/beam_flatten.erl
+++ b/lib/compiler/src/beam_flatten.erl
@@ -51,6 +51,7 @@ norm_block([], Acc) -> Acc.
norm({set,[D],As,{bif,N,F}}) -> {bif,N,F,As,D};
norm({set,[D],As,{alloc,R,{gc_bif,N,F}}}) -> {gc_bif,N,F,R,As,D};
+norm({set,[D],[],init}) -> {init,D};
norm({set,[D],[S],move}) -> {move,S,D};
norm({set,[D],[S],fmove}) -> {fmove,S,D};
norm({set,[D],[S],fconv}) -> {fconv,S,D};
diff --git a/lib/compiler/src/beam_jump.erl b/lib/compiler/src/beam_jump.erl
index b29a3565e4..d57fb80ac2 100644
--- a/lib/compiler/src/beam_jump.erl
+++ b/lib/compiler/src/beam_jump.erl
@@ -202,19 +202,19 @@ is_label(_) -> false.
move(Is) ->
move_1(Is, [], []).
-move_1([I|Is], End0, Acc0) ->
+move_1([I|Is], Ends, Acc0) ->
case is_exit_instruction(I) of
false ->
- move_1(Is, End0, [I|Acc0]);
+ move_1(Is, Ends, [I|Acc0]);
true ->
- case extract_seq(Acc0, [I|End0]) of
+ case extract_seq(Acc0, [I]) of
no ->
- move_1(Is, End0, [I|Acc0]);
+ move_1(Is, Ends, [I|Acc0]);
{yes,End,Acc} ->
- move_1(Is, End, Acc)
+ move_1(Is, [End|Ends], Acc)
end
end;
-move_1([], End, Acc) -> reverse(Acc, End).
+move_1([], Ends, Acc) -> reverse(Acc, lists:append(reverse(Ends))).
extract_seq([{line,_}=Line|Is], Acc) ->
extract_seq(Is, [Line|Acc]);
diff --git a/lib/compiler/src/beam_type.erl b/lib/compiler/src/beam_type.erl
index 3ec57a67da..58c0f765ae 100644
--- a/lib/compiler/src/beam_type.erl
+++ b/lib/compiler/src/beam_type.erl
@@ -142,6 +142,12 @@ simplify_float(Is0, Ts0) ->
throw:not_possible -> not_possible
end.
+simplify_float_1([{set,[],[],fclearerror}|Is], Ts, Rs, Acc) ->
+ simplify_float_1(Is, Ts, Rs, clearerror(Acc));
+simplify_float_1([{set,[],[],fcheckerror}|Is], Ts, Rs, Acc) ->
+ simplify_float_1(Is, Ts, Rs, checkerror(Acc));
+simplify_float_1([{set,[{fr,_}],_,_}=I|Is], Ts, Rs, Acc) ->
+ simplify_float_1(Is, Ts, Rs, [I|Acc]);
simplify_float_1([{set,[D0],[A0],{alloc,_,{gc_bif,'-',{f,0}}}}=I|Is]=Is0,
Ts0, Rs0, Acc0) ->
case tdb_find(A0, Ts0) of
diff --git a/lib/compiler/src/beam_utils.erl b/lib/compiler/src/beam_utils.erl
index e9911fefd9..36f3200d11 100644
--- a/lib/compiler/src/beam_utils.erl
+++ b/lib/compiler/src/beam_utils.erl
@@ -759,6 +759,12 @@ live_opt([{allocate,_,Live}=I|Is], _, D, Acc) ->
live_opt(Is, live_call(Live), D, [I|Acc]);
live_opt([{allocate_heap,_,_,Live}=I|Is], _, D, Acc) ->
live_opt(Is, live_call(Live), D, [I|Acc]);
+live_opt([{'%',_}=I|Is], Regs, D, Acc) ->
+ live_opt(Is, Regs, D, [I|Acc]);
+live_opt([{recv_set,_}=I|Is], Regs, D, Acc) ->
+ live_opt(Is, Regs, D, [I|Acc]);
+live_opt([{recv_mark,_}=I|Is], Regs, D, Acc) ->
+ live_opt(Is, Regs, D, [I|Acc]);
live_opt([], _, _, Acc) -> Acc.
diff --git a/lib/compiler/src/compile.erl b/lib/compiler/src/compile.erl
index 47d446273b..38a733751a 100644
--- a/lib/compiler/src/compile.erl
+++ b/lib/compiler/src/compile.erl
@@ -417,6 +417,10 @@ pass(from_core) ->
pass(from_asm) ->
{".S",[?pass(beam_consult_asm)|asm_passes()]};
pass(asm) ->
+ %% TODO: remove 'asm' in R18
+ io:format("compile:file/2 option 'asm' has been deprecated and will be "
+ "removed in R18.~n"
+ "Use 'from_asm' instead.~n"),
pass(from_asm);
pass(from_beam) ->
{".beam",[?pass(read_beam_file)|binary_passes()]};
@@ -1613,7 +1617,7 @@ compile_beam(File0, _OutFile, Opts) ->
compile_asm(File0, _OutFile, Opts) ->
File = shorten_filename(File0),
- case file(File, [asm|make_erl_options(Opts)]) of
+ case file(File, [from_asm|make_erl_options(Opts)]) of
{ok,_Mod} -> ok;
Other -> Other
end.
diff --git a/lib/compiler/test/compilation_SUITE.erl b/lib/compiler/test/compilation_SUITE.erl
index d517029b1b..93b2fb4ea5 100644
--- a/lib/compiler/test/compilation_SUITE.erl
+++ b/lib/compiler/test/compilation_SUITE.erl
@@ -278,6 +278,16 @@ try_it(StartNode, Module, Conf) ->
?line ok = rpc:call(Node, ?MODULE, load_and_call, [Out, Module]),
?line test_server:timetrap_cancel(LastDog),
+ AsmDog = test_server:timetrap(test_server:minutes(10)),
+ io:format("Compiling (from assembly): ~s\n", [Src]),
+ {ok,_} = compile:file(Src, [to_asm,{outdir,Out},report|OtherOpts]),
+ Asm = filename:join(Out, lists:concat([Module, ".S"])),
+ CompRc3 = compile:file(Asm, [from_asm,{outdir,Out},report|OtherOpts]),
+ io:format("Result: ~p\n",[CompRc3]),
+ {ok,_} = CompRc3,
+ ok = rpc:call(Node, ?MODULE, load_and_call, [Out, Module]),
+ test_server:timetrap_cancel(AsmDog),
+
case StartNode of
false -> ok;
true -> ?line test_server:stop_node(Node)
diff --git a/lib/compiler/test/compile_SUITE.erl b/lib/compiler/test/compile_SUITE.erl
index 66ce6c00ab..4ec75d015e 100644
--- a/lib/compiler/test/compile_SUITE.erl
+++ b/lib/compiler/test/compile_SUITE.erl
@@ -769,8 +769,8 @@ do_core({M,A}, Outdir) ->
error
end.
-%% Compile to Beam assembly language (.S) and the try to
-%% run .S throught the compiler again.
+%% Compile to Beam assembly language (.S) and then try to
+%% run .S through the compiler again.
asm(Config) when is_list(Config) ->
?line Dog = test_server:timetrap(test_server:minutes(20)),
@@ -794,7 +794,7 @@ do_asm(Beam, Outdir) ->
{ok,Fd} = file:open(AsmFile, [write,{encoding,utf8}]),
beam_listing:module(Fd, Asm),
ok = file:close(Fd),
- case compile:file(AsmFile, [from_asm,no_postopt,binary,report]) of
+ case compile:file(AsmFile, [from_asm,binary,report]) of
{ok,M,_} ->
ok = file:delete(AsmFile);
Other ->
diff --git a/lib/debugger/src/Makefile b/lib/debugger/src/Makefile
index 85754da219..90189dd297 100644
--- a/lib/debugger/src/Makefile
+++ b/lib/debugger/src/Makefile
@@ -45,20 +45,6 @@ MODULES= \
dbg_iload \
dbg_iserver \
dbg_istk \
- dbg_ui_break \
- dbg_ui_break_win \
- dbg_ui_edit \
- dbg_ui_edit_win \
- dbg_ui_filedialog_win \
- dbg_ui_interpret \
- dbg_ui_mon \
- dbg_ui_mon_win \
- dbg_ui_settings \
- dbg_ui_trace \
- dbg_ui_trace_win \
- dbg_ui_view \
- dbg_ui_win \
- dbg_ui_winman \
dbg_wx_break \
dbg_wx_break_win \
dbg_wx_code \
diff --git a/lib/debugger/src/dbg_ui_break.erl b/lib/debugger/src/dbg_ui_break.erl
deleted file mode 100644
index 8b9a236ce7..0000000000
--- a/lib/debugger/src/dbg_ui_break.erl
+++ /dev/null
@@ -1,98 +0,0 @@
-%%
-%% %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(dbg_ui_break).
-
-%% External exports
--export([start/3, start/4, start/5]).
-
-%% Internal exports
--export([init/5]).
-
-%%====================================================================
-%% External exports
-%%====================================================================
-
-%%--------------------------------------------------------------------
-%% start(GS, Pos, Type)
-%% start(GS, Pos, Type, Module, Line)
-%% GS = graphics system identifier
-%% Pos = {X, Y}
-%% X = Y = integer()
-%% Type = line | conditional | function
-%% Module = atom()
-%% Line = integer()
-%%--------------------------------------------------------------------
-start(GS, Pos, Type) ->
- start(GS, Pos, Type, "", "").
-start(GS, Pos, Type, Mod) ->
- start(GS, Pos, Type, Mod, "").
-start(GS, Pos, Type, Mod, Line) ->
- spawn_link(?MODULE, init, [GS, Pos, Type, Mod, Line]).
-
-
-%%====================================================================
-%% Internal exports
-%%====================================================================
-
-init(GS, Pos, Type, Mod, Line) ->
- Win = dbg_ui_break_win:create_win(GS, Pos, Type, Mod, Line),
- if
- Type==function, is_atom(Mod) ->
- Win2 = gui_cmd({module, Mod}, Win),
- loop(Win2);
- true ->
- loop(Win)
- end.
-
-loop(Win) ->
- receive
-
- %% From the GUI
- GuiEvent when is_tuple(GuiEvent), element(1, GuiEvent)==gs ->
- Cmd = dbg_ui_break_win:handle_event(GuiEvent, Win),
- Win2 = gui_cmd(Cmd, Win),
- loop(Win2)
- end.
-
-gui_cmd(ignore, Win) ->
- Win;
-gui_cmd(stopped, _Win) ->
- exit(normal);
-gui_cmd({win, Win2}, _Win) ->
- Win2;
-gui_cmd({module, Mod}, Win) ->
- Funcs = int:functions(Mod),
- dbg_ui_break_win:update_functions(Win, Funcs);
-gui_cmd({break, DataL, Action}, _Win) ->
- Fun =
- fun(Data) ->
- case Data of
- [Mod, Line] ->
- int:break(Mod, Line),
- int:action_at_break(Mod, Line, Action);
- [Mod, Line, CMod, CFunc] ->
- int:break(Mod, Line),
- int:test_at_break(Mod, Line, {CMod, CFunc}),
- int:action_at_break(Mod, Line, Action);
- [Mod, Func, Arity] ->
- int:break_in(Mod, Func, Arity)
- end
- end,
- lists:foreach(Fun, DataL),
- exit(normal).
diff --git a/lib/debugger/src/dbg_ui_break_win.erl b/lib/debugger/src/dbg_ui_break_win.erl
deleted file mode 100644
index 11d810ccab..0000000000
--- a/lib/debugger/src/dbg_ui_break_win.erl
+++ /dev/null
@@ -1,314 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2002-2012. 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(dbg_ui_break_win).
--compile([{nowarn_deprecated_function,{gs,button,2}},
- {nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,create,3}},
- {nowarn_deprecated_function,{gs,entry,2}},
- {nowarn_deprecated_function,{gs,frame,2}},
- {nowarn_deprecated_function,{gs,label,2}},
- {nowarn_deprecated_function,{gs,listbox,2}},
- {nowarn_deprecated_function,{gs,menu,2}},
- {nowarn_deprecated_function,{gs,menuitem,2}},
- {nowarn_deprecated_function,{gs,radiobutton,2}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,window,2}}]).
-
-%% External exports
--export([create_win/5,
- update_functions/2,
- handle_event/2]).
-
--record(winInfo, {type, % line | conditional | function
- win, % gsobj()
- packer, % gsobj() | undefined
- entries, % [{atom|integer, GSobj()}]
- trigger, % enable | disable | delete
- ok, % gsobj()
- cancel, % gsobj()
- listbox, % gsobj()
- funcs=[] % [[Name, Arity]]
- }).
-
-%%====================================================================
-%% External exports
-%%====================================================================
-
-%%--------------------------------------------------------------------
-%% create_win(GS, Pos, Type, Mod, Line) -> #winInfo{}
-%% GS = graphics system identifier
-%% Pos = {X, Y}
-%% X = Y = integer()
-%% Type = line | conditional | function
-%% Mod = atom() | ""
-%% Line = integer() | ""
-%%--------------------------------------------------------------------
-create_win(GS, {X, Y}, function, Mod, _Line) ->
- Pad = 8,
- W = 230,
-
- Font = dbg_ui_win:font(normal),
-
- %% Window
- Win = gs:window(GS, [{title, "Function Break"}, {x, X}, {y, Y},
- {destroy, true}, {configure, true},
- {keypress, true}, {data, window}]),
-
- %% Frame
- Frm = gs:frame(Win, [{x, 0}, {y, 0}, {width, W}, {height, 190},
- {packer_x, [{fixed, 70}, {stretch, 1, W-80},
- {fixed, 10}]},
- {packer_y, [{fixed, 10}, {fixed, 30},
- {stretch, 1, 100}, {fixed, 40}]}]),
-
- %% Create input field (label+entry)
- gs:label(Frm, [{label, {text,"Module:"}}, {font, Font}, {align, e},
- {pack_x, 1}, {pack_y, 2}]),
- Ent = gs:entry(Frm, [{text, Mod},
- {pack_x, 2}, {pack_y, 2},
- {keypress, true}, {setfocus, true},
- {buttonpress, true}]),
- Entries = [{Ent, atom}],
-
- %% Create a listbox containing the functions of the module
- gs:label(Frm, [{label, {text,"Function:"}}, {font, Font}, {align, ne},
- {pack_x, 1}, {pack_y, 3}]),
- Lb = gs:listbox(Frm, [{bw, 2}, {relief, ridge}, {vscroll, right},
- {pack_x, 2}, {pack_y, 3},
- {selectmode, multiple}]),
-
- %% Add OK and Cancel buttons
- {Wbtn, Hbtn} = dbg_ui_win:min_size(["OK","Cancel"], 70, 30),
- Bot = gs:frame(Frm, [{pack_x, {1, 3}}, {pack_y, 4}]),
- OK = gs:button(Bot, [{x, Pad}, {y, Pad},
- {width, Wbtn}, {height, Hbtn},
- {label, {text,"OK"}}, {font, Font}]),
- Cancel = gs:button(Bot, [{x, W-Pad-Wbtn}, {y, Pad},
- {width, Wbtn}, {height, Hbtn},
- {label, {text,"Cancel"}}, {font, Font}]),
-
- Wfrm = gs:read(Frm, width), Hfrm = gs:read(Frm, height),
- gs:config(Win, [{width, Wfrm}, {height, Hfrm}, {map, true}]),
- #winInfo{type=function, win=Win,
- packer=Frm, entries=Entries, trigger=enable,
- ok=OK, cancel=Cancel, listbox=Lb, funcs=[]};
-create_win(GS, {X, Y}, Type, Mod, Line) ->
- Pad = 8,
- W = 230,
-
- Font = dbg_ui_win:font(normal),
-
- %% Window
- Title = case Type of
- line -> "Line Break";
- conditional -> "Conditional Break"
- end,
- Win = gs:window(GS, [{title, Title}, {x, X}, {y, Y},
- {destroy, true}]),
-
- %% Create input fields (label+entry)
- {Wlbl, Hlbl} = dbg_ui_win:min_size(["C-Function:"], 10, 30),
- Went = W-Wlbl-2*Pad,
- Labels = case Type of
- line ->
- [{atom,"Module:",Mod}, {integer,"Line:",Line}];
- conditional ->
- [{atom,"Module:",Mod}, {integer,"Line:",Line},
- {atom,"C-Module:",""}, {atom,"C-Function:",""}]
- end,
- Fun = fun({DataType, Label, Default}, Yin) ->
- gs:create(label, Win, [{x, Pad}, {y, Yin},
- {width,Wlbl}, {height,Hlbl},
- {label, {text,Label}},
- {font, Font}, {align, e}]),
- Ent = gs:create(entry, Win, [{x, Pad+Wlbl}, {y, Yin},
- {width, Went},
- {height, Hlbl},
- {text, Default},
- {keypress, true}]),
- {{Ent, DataType}, Yin+Hlbl}
- end,
- {Entries, Yacc} = lists:mapfoldl(Fun, Pad, Labels),
- {First, _DataType} = hd(Entries),
- gs:config(First, [{buttonpress, true}, {setfocus, true}]),
-
- %% Add 'trigger action' buttons
- {Wlbl2, Hlbl2} = dbg_ui_win:min_size(["Trigger Action"], 100, 20),
- Wfrm = Wlbl2+8, Hfrm = Hlbl2*4+4,
- Grp = erlang:now(),
- Frm = gs:frame(Win, [{x, W/2-Wfrm/2-2}, {y, Yacc+Pad-2},
- {width, Wfrm}, {height, Hfrm}, {bw, 2}]),
- gs:label(Frm, [{label, {text, "Trigger Action"}}, {font, Font},
- {x, 2}, {y, 0}, {width, Wlbl2}, {height, Hlbl2}]),
- gs:radiobutton(Frm, [{label, {text, "Enable"}}, {font, Font},
- {x, 10}, {y, Hlbl2},
- {width, Wlbl2-10}, {height, Hlbl2},
- {align, w}, {group, Grp},
- {data, {trigger, enable}},
- {select, true}]),
- gs:radiobutton(Frm, [{label, {text, "Disable"}}, {font, Font},
- {x, 10}, {y, Hlbl2*2},
- {width, Wlbl2-10}, {height, Hlbl2},
- {align, w}, {group, Grp},
- {data, {trigger, disable}}]),
- gs:radiobutton(Frm, [{label, {text, "Delete"}}, {font, Font},
- {x, 10}, {y, Hlbl2*3},
- {width, Wlbl2-10}, {height, Hlbl2},
- {align, w}, {group, Grp},
- {data, {trigger, delete}}]),
-
- %% Add OK and Cancel buttons
- {Wbtn, Hbtn} = dbg_ui_win:min_size(["OK","Cancel"], 70, 30),
- Ybtn = Yacc + Pad + Hfrm + Pad,
- OK = gs:button(Win, [{x, Pad}, {y, Ybtn},
- {width, Wbtn}, {height, Hbtn},
- {label, {text,"OK"}}, {font, Font}]),
- gs:button(Win, [{x, W-Pad-Wbtn}, {y, Ybtn},
- {width, Wbtn}, {height, Hbtn},
- {label, {text,"Cancel"}}, {font, Font}]),
-
- Hwin = Ybtn + Hbtn + Pad,
- gs:config(Win, [{width, W}, {height, Hwin}, {map, true}]),
-
- #winInfo{type=Type, win=Win,
- entries=Entries, trigger=enable, ok=OK}.
-
-%%--------------------------------------------------------------------
-%% update_functions(WinInfo, Funcs) -> WinInfo
-%% WinInfo = #winInfo{}
-%% Funcs = [{Name, Arity}]
-%% Name = atom()
-%% Arity = integer()
-%%--------------------------------------------------------------------
-update_functions(WinInfo, Funcs) ->
- Items = lists:map(fun([N, A]) -> io_lib:format("~p/~p", [N, A]) end,
- Funcs),
- gs:config(WinInfo#winInfo.listbox, [{items, Items},
- {setfocus, true}]),
- WinInfo#winInfo{funcs=Funcs}.
-
-%%--------------------------------------------------------------------
-%% handle_event(GSEvent, WinInfo) -> Command
-%% GSEvent = {gs, Id, Event, Data, Arg}
-%% WinInfo = #winInfo{}
-%% Command = ignore
-%% | stopped
-%% | {win, WinInfo}
-%% | {module, Mod}
-%% | {break, [[Mod, Line]], Action}
-%% | {break, [[Mod, Line, CMod, CFunc]], Action}
-%% | {break, [[Mod, Func, Arity]], Action}
-%%--------------------------------------------------------------------
-handle_event({gs, _Id, destroy, _Data, _Arg}, _WinInfo) ->
- stopped;
-handle_event({gs, _Id, configure, _Data, [W, H|_]}, WinInfo) ->
- gs:config(WinInfo#winInfo.packer, [{width, W-10}, {height, H-10}]),
- gs:config(WinInfo#winInfo.cancel, [{x, W-80}]),
- ignore;
-handle_event({gs, Ent, buttonpress, _,[N,X0,Y0|_]}, WinInfo) when N>1 ->
- %% Right (middle) mouse button click in module entry, display a
- %% menu containing all interpreted modules
- Mods = int:interpreted(),
- X = gs:read(Ent, x) + X0,
- Y = gs:read(Ent, y) + Y0,
- Menu = gs:menu(WinInfo#winInfo.win, [{post_at,{X,Y}}]),
- lists:foreach(fun(Mod) ->
- gs:menuitem(Menu, [{label,{text,Mod}},
- {data,{module,Mod}}])
- end,
- Mods),
- ignore;
-handle_event({gs, LB, keypress, window, [Key|_]}, WinInfo) ->
- %% Used for functional break window, since listboxes for some
- %% reason doesn't generate keypress events
- if
- Key/='Tab', Key/='Return' ->
- ignore;
- true ->
- handle_event({gs, LB, click, listbox, ["OK"]}, WinInfo)
- end;
-handle_event({gs, Ent, keypress, Data, [Key|_]}, WinInfo) ->
- case WinInfo#winInfo.type of
- function when Key/='Tab', Key/='Return' ->
- case gs:read(WinInfo#winInfo.listbox, items) of
- [] -> ignore;
- _Items ->
- gs:config(WinInfo#winInfo.listbox, clear),
- {win, WinInfo#winInfo{funcs=[]}}
- end;
- function -> % 'Return' | 'Tab' pressed in Module entry
- case check_input(WinInfo#winInfo.entries) of
- error -> ignore;
- [Mod] -> {module, Mod}
- end;
- _Type when Key=='Tab'; Key=='Return' ->
- case next_entry(Ent, WinInfo#winInfo.entries) of
- last ->
- gs:config(WinInfo#winInfo.ok, flash),
- handle_event({gs, Ent, click, Data, ["OK"]}, WinInfo);
- Next ->
- gs:config(Next, {setfocus, true}),
- ignore
- end;
- _Type -> ignore
- end;
-handle_event({gs, _Id, click, _Data, ["OK"|_]}, WinInfo) ->
- case check_input(WinInfo#winInfo.entries) of
- error -> ignore;
- Data when WinInfo#winInfo.type/=function ->
- {break, [Data], WinInfo#winInfo.trigger};
- [Mod] -> % Function break window
- case gs:read(WinInfo#winInfo.listbox, selection) of
- [] ->
- {module, Mod};
- IndexL ->
- Funcs = WinInfo#winInfo.funcs,
- Breaks =
- [[Mod|lists:nth(Index+1, Funcs)] || Index <- IndexL],
- {break, Breaks, enable}
- end
- end;
-handle_event({gs, _Id, click, _Data, ["Cancel"|_]}, _WinInfo) ->
- stopped;
-handle_event({gs, _Id, click, {trigger,Trigger}, _Arg}, WinInfo) ->
- {win, WinInfo#winInfo{trigger=Trigger}};
-handle_event({gs, _Id, click, {module, Mod}, _Arg}, WinInfo) ->
- {Ent, _DataType} = hd(WinInfo#winInfo.entries),
- gs:config(Ent, {insert,{0,Mod}}),
- ignore;
-handle_event(_GSEvent, _WinInfo) ->
- ignore.
-
-check_input(Entries) ->
- check_input(Entries, []).
-check_input([{Entry, Type} | Entries], Data) ->
- Str = gs:read(Entry, text),
- case erl_scan:string(Str) of
- {ok, [{Type, _Line, Val}], _EndLine} ->
- check_input(Entries, [Val|Data]);
- _Error -> error
- end;
-check_input([], Data) -> lists:reverse(Data).
-
-next_entry(Entry, [{Entry, _Type}]) ->
- last;
-next_entry(Entry, [{Entry, _Type1}, {Next, _Type2}|_]) ->
- Next;
-next_entry(Entry, [_|Entries]) ->
- next_entry(Entry, Entries).
diff --git a/lib/debugger/src/dbg_ui_edit.erl b/lib/debugger/src/dbg_ui_edit.erl
deleted file mode 100644
index 390e6acdb4..0000000000
--- a/lib/debugger/src/dbg_ui_edit.erl
+++ /dev/null
@@ -1,91 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2002-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(dbg_ui_edit).
-
-%% External exports
--export([start/5]).
-
-%% Internal exports
--export([init/6]).
-
--record(state, {win, % term() Edit dialog window data
- pid, % pid() Parent
- prompt % atom()
- }).
-
-%%====================================================================
-%% External exports
-%%====================================================================
-
-%%--------------------------------------------------------------------
-%% start(GS, Pos, Title, Prompt, {Type, Value})
-%% GS = graphics system identifier
-%% Pos = {X, Y}
-%% X = Y = integer()
-%% Title = string()
-%% Prompt = atom()
-%% Type = term | atom | float | integer | string
-%% Value = term()
-%%--------------------------------------------------------------------
-start(GS, Pos, Title, Prompt, Edit) ->
- case dbg_ui_winman:is_started(Title) of
- true -> ignore;
- false ->
- spawn(?MODULE, init, [self(), GS, Pos, Title, Prompt, Edit])
- end.
-
-
-%%====================================================================
-%% Internal exports
-%%====================================================================
-
-init(Pid, GS, Pos, Title, Prompt, Edit) ->
-
- %% Create edit dialog window
- Win = dbg_ui_edit_win:create_win(GS, Pos, Title, Prompt, Edit),
- Window = dbg_ui_edit_win:get_window(Win),
- dbg_ui_winman:insert(Title, Window),
- State = #state{win=Win, pid=Pid, prompt=Prompt},
-
- loop(State).
-
-loop(State) ->
- receive
-
- %% From the GUI
- GuiEvent when is_tuple(GuiEvent), element(1, GuiEvent)==gs ->
- Cmd = dbg_ui_edit_win:handle_event(GuiEvent,
- State#state.win),
- State2 = gui_cmd(Cmd, State),
- loop(State2);
-
- %% From the dbg_ui_winman process (Debugger window manager)
- {dbg_ui_winman, update_windows_menu, _Data} ->
- loop(State);
- {dbg_ui_winman, destroy} ->
- exit(normal)
- end.
-
-gui_cmd(ignore, State) ->
- State;
-gui_cmd(stopped, _State) ->
- exit(normal);
-gui_cmd({edit, Value}, State) ->
- State#state.pid ! {dbg_ui_edit, State#state.prompt, Value},
- exit(normal).
diff --git a/lib/debugger/src/dbg_ui_edit_win.erl b/lib/debugger/src/dbg_ui_edit_win.erl
deleted file mode 100644
index 2e9a685b57..0000000000
--- a/lib/debugger/src/dbg_ui_edit_win.erl
+++ /dev/null
@@ -1,128 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2002-2012. 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(dbg_ui_edit_win).
--compile([{nowarn_deprecated_function,{gs,button,2}},
- {nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,entry,2}},
- {nowarn_deprecated_function,{gs,label,2}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,window,2}}]).
-
-%% External exports
--export([create_win/5, get_window/1,
- handle_event/2]).
-
--record(winInfo, {window, % gsobj()
- entry, % gsobj()
- button, % gsobj()
- type % atom()
- }).
-
-%%====================================================================
-%% External exports
-%%====================================================================
-
-%%--------------------------------------------------------------------
-%% create_win(GS, Pos, Title, Prompt, {Type, Value}) -> #winInfo{}
-%% GS = graphics system identifier
-%% Pos = {X, Y}
-%% X = Y = integer()
-%% Title = string()
-%% Prompt = atom()
-%% Type = term | atom | float | integer | string
-%% Value = term()
-%%--------------------------------------------------------------------
-create_win(GS, {X, Y}, Title, Prompt, {Type, Value}) ->
- Pad=8,
-
- Font = dbg_ui_win:font(normal),
-
- %% Window
- Win = gs:window(GS, [{title, Title}, {x, X}, {y, Y},
- {destroy, true}]),
-
- %% Label
- {Wlbl, Hlbl} = dbg_ui_win:min_size([Prompt], 50, 30),
- gs:label(Win, [{x, Pad}, {y, Pad}, {width, Wlbl}, {height, Hlbl},
- {align, e}, {label, {text, Prompt}}, {font, Font}]),
-
-
- %% Entry
- {Went, _Hent} = dbg_ui_win:min_size([Value], 100, 20),
- Ent = gs:entry(Win, [{x, Pad+Wlbl}, {y, Pad},
- {width, Went}, {height, Hlbl},
- {text, Value},
- {keypress, true}]),
-
- %% OK and Cancel buttons
- W = Pad + Wlbl + Went + Pad,
- {Wbtn, Hbtn} = dbg_ui_win:min_size(["Cancel"], 70, 30),
- Ybtn = Pad + Hlbl + Pad,
- Btn = gs:button(Win, [{x, Pad}, {y, Ybtn},
- {width, Wbtn}, {height, Hbtn},
- {label, {text,"OK"}}, {font, Font}]),
- gs:button(Win, [{x, W-Pad-Wbtn}, {y, Ybtn},
- {width, Wbtn}, {height, Hbtn},
- {label, {text,"Cancel"}}, {font, Font}]),
-
- H = Ybtn + Hbtn + Pad,
- gs:config(Win, [{width, W}, {height, H}, {map, true}]),
-
- #winInfo{window=Win, entry=Ent, button=Btn, type=Type}.
-
-%%--------------------------------------------------------------------
-%% get_window(WinInfo) -> Window
-%% WinInfo = #winInfo{}
-%% Window = gsobj()
-%%--------------------------------------------------------------------
-get_window(WinInfo) ->
- WinInfo#winInfo.window.
-
-%%--------------------------------------------------------------------
-%% handle_event(GSEvent, WinInfo) -> Command
-%% GSEvent = {gs, Id, Event, Data, Arg}
-%% WinInfo = #winInfo{}
-%% Command = ignore
-%% | stopped
-%% | {edit, Value}
-%%--------------------------------------------------------------------
-handle_event({gs, _Id, destroy, _Data, _Arg}, _WinInfo) ->
- stopped;
-handle_event({gs, Id, keypress, Data, ['Return'|_]}, WinInfo) ->
- gs:config(WinInfo#winInfo.button, flash),
- handle_event({gs, Id, click, Data, ["OK"]}, WinInfo);
-handle_event({gs, _Id, click, _Data, ["OK"|_]}, WinInfo) ->
- Ent = WinInfo#winInfo.entry,
- Str = gs:read(Ent, text),
- Type = WinInfo#winInfo.type,
- case erl_scan:string(Str) of
- {ok, Tokens, _EndLine} when Type==term ->
- case erl_parse:parse_term(Tokens++[{dot, 1}]) of
- {ok, Value} -> {edit, Value};
- _Error -> ignore
- end;
- {ok, [{Type, _Line, Value}], _EndLine} when Type/=term ->
- {edit, Value};
- _ ->
- ignore
- end;
-handle_event({gs, _Id, click, _Data, ["Cancel"|_]}, _WinInfo) ->
- stopped;
-handle_event(_GSEvent, _WinInfo) ->
- ignore.
diff --git a/lib/debugger/src/dbg_ui_filedialog_win.erl b/lib/debugger/src/dbg_ui_filedialog_win.erl
deleted file mode 100644
index 52dc2012f3..0000000000
--- a/lib/debugger/src/dbg_ui_filedialog_win.erl
+++ /dev/null
@@ -1,340 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2002-2012. 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(dbg_ui_filedialog_win).
--compile([{nowarn_deprecated_function,{gs,button,2}},
- {nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,entry,3}},
- {nowarn_deprecated_function,{gs,label,2}},
- {nowarn_deprecated_function,{gs,listbox,3}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,window,2}}]).
-
-%% External exports
--export([create_win/6, create_win/7, get_window/1,
- tag/2,
- handle_event/2]).
-
--record(winInfo, {window, % gsobj()
- extra, % fun()
- cwd, % string()
- pattern % string()
- }).
-
-%%====================================================================
-%% External exports
-%%====================================================================
-
-%%--------------------------------------------------------------------
-%% create_win(GS, Title, Pos, Mode, Filter, Extra)
-%% create_win(GS, Title, Pos, Mode, Filter, Extra, FileName) -> #winInfo{}
-%% GS = term()
-%% Title = string()
-%% Pos = {X,Y}
-%% Mode = normal | multiselect
-%% Filter = string() File name that may include * symbols.
-%% Extra = fun(File) -> {true, tag} | true | {error, term()}
-%% FileName = string() Suggested file name when saving
-%%--------------------------------------------------------------------
-create_win(GS, Title, {X,Y}, Mode, Filter, Extra) ->
- create_win(GS, Title, {X,Y}, Mode, Filter, Extra, null).
-create_win(GS, Title, {X,Y}, Mode, Filter, Extra, FileName) ->
- Pad = 8,
- Wlb = 480, Hlb = 130,
-
- Font = dbg_ui_win:font(normal),
-
- {Wlbl, Hlbl} = dbg_ui_win:min_size(["Directories"], 80, 20),
- {Wbtn, Hbtn} = dbg_ui_win:min_size(["Filter","Cancel"], 70, 30),
-
- %% Window
- Win = gs:window(GS, [{title,Title}, {x, X}, {y,Y}, {destroy,true}]),
-
- %% 'Filter' label and entry (for selecting directory)
- gs:label(Win, [{label, {text,"Filter"}}, {font, Font}, {align, sw},
- {x, Pad+2}, {y, Pad}, {width,Wlbl}, {height,Hlbl}]),
- gs:entry('Filter', Win, [{x, Pad}, {y, Pad+Hlbl},
- {width, Wlb}, {height, Hbtn},
- {keypress, true}]),
-
- %% Listboxes (showing directories and files)
- Xmid = Pad + Wlb/2,
- Y2 = Pad + Hlbl + Hbtn + Pad,
- gs:label(Win, [{label, {text,"Directories"}},
- {font, Font}, {align, sw},
- {x, Pad+2}, {y, Y2},
- {width, Wlbl}, {height, Hlbl}]),
- gs:label(Win, [{label, {text,"Files"}},
- {font, Font}, {align, sw},
- {x, Xmid+Pad/2+2}, {y, Y2},
- {width, Wlbl}, {height, Hlbl}]),
- gs:listbox('Dirs', Win, [{x, Pad}, {y, Y2+Hlbl},
- {width, Wlb/2-Pad/2}, {height, Hlb},
- {vscroll, right},
- {click, true}, {doubleclick, true}]),
- gs:listbox('Files', Win, [{x, Xmid+Pad/2}, {y, Y2+Hlbl},
- {width, Wlb/2-Pad/2}, {height, Hlb},
- {vscroll, right},
- {click, true}, {doubleclick, true}]),
-
- %% 'Selection' label and entry (for selecting file)
- Y3 = Y2 + Hlbl + Hlb,
- gs:label(Win, [{label, {text,"Selection"}}, {font,Font}, {align,sw},
- {x, Pad+2}, {y, Y3}, {width, Wlbl}, {height, Hlbl}]),
- gs:entry('Selection', Win, [{x, Pad}, {y, Y3+Hlbl},
- {width, Wlb}, {height, Hbtn},
- {keypress, true}]),
-
- %% Buttons
- Y4 = Y3 + Hlbl + Hbtn + Pad,
- Wb = Wlb - Wbtn,
- Opts = [{y, Y4}, {width, Wbtn}, {height, Hbtn}, {font, Font}],
- case Mode of
- normal ->
- gs:button(Win, [{label, {text,"OK"}}, {x, Pad},
- {data, select} | Opts]),
- gs:button(Win, [{label, {text,"Filter"}}, {x, Wlb/2-Wbtn/2},
- {data, filter} | Opts]),
- gs:button(Win, [{label, {text,"Cancel"}}, {x, Pad+Wb},
- {data, done} | Opts]);
- multiselect ->
- gs:button(Win, [{label, {text,"Choose"}}, {x, Pad},
- {data, select} | Opts]),
- gs:button(Win, [{label, {text,"All"}}, {x, Pad+Wb/3},
- {data, multiselect} | Opts]),
- gs:button(Win, [{label, {text,"Filter"}}, {x, Pad+2*Wb/3},
- {data, filter} | Opts]),
- gs:button(Win, [{label, {text,"Done"}}, {x, Pad+Wb},
- {data, done} | Opts])
- end,
-
- %% Insert contents
- {ok, Home} = file:get_cwd(),
- {Cwd, Pattern} = update_win(Filter, Extra, Home),
- if
- is_list(FileName) ->
- gs:config('Selection', {text, filename:join(Cwd,FileName)});
- true -> ignore
- end,
-
- Wwin = Pad + Wlb + Pad,
- Hwin = Y4 + Hbtn + Pad,
- gs:config(Win, [{width, Wwin}, {height, Hwin}, {map, true}]),
-
- #winInfo{window=Win, extra=Extra, cwd=Cwd, pattern=Pattern}.
-
-%%--------------------------------------------------------------------
-%% get_window(WinInfo) -> Window
-%% WinInfo = #winInfo{}
-%% Window = gsobj()
-%%--------------------------------------------------------------------
-get_window(WinInfo) ->
- WinInfo#winInfo.window.
-
-%%--------------------------------------------------------------------
-%% tag(WinInfo, File)
-%% WinInfo = #winInfo{}
-%% File = string()
-%%--------------------------------------------------------------------
-tag(WinInfo, File0) ->
- File = relfile(WinInfo#winInfo.cwd, File0),
- case member(File, gs:read('Files', items)) of
- {true, Index} -> gs:config('Files', {change, {Index, tag(File)}});
- false -> ignore
- end.
-
-tag(Str) -> [$*|Str].
-untag([$*|Str]) -> Str;
-untag([$(|Str]) -> [$)|Rts] = lists:reverse(Str),lists:reverse(Rts);
-untag(Str) -> Str.
-
-member(E, L) -> member(E, L, 0).
-member(E, [E|_], I) -> {true, I};
-member(E, [_|T], I) -> member(E, T, I+1);
-member(_E, [], _I) -> false.
-
-%%--------------------------------------------------------------------
-%% handle_event(GSEvent, WinInfo) -> Command
-%% GSEvent = {gs, Id, Event, Data, Arg}
-%% WinInfo = #winInfo{}
-%% Command = ignore
-%% | {stopped, Dir}
-%% | {win, WinInfo}
-%% | {select, File} | {multiselect, Dir, FileNames}
-%%--------------------------------------------------------------------
-handle_event({gs, _Id, destroy, _Data, _Args}, WinInfo) ->
- {stopped, WinInfo#winInfo.cwd};
-
-handle_event({gs, 'Filter', keypress, _Data, ['Return'|_]}, WinInfo) ->
- handle_event({gs, null, click, filter, null}, WinInfo);
-handle_event({gs, 'Selection', keypress, _Data, ['Return'|_]}, WinInfo) ->
- handle_event({gs, null, click, select, null}, WinInfo);
-
-handle_event({gs, 'Dirs', click, _Data, [0,"..",true|_]}, WinInfo) ->
- Filter = filename:join(filename:dirname(WinInfo#winInfo.cwd),
- WinInfo#winInfo.pattern),
- gs:config('Filter', {text, Filter}),
- ignore;
-handle_event({gs, 'Dirs', click, _Data, [_Index,Str,true|_]}, WinInfo) ->
- Filter = filename:join([WinInfo#winInfo.cwd, Str,
- WinInfo#winInfo.pattern]),
- gs:config('Filter', {text, Filter}),
- ignore;
-handle_event({gs, 'Dirs', doubleclick, _Data, _Arg}, WinInfo) ->
- handle_event({gs, null, click, filter, null}, WinInfo);
-
-handle_event({gs, 'Files', click, _Data, [_Index,Str,true|_]}, WinInfo) ->
- Selection = filename:join(WinInfo#winInfo.cwd, untag(Str)),
- gs:config('Selection', {text, Selection}),
- ignore;
-handle_event({gs, 'Files', doubleclick, _Data, _Arg}, WinInfo) ->
- handle_event({gs, null, click, select, null}, WinInfo);
-
-handle_event({gs, _Id, click, select, _Arg}, _WinInfo) ->
- {select, gs:read('Selection', text)};
-handle_event({gs, _Id, click, multiselect, _Arg}, WinInfo) ->
- Files = [untag(File) || File <- gs:read('Files', items)],
- {multiselect, WinInfo#winInfo.cwd, Files};
-handle_event({gs, _Id, click, filter, _Arg}, WinInfo) ->
- {Cwd, Pattern} = update_win(gs:read('Filter', text),
- WinInfo#winInfo.extra,
- WinInfo#winInfo.cwd),
- {win, WinInfo#winInfo{cwd=Cwd, pattern=Pattern}};
-handle_event({gs, _Id, click, done, _Arg}, WinInfo) ->
- {stopped, WinInfo#winInfo.cwd};
-
-handle_event(_GSEvent, _WinInfo) ->
- ignore.
-
-%%====================================================================
-%% Internal functions
-%%====================================================================
-
-update_win(Filter, ExtraFilter, Prev) ->
- {Res, {Filter2, Cwd, FilePattern}} = check_filter(Filter, Prev),
-
- Dirs = [".." | get_subdirs(Cwd)],
-
- gs:config('Filter', {text, Filter2}),
- gs:config('Dirs', {items, Dirs}),
- gs:config('Selection', {text, Cwd}),
-
- case Res of
- ok ->
- Matching = lists:sort(filelib:wildcard(Filter2, erl_prim_loader)),
- Files = extra_filter(Matching, Cwd, ExtraFilter),
- gs:config('Files', {items, Files});
- error ->
- gs:config('Files', beep)
- end,
-
- {Cwd, FilePattern}.
-
-%% check_filter(Filter, Prev) -> {ok, Res} | {error, Res}
-%% Res = {Filter, Cwd, FilePattern}
-%% Filter = Prev = Cwd = FilePattern = string()
-check_filter(Filter0, Prev) ->
- Filter = case filename:pathtype(Filter0) of
- absolute -> Filter0;
- _Relative -> filename:absname(Filter0, Prev)
- end,
- Comps = filename:split(Filter),
- Last = lists:last(Comps),
- FilePattern = case is_pattern(Last) of
- true -> Last;
- false -> "*"
- end,
- {Cwd, Rest} = max_existing(Comps),
- case Rest of
- [] ->
- %% Filter = existing file or directory
- Res = case filelib:is_dir(Filter, erl_prim_loader) of
- true -> {filename:join(Filter, "*"), Filter, "*"};
- false -> {Filter, filename:dirname(Filter),
- filename:basename(Filter)}
- end,
- {ok, Res};
- [FilePattern] ->
- %% Filter = existing dir and valid pattern
- {ok, {Filter, Cwd, FilePattern}};
- Comps ->
- %% Filter = garbage
- {error, {Prev, Prev, "*"}};
- [Name|_Names] ->
- %% Filter = existing dir ++ pattern or non-existing file/dir
- case is_pattern(Name) of
- true -> {ok, {Filter, Cwd, FilePattern}};
- false -> {error, {Cwd, Cwd, ""}}
- end
- end.
-
-max_existing([Name | Names]) ->
- case filelib:is_file(Name, erl_prim_loader) of
- true -> max_existing(Name, Names);
- false -> {[], [Name | Names]}
- end.
-max_existing(Dir, [Name | Names]) ->
- Dir2 = filename:join(Dir, Name),
- case filelib:is_file(Dir2, erl_prim_loader) of
- true when Names =:= [] -> {Dir2, []};
- true -> max_existing(Dir2, Names);
- false -> {Dir, [Name | Names]}
- end.
-
-is_pattern(Str) ->
- lists:member($*, Str).
-
-extra_filter([File|Files], Dir, Fun) ->
- case Fun(File) of
- true ->
- [relfile(Dir, File) | extra_filter(Files, Dir, Fun)];
- {true,tag} ->
- [[$*|relfile(Dir,File)] | extra_filter(Files, Dir, Fun)];
- {true,disable} ->
- [[$(|relfile(Dir,File)]++[$)] | extra_filter(Files, Dir, Fun)];
- {error, _Reason} -> extra_filter(Files, Dir, Fun)
- end;
-extra_filter([], _Dir, _Fun) -> [].
-
-get_subdirs(Dir) ->
- case erl_prim_loader:list_dir(Dir) of
- {ok, FileNames} ->
- X = [FN || FN <- FileNames,
- filelib:is_dir(filename:join(Dir, FN), erl_prim_loader)],
- lists:sort(X);
- _Error ->
- []
- end.
-
-%% Return the "remainder" of a file name relative a dir name, examples:
-%% relfile("/home/gunilla", "/home/gunilla/m.erl") -> "m.erl"
-%% relfile("/home/gunilla/dir", "/home/gunilla/dir/m.erl") -> "dir/m.erl"
-%% relfile("/home/gunilla", "/home/arne/m.erl") -> "/home/arne/m.erl"
-relfile(Dir, File) ->
- case compare(Dir, File) of
- error -> File;
- RelFile -> RelFile
- end.
-
-compare([_|Dir], [_|File]) ->
- compare(Dir, File);
-compare([], [$/|File]) ->
- File;
-compare(_, _) ->
- error.
diff --git a/lib/debugger/src/dbg_ui_interpret.erl b/lib/debugger/src/dbg_ui_interpret.erl
deleted file mode 100644
index 73392d40cb..0000000000
--- a/lib/debugger/src/dbg_ui_interpret.erl
+++ /dev/null
@@ -1,161 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2011. 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(dbg_ui_interpret).
-
--include_lib("kernel/include/file.hrl").
-
-%% External exports
--export([start/4]).
-
-%% Internal exports
--export([init/6]).
-
--record(state, {gs, % term() Graphics system id
- win, % term() Interpret dialog window data
- monitor, % pid() Monitor pid
- mode % local | global
- }).
-
-%%====================================================================
-%% External exports
-%%====================================================================
-
-%%--------------------------------------------------------------------
-%% start(GS, Pos, Dir, Mode)
-%% GS = Graphics system id
-%% Dir = string()
-%% Pos = {X,Y}
-%% Mode = local | global
-%%--------------------------------------------------------------------
-start(GS, Pos, Dir, Mode) ->
- Title = "Interpret Dialog",
- case dbg_ui_winman:is_started(Title) of
- true -> ignore;
- false ->
- spawn(?MODULE, init, [self(), GS, Pos, Title, Dir, Mode])
- end.
-
-%%====================================================================
-%% Internal exports
-%%====================================================================
-
-init(Monitor, GS, Pos, Title, Dir, Mode) ->
- Filter = filename:join(Dir, "*.erl"),
- Extra = fun(File) ->
- case int:interpretable(File) of
- true ->
- ModS = filename:basename(File, ".erl"),
- Mod = list_to_atom(ModS),
- case int:file(Mod) of
- File -> {true, tag};
- _ -> true % {error,not_loaded} | File2
- end;
- _Error -> {true,disable}
- end
- end,
-
- %% Create interpret dialog window
- Win = dbg_ui_filedialog_win:create_win(GS, Title, Pos, multiselect,
- Filter, Extra),
- Window = dbg_ui_filedialog_win:get_window(Win),
- dbg_ui_winman:insert(Title, Window),
-
- State = #state{gs=GS, win=Win, monitor=Monitor, mode=Mode},
- loop(State).
-
-
-%%====================================================================
-%% Main loop and message handling
-%%====================================================================
-
-loop(State) ->
- receive
-
- %% From the GUI
- GuiEvent when is_tuple(GuiEvent), element(1, GuiEvent)==gs ->
- Cmd = dbg_ui_filedialog_win:handle_event(GuiEvent,
- State#state.win),
- State2 = gui_cmd(Cmd, State),
- loop(State2);
-
- %% From the dbg_ui_winman process (Debugger window manager)
- {dbg_ui_winman, update_windows_menu, _Data} ->
- loop(State);
- {dbg_ui_winman, destroy} ->
- exit(normal)
- end.
-
-gui_cmd(ignore, State) ->
- State;
-gui_cmd({stopped, Dir}, State) ->
- State#state.monitor ! {dbg_ui_interpret, Dir},
- exit(normal);
-gui_cmd({win, Win}, State) ->
- State#state{win=Win};
-gui_cmd({select, File}, State) ->
- Res = case State#state.mode of
- local -> int:i(File);
- global -> int:ni(File)
- end,
-
- case Res of
- %% Interpretation succeeded, tag the file name
- {module, _Mod} ->
- dbg_ui_filedialog_win:tag(State#state.win, File);
-
- %% Interpretation failed
- error ->
- Error = format_error(int:interpretable(File)),
- Msg = ["Error when interpreting:", File, Error],
- Window = dbg_ui_filedialog_win:get_window(State#state.win),
- tool_utils:notify(Window, Msg)
- end,
- State;
-gui_cmd({multiselect, Dir, FileNames}, State) ->
- interpret_all(State, Dir, FileNames),
- State.
-
-interpret_all(State, Dir, [File0|Files]) ->
- File = filename:join(Dir, File0),
- Res = case State#state.mode of
- local -> int:i(File);
- global -> int:ni(File)
- end,
- case Res of
- {module, _Mod} ->
- dbg_ui_filedialog_win:tag(State#state.win, File),
- interpret_all(State, Dir, Files);
- error ->
- Window = dbg_ui_filedialog_win:get_window(State#state.win),
- Error = format_error(int:interpretable(File)),
- Msg = ["Error when interpreting:", File, Error,
- "OK to continue?"],
- case tool_utils:confirm(Window, Msg) of
- ok -> interpret_all(State, Dir, Files);
- cancel -> true
- end
- end;
-interpret_all(_State, _Dir, []) ->
- true.
-
-format_error({error,no_beam}) -> "No BEAM file";
-format_error({error,no_debug_info}) -> "No debug_info in BEAM file";
-format_error({error,badarg}) -> "File does not exist";
-format_error({error,{app,App}}) ->
- "Cannot interpret "++atom_to_list(App)++" modules".
diff --git a/lib/debugger/src/dbg_ui_mon.erl b/lib/debugger/src/dbg_ui_mon.erl
deleted file mode 100644
index 82fe210968..0000000000
--- a/lib/debugger/src/dbg_ui_mon.erl
+++ /dev/null
@@ -1,738 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2010. 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(dbg_ui_mon).
-
--include_lib("kernel/include/file.hrl").
-
-%% External exports
--export([start/2, stop/0]).
-
--define(TRACEWIN, ['Button Area', 'Evaluator Area', 'Bindings Area']).
--define(BACKTRACE, 100).
-
--record(pinfo, {pid, % pid()
- status % break | exit | idle | running | waiting
- }).
-
--record(state, {mode, % local | global
- starter, % bool() 'true' if int was started by me
-
- gs, % term() Graphics system id
- win, % term() Monitor window data
- focus, % undefined | #pinfo{} Process in focus
- coords, % {X,Y} Mouse pointer position
-
- intdir, % string() Default dir
- pinfos, % [#pinfo{}] Debugged processes
-
- tracewin, % [Area] Areas shown in trace window
- backtrace, % integer() Number of call frames to fetch
-
- attach, % false | {Flags, Function}
-
- sfile, % default | string() Settings file
- changed % boolean() Settings have been changed
- }).
-
-%%====================================================================
-%% External exports
-%%====================================================================
-
-%%--------------------------------------------------------------------
-%% start(Mode, SFile) -> {ok, Pid} | {error, Reason}
-%% Mode = local | global
-%% SFile = string() | default Settings file
-%% Pid = pid()
-%% Reason = {already_started,Pid} | term()
-%%--------------------------------------------------------------------
-start(Mode, SFile) ->
- case whereis(?MODULE) of
- undefined ->
- CallingPid = self(),
- Pid = spawn(fun () -> init(CallingPid, Mode, SFile) end),
- receive
- {initialization_complete, Pid} ->
- {ok, Pid};
- Error ->
- Error
- end;
-
- Pid ->
- {error, {already_started,Pid}}
- end.
-
-%%--------------------------------------------------------------------
-%% stop() -> ok
-%%--------------------------------------------------------------------
-stop() ->
- case whereis(?MODULE) of
- undefined ->
- ok;
- Pid ->
- Flag = process_flag(trap_exit, true),
- link(Pid),
- Pid ! stop,
- receive
- {'EXIT', Pid, stop} ->
- process_flag(trap_exit, Flag),
- ok
- end
- end.
-
-
-%%====================================================================
-%% Initialization
-%%====================================================================
-
-init(CallingPid, Mode, SFile) ->
- register(?MODULE, self()),
-
- %% Graphics system
- case catch dbg_ui_mon_win:init() of
- {'EXIT', Reason} ->
- CallingPid ! {error, Reason};
- GS ->
- init2(CallingPid, Mode, SFile, GS)
- end.
-
-init2(CallingPid, Mode, SFile, GS) ->
-
- %% Start Int if necessary and subscribe to information from it
- Bool = case int:start() of
- {ok, _Int} -> true;
- {error, {already_started, _Int}} -> false
- end,
- int:subscribe(),
-
- %% Start other necessary stuff
- dbg_ui_winman:start(), % Debugger window manager
-
- %% Create monitor window
- Title = "Monitor",
- Win = dbg_ui_mon_win:create_win(GS, Title, menus()),
- Window = dbg_ui_mon_win:get_window(Win),
- dbg_ui_winman:insert(Title, Window),
-
- %% Initial process state
- State1 = #state{mode = Mode,
- starter = Bool,
-
- gs = GS,
- win = Win,
- focus = undefined,
- coords = {0,0},
-
- intdir = element(2, file:get_cwd()),
- pinfos = [],
-
- sfile = SFile,
- changed = false
- },
-
- State2 = init_options(?TRACEWIN, % Trace Window
- int:auto_attach(), % Auto Attach
- int:stack_trace(), % Stack Trace
- ?BACKTRACE, % Back Trace Size
- State1),
-
- State3 = init_contents(int:interpreted(), % Modules
- int:all_breaks(), % Breakpoints
- int:snapshot(), % Processes
- State2),
-
- %% Disable/enable functionality according to process in focus (none)
- gui_enable_functions(State3#state.focus),
-
- CallingPid ! {initialization_complete, self()},
-
- if
- SFile =:= default ->
- loop(State3);
- true ->
- loop(load_settings(SFile, State3))
- end.
-
-init_options(TraceWin, AutoAttach, StackTrace, BackTrace, State) ->
- lists:foreach(fun(Area) ->
- dbg_ui_mon_win:select(Area, true)
- end,
- TraceWin),
-
- case AutoAttach of
- false -> ignore;
- {Flags, _Function} ->
- dbg_ui_mon_win:show_option(State#state.win,
- auto_attach, Flags),
- lists:foreach(fun(Flag) ->
- dbg_ui_mon_win:select(map(Flag), true)
- end,
- Flags)
- end,
-
- dbg_ui_mon_win:show_option(State#state.win,
- stack_trace, StackTrace),
- dbg_ui_mon_win:select(map(StackTrace), true),
-
- dbg_ui_mon_win:show_option(State#state.win, back_trace, BackTrace),
-
- State#state{tracewin=TraceWin, backtrace=BackTrace}.
-
-init_contents(Mods, Breaks, Processes, State) ->
- Win2 =
- lists:foldl(fun(Mod, Win) ->
- dbg_ui_mon_win:add_module(Win,'Module',Mod)
- end,
- State#state.win,
- Mods),
-
- Win3 =
- lists:foldl(fun(Break, Win) ->
- dbg_ui_mon_win:add_break(Win,'Break',Break)
- end,
- Win2,
- Breaks),
-
- lists:foldl(fun(PidTuple, State0) ->
- int_cmd({new_process, PidTuple}, State0)
- end,
- State#state{win=Win3},
- Processes).
-
-
-%%====================================================================
-%% Main loop and message handling
-%%====================================================================
-
-loop(State) ->
- receive
-
- stop ->
- gui_cmd(stopped, State);
-
- %% From the GUI
- GuiEvent when is_tuple(GuiEvent), element(1, GuiEvent) =:= gs ->
- Cmd = dbg_ui_mon_win:handle_event(GuiEvent,State#state.win),
- State2 = gui_cmd(Cmd, State),
- loop(State2);
-
- %% From the interpreter process
- {int, Cmd} ->
- State2 = int_cmd(Cmd, State),
- loop(State2);
-
- %% From the dbg_ui_interpret process
- {dbg_ui_interpret, Dir} ->
- loop(State#state{intdir=Dir});
-
- %% From the dbg_ui_edit process
- {dbg_ui_edit, 'Backtrace:', BackTrace} ->
- dbg_ui_mon_win:show_option(State#state.win,
- back_trace, BackTrace),
- loop(State#state{backtrace=BackTrace});
-
- %% From the dbg_ui_settings process
- {dbg_ui_settings, SFile, Action} ->
- State2 = case Action of
- load -> load_settings(SFile, State);
- save -> save_settings(SFile, State)
- end,
- loop(State2);
-
- %% From the dbg_ui_winman process (Debugger window manager)
- {dbg_ui_winman, update_windows_menu, Data} ->
- dbg_ui_winman:update_windows_menu(Data),
- loop(State)
- end.
-
-%%--Commands from the GUI---------------------------------------------
-%% Act upon a command from the GUI. In most cases, it is only necessary
-%% to call a relevant int-function. int will then report when the action
-%% has been taken.
-
-gui_cmd(ignore, State) ->
- State;
-gui_cmd(stopped, State) ->
- if
- State#state.starter =:= true -> int:stop();
- true -> int:auto_attach(false)
- end,
- exit(stop);
-gui_cmd({coords, Coords}, State) ->
- State#state{coords=Coords};
-
-gui_cmd({shortcut, Key}, State) ->
- case shortcut(Key) of
- {always, Cmd} -> gui_cmd(Cmd, State);
- {if_enabled, Cmd} ->
- case dbg_ui_mon_win:is_enabled(Cmd) of
- true -> gui_cmd(Cmd, State);
- false -> State
- end;
- false -> State
- end;
-
-%% File Menu
-gui_cmd('Load Settings...', State) ->
- Window = dbg_ui_mon_win:get_window(State#state.win),
- dbg_ui_settings:start(Window, State#state.coords,
- load, State#state.sfile),
- State;
-gui_cmd('Save Settings...', State) ->
- Window = dbg_ui_mon_win:get_window(State#state.win),
- dbg_ui_settings:start(Window, State#state.coords,
- save, State#state.sfile),
- State;
-gui_cmd('Exit', State) ->
- gui_cmd(stopped, State);
-
-%% Edit Menu
-gui_cmd('Refresh', State) ->
- int:clear(),
- Win = dbg_ui_mon_win:clear_processes(State#state.win),
- gui_enable_functions(undefined),
- State2 = State#state{win=Win, focus=undefined, pinfos=[]},
- lists:foldl(fun(PidTuple, S) ->
- int_cmd({new_process,PidTuple}, S)
- end,
- State2,
- int:snapshot());
-gui_cmd('Kill All', State) ->
- lists:foreach(fun(PInfo) ->
- case PInfo#pinfo.status of
- exit -> ignore;
- _Status -> exit(PInfo#pinfo.pid, kill)
- end
- end,
- State#state.pinfos),
- State;
-
-%% Module Menu
-gui_cmd('Interpret...', State) ->
- dbg_ui_interpret:start(State#state.gs, State#state.coords,
- State#state.intdir, State#state.mode),
- State;
-gui_cmd('Delete All Modules', State) ->
- lists:foreach(fun(Mod) -> int:nn(Mod) end, int:interpreted()),
- State;
-gui_cmd({module, Mod, What}, State) ->
- case What of
- delete -> int:nn(Mod);
- view -> dbg_ui_view:start(State#state.gs, Mod)
- end,
- State;
-
-%% Process Menu
-gui_cmd('Step', State) ->
- int:step((State#state.focus)#pinfo.pid),
- State;
-gui_cmd('Next', State) ->
- int:next((State#state.focus)#pinfo.pid),
- State;
-gui_cmd('Continue', State) ->
- int:continue((State#state.focus)#pinfo.pid),
- State;
-gui_cmd('Finish ', State) ->
- int:finish((State#state.focus)#pinfo.pid),
- State;
-gui_cmd('Attach', State) ->
- Pid = (State#state.focus)#pinfo.pid,
- case dbg_ui_winman:is_started(dbg_ui_trace:title(Pid)) of
- true -> ignore;
- false -> int:attach(Pid, trace_function(State))
- end,
- State;
-gui_cmd('Kill', State) ->
- exit((State#state.focus)#pinfo.pid, kill),
- State;
-
-%% Break Menu
-gui_cmd('Line Break...', State) ->
- dbg_ui_break:start(State#state.gs, State#state.coords, line),
- State;
-gui_cmd('Conditional Break...', State) ->
- dbg_ui_break:start(State#state.gs, State#state.coords, conditional),
- State;
-gui_cmd('Function Break...', State) ->
- dbg_ui_break:start(State#state.gs, State#state.coords, function),
- State;
-gui_cmd('Enable All', State) ->
- Breaks = int:all_breaks(),
- lists:foreach(fun ({{Mod, Line}, _Options}) ->
- int:enable_break(Mod, Line)
- end,
- Breaks),
- State;
-gui_cmd('Disable All', State) ->
- Breaks = int:all_breaks(),
- lists:foreach(fun ({{Mod, Line}, _Options}) ->
- int:disable_break(Mod, Line)
- end,
- Breaks),
- State;
-gui_cmd('Delete All', State) ->
- int:no_break(),
- State;
-gui_cmd({break, {Mod, Line}, What}, State) ->
- case What of
- delete -> int:delete_break(Mod, Line);
- {status, inactive} -> int:disable_break(Mod, Line);
- {status, active} -> int:enable_break(Mod, Line);
- {trigger, Action} -> int:action_at_break(Mod, Line, Action)
- end,
- State;
-
-%% Options Commands
-gui_cmd({'Trace Window', TraceWin}, State) ->
- State2 = State#state{tracewin=TraceWin},
- case State#state.attach of
- false -> ignore;
- {Flags, {dbg_ui_trace, start, StartFlags}} ->
- case trace_function(State2) of
- {_, _, StartFlags} -> ignore;
- NewFunction -> % {_, _, NewStartFlags}
- int:auto_attach(Flags, NewFunction)
- end;
- _AutoAttach -> ignore
- end,
- State2;
-gui_cmd({'Auto Attach', When}, State) ->
- if
- When =:= [] -> int:auto_attach(false);
- true ->
- Flags = [map(Name) || Name <- When],
- int:auto_attach(Flags, trace_function(State))
- end,
- State;
-gui_cmd({'Stack Trace', [Name]}, State) ->
- int:stack_trace(map(Name)),
- State;
-gui_cmd('Back Trace Size...', State) ->
- dbg_ui_edit:start(State#state.gs, State#state.coords, "Backtrace",
- 'Backtrace:', {integer, State#state.backtrace}),
- State;
-
-%% Help Menu
-gui_cmd('Debugger', State) ->
- HelpFile = filename:join([code:lib_dir(debugger), "doc", "html", "index.html"]),
- Window = dbg_ui_mon_win:get_window(State#state.win),
- tool_utils:open_help(Window, HelpFile),
- State;
-
-gui_cmd({focus, Pid, Win}, State) ->
- {value, PInfo} =
- lists:keysearch(Pid, #pinfo.pid, State#state.pinfos),
- gui_enable_functions(PInfo),
- State#state{win=Win, focus=PInfo};
-gui_cmd(default, State) ->
- case lists:member('Attach', menus(enabled, State#state.focus)) of
- true -> gui_cmd('Attach', State);
- false -> State
- end.
-
-%%--Commands from the interpreter-------------------------------------
-
-int_cmd({interpret, Mod}, State) ->
- Win = dbg_ui_mon_win:add_module(State#state.win, 'Module', Mod),
- State#state{win=Win};
-int_cmd({no_interpret, Mod}, State) ->
- Win = dbg_ui_mon_win:delete_module(State#state.win, Mod),
- State#state{win=Win};
-
-int_cmd({new_process, {Pid, Function, Status, Info}}, State) ->
-
- %% Create record with information about the process
- Name = registered_name(Pid),
- PInfo = #pinfo{pid=Pid, status=Status},
-
- %% Update window
- Win = dbg_ui_mon_win:add_process(State#state.win,
- Pid, Name, Function, Status, Info),
-
- %% Store process information
- PInfos = State#state.pinfos ++ [PInfo],
- State#state{win=Win, pinfos=PInfos};
-int_cmd({new_status, Pid, Status, Info}, State) ->
-
- %% Find stored information about the process
- PInfos = State#state.pinfos,
- {value, PInfo} = lists:keysearch(Pid, #pinfo.pid, PInfos),
-
- %% Update process information
- PInfo2 = PInfo#pinfo{status=Status},
- PInfos2 = lists:keyreplace(Pid, #pinfo.pid, PInfos, PInfo2),
- State2 = State#state{pinfos=PInfos2},
-
- %% Update window
- dbg_ui_mon_win:update_process(State2#state.win, Pid, Status, Info),
- case State2#state.focus of
- #pinfo{pid=Pid} ->
- gui_enable_functions(PInfo2),
- State2#state{focus=PInfo2};
- _ ->
- State2
- end;
-
-int_cmd({new_break, Break}, State) ->
- Win = dbg_ui_mon_win:add_break(State#state.win, 'Break', Break),
- State#state{win=Win};
-int_cmd({delete_break, Point}, State) ->
- Win = dbg_ui_mon_win:delete_break(State#state.win, Point),
- State#state{win=Win};
-int_cmd({break_options, Break}, State) ->
- dbg_ui_mon_win:update_break(State#state.win, Break),
- State;
-int_cmd(no_break, State) ->
- Win = dbg_ui_mon_win:clear_breaks(State#state.win),
- State#state{win=Win};
-int_cmd({no_break, Mod}, State) ->
- Win = dbg_ui_mon_win:clear_breaks(State#state.win, Mod),
- State#state{win=Win};
-
-int_cmd({auto_attach, AutoAttach}, State) ->
- OnFlags = case AutoAttach of
- false -> [];
- {Flags, _Function} -> Flags
- end,
- OffFlags = [init, exit, break] -- OnFlags,
- dbg_ui_mon_win:show_option(State#state.win, auto_attach, OnFlags),
- lists:foreach(fun(Flag) ->
- dbg_ui_mon_win:select(map(Flag), true)
- end,
- OnFlags),
- lists:foreach(fun(Flag) ->
- dbg_ui_mon_win:select(map(Flag), false)
- end,
- OffFlags),
- State#state{attach=AutoAttach};
-int_cmd({stack_trace, Flag}, State) ->
- dbg_ui_mon_win:show_option(State#state.win, stack_trace, Flag),
- dbg_ui_mon_win:select(map(Flag), true),
- State.
-
-
-%%====================================================================
-%% GUI auxiliary functions
-%%====================================================================
-
-menus() ->
- [{'File', [{'Load Settings...', 0},
- {'Save Settings...', 2},
- separator,
- {'Exit', 0}]},
- {'Edit', [{'Refresh', no},
- {'Kill All', no}]},
- {'Module', [{'Interpret...', 0},
- {'Delete All Modules', no},
- separator]},
- {'Process', [{'Step', 0},
- {'Next', 0},
- {'Continue', 0},
- {'Finish ', 0},
- separator,
- {'Attach', 0},
- {'Kill', no}]},
- {'Break', [{'Line Break...', 5},
- {'Conditional Break...', no},
- {'Function Break...', no},
- separator,
- {'Enable All', no},
- {'Disable All', no},
- {'Delete All', 0},
- separator]},
- {'Options', [{'Trace Window', no, cascade,
- [{'Button Area', no, check},
- {'Evaluator Area', no, check},
- {'Bindings Area', no, check},
- {'Trace Area', no, check}]},
- {'Auto Attach', no, cascade,
- [{'First Call', no, check},
- {'On Break', no, check},
- {'On Exit', no, check}]},
- {'Stack Trace', no, cascade,
- [{'Stack On, Tail', no, radio},
- {'Stack On, No Tail', no, radio},
- {'Stack Off', no, radio}]},
- {'Back Trace Size...', no}]},
- {'Help', [{'Debugger', no}]}].
-
-menus(enabled, undefined) ->
- [];
-menus(disabled, undefined) ->
- ['Step','Next','Continue','Finish ','Attach','Kill'];
-menus(enabled, #pinfo{status=exit}) ->
- ['Attach'];
-menus(disabled, #pinfo{status=exit}) ->
- ['Step','Next','Continue','Finish ','Kill'];
-menus(enabled, #pinfo{status=break}) ->
- ['Step','Next','Continue','Finish ','Attach','Kill'];
-menus(disabled, #pinfo{status=break}) ->
- [];
-menus(enabled, _PInfo) ->
- ['Attach','Kill'];
-menus(disabled, _PInfo) ->
- ['Step','Next','Continue','Finish '].
-
-shortcut(l) -> {always, 'Load Settings...'};
-shortcut(v) -> {always, 'Save Settings...'};
-shortcut(e) -> {always, 'Exit'};
-
-shortcut(i) -> {always, 'Interpret...'};
-
-shortcut(s) -> {if_enabled, 'Step'};
-shortcut(n) -> {if_enabled, 'Next'};
-shortcut(c) -> {if_enabled, 'Continue'};
-shortcut(f) -> {if_enabled, 'Finish '};
-shortcut(a) -> {if_enabled, 'Attach'};
-
-shortcut(b) -> {always, 'Line Break...'};
-shortcut(d) -> {always, 'Delete All'};
-
-shortcut(_) -> false.
-
-%% Enable/disable functionality depending on the state of the process
-%% currently in Focus
-gui_enable_functions(PInfo) ->
- Enabled = menus(enabled, PInfo),
- Disabled = menus(disabled, PInfo),
- dbg_ui_mon_win:enable(Enabled, true),
- dbg_ui_mon_win:enable(Disabled, false).
-
-%% Map values used by int to/from GUI names
-map('First Call') -> init; % Auto attach
-map('On Exit') -> exit;
-map('On Break') -> break;
-map(init) -> 'First Call';
-map(exit) -> 'On Exit';
-map(break) -> 'On Break';
-
-map('Stack On, Tail') -> all; % Stack trace
-map('Stack On, No Tail') -> no_tail;
-map('Stack Off') -> false;
-map(all) -> 'Stack On, Tail';
-map(true) -> 'Stack On, Tail';
-map(no_tail) -> 'Stack On, No Tail';
-map(false) -> 'Stack Off'.
-
-
-%%====================================================================
-%% Debugger settings
-%%====================================================================
-
-load_settings(SFile, State) ->
- case file:read_file(SFile) of
- {ok, Binary} ->
- case catch binary_to_term(Binary) of
- {debugger_settings, Settings} ->
- load_settings2(Settings,
- State#state{sfile=SFile,
- changed=false});
- _Error -> State
- end;
- {error, _Reason} -> State
- end.
-
-load_settings2(Settings, State) ->
- {TraceWin, AutoAttach, StackTrace, BackTrace, Files, Breaks} =
- Settings,
-
- TraceWinAll = ['Button Area', 'Evaluator Area', 'Bindings Area',
- 'Trace Area'],
- lists:foreach(fun(Area) -> dbg_ui_mon_win:select(Area, true) end,
- TraceWin),
- lists:foreach(fun(Area) -> dbg_ui_mon_win:select(Area, false) end,
- TraceWinAll--TraceWin),
-
- case AutoAttach of
- false -> int:auto_attach(false);
- {Flags, Function} -> int:auto_attach(Flags, Function)
- end,
-
- int:stack_trace(StackTrace),
-
- dbg_ui_mon_win:show_option(State#state.win, back_trace, BackTrace),
-
- case State#state.mode of
- local -> lists:foreach(fun(File) -> int:i(File) end, Files);
- global -> lists:foreach(fun(File) -> int:ni(File) end, Files)
- end,
- lists:foreach(fun(Break) ->
- {{Mod, Line}, [Status, Action, _, Cond]} =
- Break,
- int:break(Mod, Line),
- if
- Status =:= inactive ->
- int:disable_break(Mod, Line);
- true -> ignore
- end,
- if
- Action/=enable ->
- int:action_at_break(Mod,Line,Action);
- true -> ignore
- end,
- case Cond of
- CFunction when is_tuple(CFunction) ->
- int:test_at_break(Mod,Line,CFunction);
- null -> ignore
- end
- end,
- Breaks),
-
- State#state{tracewin=TraceWin, backtrace=BackTrace}.
-
-save_settings(SFile, State) ->
- Settings = {State#state.tracewin,
- int:auto_attach(),
- int:stack_trace(),
- State#state.backtrace,
- [int:file(Mod) || Mod <- int:interpreted()],
- int:all_breaks()},
- Binary = term_to_binary({debugger_settings, Settings}),
- case file:write_file(SFile, Binary) of
- ok ->
- State#state{sfile=SFile, changed=false};
- {error, _Reason} ->
- State
- end.
-
-
-%%====================================================================
-%% Other internal functions
-%%====================================================================
-
-registered_name(Pid) ->
- %% Yield in order to give Pid more time to register its name
- timer:sleep(200),
-
- Node = node(Pid),
- if
- Node =:= node() ->
- case erlang:process_info(Pid, registered_name) of
- {registered_name, Name} -> Name;
- _ -> undefined
- end;
- true ->
- case rpc:call(Node,erlang,process_info,
- [Pid,registered_name]) of
- {registered_name, Name} -> Name;
- _ -> undefined
- end
- end.
-
-trace_function(State) ->
- {dbg_ui_trace, start, [State#state.tracewin,State#state.backtrace]}.
diff --git a/lib/debugger/src/dbg_ui_mon_win.erl b/lib/debugger/src/dbg_ui_mon_win.erl
deleted file mode 100644
index 8655c7697a..0000000000
--- a/lib/debugger/src/dbg_ui_mon_win.erl
+++ /dev/null
@@ -1,573 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. 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(dbg_ui_mon_win).
--compile([{nowarn_deprecated_function,{gs,checkbutton,2}},
- {nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,frame,2}},
- {nowarn_deprecated_function,{gs,grid,2}},
- {nowarn_deprecated_function,{gs,gridline,2}},
- {nowarn_deprecated_function,{gs,label,2}},
- {nowarn_deprecated_function,{gs,listbox,2}},
- {nowarn_deprecated_function,{gs,menu,2}},
- {nowarn_deprecated_function,{gs,menubar,2}},
- {nowarn_deprecated_function,{gs,menuitem,2}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,window,2}}]).
-
-%% External exports
--export([init/0]).
--export([create_win/3, get_window/1,
- show_option/3,
- enable/2, is_enabled/1, select/2,
- add_module/3, delete_module/2,
- add_process/6, update_process/4, clear_processes/1,
- add_break/3, update_break/2, delete_break/2,
- clear_breaks/1, clear_breaks/2,
- handle_event/2
- ]).
-
--define(default_rows,50).
-
--record(moduleInfo, {module, menubtn}).
--record(procInfo, {pid, row}).
--record(breakInfo, {point, status, break}).
--record(winInfo, {window, % gsobj()
- grid, % gsobj()
- row, % int() Last row in grid
-
- focus, % int() Selected row in grid
-
- modules=[], % [#moduleInfo{}] Known modules
- processes=[], % [#procInfo{}] Known processes
- breaks=[], % [#breakInfo{}] Known breakpoints
-
- listbox, % gsobj() Listinng known modules
-
- %% Auto attach buttons
- fbutton, % gsobj()
- bbutton, % gsobj()
- ebutton, % gsobj()
- selected=[], % ['First Call'|'On Break'|'On Exit']
-
- slabel, % showing Stack Trace option
- blabel % showing Back Trace Size
- }).
-
-%%====================================================================
-%% External exports
-%%====================================================================
-
-init() ->
- dbg_ui_win:init().
-
-%%--------------------------------------------------------------------
-%% create_win(GS, Title, Menus) -> #winInfo{}
-%% GS = gsobj()
-%% Title = string()
-%% Menus = [menu()] See dbg_ui_win.erl
-%%--------------------------------------------------------------------
-
--define(PAD, 5).
--define(Wf, 150).
--define(Wg, 770).
--define(W, 800).
--define(H, 390).
-
-create_win(GS, Title, Menus) ->
- Win = gs:window(GS, [{title, Title},
- {width, ?W}, {height, ?H},
- {configure,true}, {destroy,true},
- {keypress,true}, {motion,true}]),
-
- MenuBar = gs:menubar(Win, []),
- dbg_ui_win:create_menus(MenuBar, Menus),
- dbg_ui_winman:windows_menu(MenuBar),
-
- Font = dbg_ui_win:font(normal),
-
- Frame = gs:frame(Win, [{x, ?PAD}, {y, 30},
- {width, ?Wf}, {height, ?H}]),
- Hlb = 200,
- Listbox = gs:listbox(Frame, [{x, 0}, {y, 0},
- {width, ?Wf}, {height, Hlb},
- {data, listbox},
- {doubleclick, true},
- {items, []}]),
- gs:label(Frame, [{x, 0}, {y, Hlb}, {width, ?Wf}, {height, 20},
- {align, w},
- {label, {text, "Auto Attach:"}}, {font, Font}]),
- Fbtn = gs:checkbutton(Frame, [{x, 0}, {y, Hlb+20},
- {width, ?Wf}, {height, 20},
- {label, {text, 'First Call'}},
- {align, w}, {font, Font},
- {data, autoattach}]),
- Bbtn = gs:checkbutton(Frame, [{x, 0}, {y, Hlb+40},
- {width, ?Wf}, {height, 20},
- {label, {text, 'On Break'}},
- {align, w}, {font, Font},
- {data, autoattach}]),
- Ebtn = gs:checkbutton(Frame, [{x, 0}, {y, Hlb+60},
- {width, ?Wf}, {height, 20},
- {label, {text, 'On Exit'}},
- {align, w}, {font, Font},
- {data, autoattach}]),
- SLabel = gs:label(Frame, [{x, 0}, {y, Hlb+80},
- {width, ?Wf}, {height, 40},
- {font, Font}, {align, w}]),
- BLabel = gs:label(Frame, [{x, 0}, {y, Hlb+120},
- {width, ?Wf}, {height, 40},
- {font, Font}, {align, w}]),
-
- Grid = gs:grid(Win, [{x, 2*?PAD+?Wf}, {y, 30},
- {width, ?W-(2*?PAD+?Wf)}, {height, ?H-30},
- {bg, grey}, {fg, black},
- {vscroll, right}, {hscroll, bottom},
- calc_columnwidths(?Wg),
- {rows, {1,?default_rows}}]),
- gs:gridline(Grid, [{row, 1}, {bw, 5}, {fg, blue},
- {font, Font},
- {text, {1,"Pid"}}, {text, {2,"Initial Call"}},
- {text, {3,"Name"}}, {text, {4,"Status"}},
- {text, {5,"Information"}}]),
-
- gs:config(Win, {map, true}),
- #winInfo{window=Win, grid=Grid, row=1, focus=0,
- listbox=Listbox,
- fbutton=Fbtn, bbutton=Bbtn, ebutton=Ebtn,
- slabel=SLabel, blabel=BLabel}.
-
-%%--------------------------------------------------------------------
-%% get_window(WinInfo) -> Window
-%% WinInfo = #winInfo{}
-%% Window = gsobj()
-%%--------------------------------------------------------------------
-get_window(WinInfo) ->
- WinInfo#winInfo.window.
-
-%%--------------------------------------------------------------------
-%% show_option(WinInfo, Option, Value) -> void()
-%% WinInfo = #winInfo{}
-%% Option = auto_attach | stack_trace | back_trace
-%% Value = [Flag] % Option==auto_attach
-%% Flag = init | break | exit
-%% | true | all | no_tail | false % Option==stack_trace
-%% | int() % Option==back_trace
-%%--------------------------------------------------------------------
-show_option(WinInfo, Option, Value) ->
- case Option of
-
- auto_attach ->
- lists:foreach(fun (Button) ->
- gs:config(Button, {select, false})
- end,
- option_buttons(WinInfo, [init, break, exit])),
- lists:foreach(fun (Button) ->
- gs:config(Button, {select, true})
- end,
- option_buttons(WinInfo, Value));
-
- stack_trace ->
- Text = case Value of
- all -> "Stack Trace:\n On (with tail)";
- true -> "Stack Trace:\n On (with tail)";
- no_tail -> "Stack Trace:\n On (no tail)";
- false -> "Stack Trace:\n Off"
- end,
- gs:config(WinInfo#winInfo.slabel, {label, {text, Text}});
-
- back_trace ->
- Text = "Back Trace Size:\n " ++ integer_to_list(Value),
- gs:config(WinInfo#winInfo.blabel, {label, {text, Text}})
- end.
-
-option_buttons(WinInfo, [init|Flags]) ->
- [WinInfo#winInfo.fbutton|option_buttons(WinInfo, Flags)];
-option_buttons(WinInfo, [break|Flags]) ->
- [WinInfo#winInfo.bbutton|option_buttons(WinInfo, Flags)];
-option_buttons(WinInfo, [exit|Flags]) ->
- [WinInfo#winInfo.ebutton|option_buttons(WinInfo, Flags)];
-option_buttons(_WinInfo, []) ->
- [].
-
-%%--------------------------------------------------------------------
-%% enable([MenuItem], Bool)
-%% is_enabled(MenuItem) -> Bool
-%% MenuItem = atom()
-%% Bool = boolean()
-%%--------------------------------------------------------------------
-enable(MenuItems, Bool) ->
- lists:foreach(fun(MenuItem) ->
- gs:config(MenuItem, {enable, Bool})
- end,
- MenuItems).
-
-is_enabled(MenuItem) ->
- gs:read(MenuItem, enable).
-
-%%--------------------------------------------------------------------
-%% select(MenuItem, Bool)
-%% MenuItem = atom()
-%% Bool = boolean()
-%%--------------------------------------------------------------------
-select(MenuItem, Bool) ->
- dbg_ui_win:select(MenuItem, Bool).
-
-%%--------------------------------------------------------------------
-%% add_module(WinInfo, Name, Mod) -> WinInfo
-%% WinInfo = #winInfo{}
-%% Name = atom()
-%% Mod = atom()
-%%--------------------------------------------------------------------
-add_module(WinInfo, Menu, Mod) ->
- Modules = WinInfo#winInfo.modules,
- case lists:keymember(Mod, #moduleInfo.module, Modules) of
- false ->
- %% Create a menu for the module
- Font = dbg_ui_win:font(normal),
- MenuBtn = gs:menuitem(Menu, [{label, {text,Mod}},
- {font, Font},
- {itemtype, cascade}]),
- SubMenu = gs:menu(MenuBtn, []),
- gs:menuitem(SubMenu, [{label, {text,"View"}},
- {font, Font},
- {data, {module,Mod,view}}]),
- gs:menuitem(SubMenu, [{label, {text,"Delete"}},
- {font, Font},
- {data, {module,Mod,delete}}]),
-
- %% Add the module to the listbox
- gs:config(WinInfo#winInfo.listbox, {add, Mod}),
-
- ModInfo = #moduleInfo{module=Mod, menubtn=MenuBtn},
- WinInfo#winInfo{modules=[ModInfo | Modules]};
- true -> WinInfo
- end.
-
-%%--------------------------------------------------------------------
-%% delete_module(WinInfo, Mod) -> WinInfo
-%% WinInfo = #winInfo{}
-%% Mod = atom()
-%%--------------------------------------------------------------------
-delete_module(WinInfo, Mod) ->
- {value, ModInfo} = lists:keysearch(Mod, #moduleInfo.module,
- WinInfo#winInfo.modules),
- gs:destroy(ModInfo#moduleInfo.menubtn),
- delete_module(WinInfo#winInfo.listbox, atom_to_list(Mod), 0),
- WinInfo#winInfo{modules=lists:keydelete(Mod, #moduleInfo.module,
- WinInfo#winInfo.modules)}.
-
-delete_module(Listbox, ModS, Index) ->
- case gs:read(Listbox, {get, Index}) of
- ModS ->
- gs:config(Listbox, {del, Index});
- _OtherModS ->
- delete_module(Listbox, ModS, Index+1)
- end.
-
-%%--------------------------------------------------------------------
-%% add_process(WinInfo, Pid, Name, Function, Status, Info) -> WinInfo
-%% WinInfo = #winInfo{}
-%% Pid = pid()
-%% Name = undefined | atom()
-%% Function = {Mod, Func, Args}
-%% Status = idle | running | break | exit
-%% Info = {} | term()
-%%--------------------------------------------------------------------
-add_process(WinInfo, Pid, Name, {Mod,Func,Args}, Status, Info) ->
- Grid = WinInfo#winInfo.grid,
- Row = (WinInfo#winInfo.row)+1,
- GridLine = case gs:read(Grid, {obj_at_row, Row}) of
- undefined ->
- if Row>?default_rows ->
- gs:config(Grid,[{rows,{1,Row}}]);
- true -> ok
- end,
- gs:gridline(Grid,[{row,Row}, {bw,5}, {fg,black},
- {font,dbg_ui_win:font(normal)},
- {click, true},
- {doubleclick, true}]);
- GSObj ->
- GSObj
- end,
- Name2 = case Name of undefined -> ""; _ -> Name end,
- FuncS = io_lib:format("~w:~w/~w", [Mod, Func, length(Args)]),
- Info2 = case Info of {} -> ""; _ -> Info end,
- Options = [{text, {1,Pid}}, {text, {2,FuncS}}, {text, {3,Name2}},
- {text, {4,Status}}, {text, {5,Info2}},
- {data, {gridline, Pid}}],
- gs:config(GridLine, Options),
-
- ProcInfo = #procInfo{pid=Pid, row=Row},
- WinInfo#winInfo{processes=[ProcInfo|WinInfo#winInfo.processes],
- row=Row}.
-
-%%--------------------------------------------------------------------
-%% update_process(WinInfo, Pid, Status, Info)
-%% WinInfo = #winInfo{}
-%% Pid = pid()
-%% Status = idle | running | break | exit
-%% Info = {} | term()
-%%--------------------------------------------------------------------
-update_process(WinInfo, Pid, Status, Info) ->
- {value, ProcInfo} = lists:keysearch(Pid, #procInfo.pid,
- WinInfo#winInfo.processes),
-
- Grid = WinInfo#winInfo.grid,
- GridLine = gs:read(Grid, {obj_at_row, ProcInfo#procInfo.row}),
-
- Info2 = case Info of {} -> ""; _ -> Info end,
- gs:config(GridLine, [{text, {4,Status}}, {text, {5,Info2}}]).
-
-%%--------------------------------------------------------------------
-%% clear_processes(WinInfo) -> WinInfo
-%% WinInfo = #winInfo{}
-%%--------------------------------------------------------------------
-clear_processes(WinInfo) ->
- Grid = WinInfo#winInfo.grid,
- Max = WinInfo#winInfo.row,
- clear_processes(Grid, 2, Max),
- gs:config(Grid,[{rows,{1,?default_rows}}]),
- WinInfo#winInfo{row=1, focus=0, processes=[]}.
-
-clear_processes(Grid, Row, Max) when Row=<Max ->
- GridLine = gs:read(Grid, {obj_at_row, Row}),
- case gs:read(GridLine,{text,4}) of
- "exit" ->
- Pid = list_to_pid(gs:read(GridLine,{text,1})),
- dbg_ui_winman:clear_process(dbg_ui_trace:title(Pid));
- _ ->
- ok
- end,
-
- Options = [{fg, black},
- {{text,1}, ""}, {{text,2},""}, {{text,3},""},
- {{text,4}, ""}, {{text,5},""},
- {data, []}],
- gs:config(GridLine, Options),
- clear_processes(Grid, Row+1, Max);
-clear_processes(_Grid, Row, Max) when Row>Max ->
- done.
-
-%%--------------------------------------------------------------------
-%% add_break(WinInfo, Name, {Point, Options}) -> WinInfo
-%% WinInfo = #winInfo{}
-%% Name = atom()
-%% Point = {Mod, Line}
-%% Options = [Status, Action, Mods, Cond]
-%% Status = active | inactive
-%% Action = enable | disable | delete
-%% Mods = null (not used)
-%% Cond = null | {Mod, Func}
-%%--------------------------------------------------------------------
-add_break(WinInfo, Menu, {Point, Options}) ->
- Break = dbg_ui_win:add_break(Menu, Point),
- dbg_ui_win:update_break(Break, Options),
- BreakInfo = #breakInfo{point=Point, break=Break},
- WinInfo#winInfo{breaks=[BreakInfo|WinInfo#winInfo.breaks]}.
-
-%%--------------------------------------------------------------------
-%% update_break(WinInfo, {Point, Options})
-%% WinInfo = #winInfo{}
-%% Point = {Mod, Line}
-%% Options = [Status, Action, Mods, Cond]
-%% Status = active | inactive
-%% Action = enable | disable | delete
-%% Mods = null (not used)
-%% Cond = null | {Mod, Func}
-%%--------------------------------------------------------------------
-update_break(WinInfo, {Point, Options}) ->
- {value, BreakInfo} = lists:keysearch(Point, #breakInfo.point,
- WinInfo#winInfo.breaks),
- dbg_ui_win:update_break(BreakInfo#breakInfo.break, Options).
-
-%%--------------------------------------------------------------------
-%% delete_break(WinInfo, Point) -> WinInfo
-%% WinInfo = #winInfo{}
-%% Point = {Mod, Line}
-%%--------------------------------------------------------------------
-delete_break(WinInfo, Point) ->
- {value, BreakInfo} = lists:keysearch(Point, #breakInfo.point,
- WinInfo#winInfo.breaks),
- dbg_ui_win:delete_break(BreakInfo#breakInfo.break),
- WinInfo#winInfo{breaks=lists:keydelete(Point, #breakInfo.point,
- WinInfo#winInfo.breaks)}.
-
-%%--------------------------------------------------------------------
-%% clear_breaks(WinInfo) -> WinInfo
-%% clear_breaks(WinInfo, Mod) -> WinInfo
-%% WinInfo = #winInfo{}
-%%--------------------------------------------------------------------
-clear_breaks(WinInfo) ->
- lists:foreach(fun(BreakInfo) ->
- dbg_ui_win:delete_break(BreakInfo#breakInfo.break)
- end,
- WinInfo#winInfo.breaks),
- WinInfo#winInfo{breaks=[]}.
-clear_breaks(WinInfo, Mod) ->
- Fun =
- fun(BreakInfo) ->
- case BreakInfo#breakInfo.point of
- {Mod, _Line} ->
- dbg_ui_win:delete_break(BreakInfo#breakInfo.break),
- false;
- _ -> true
- end
- end,
- Breaks = lists:filter(Fun, WinInfo#winInfo.breaks),
- WinInfo#winInfo{breaks=Breaks}.
-
-%%--------------------------------------------------------------------
-%% handle_event(GSEvent, WinInfo) -> Command
-%% GSEvent = {gs, Id, Event, Data, Arg}
-%% WinInfo = #winInfo{}
-%% Command = ignore
-%% | stopped
-%% | {coords, {X,Y}}
-%%
-%% | {shortcut, Key}
-%% | MenuItem | {Menu, [MenuItem]}
-%% MenuItem = Menu = atom()
-%% | {break, Point, What}
-%% What = delete | {status, Status} | {trigger, Trigger}
-%% | {module, Mod, What}
-%% What = view | delete
-%%
-%% | {focus, Pid, WinInfo}
-%% | default
-%%--------------------------------------------------------------------
-%% Window events
-handle_event({gs, _Id, configure, _Data, [W, H |_]}, WinInfo) ->
- configure(WinInfo, {W, H}),
- ignore;
-handle_event({gs, _Id, destroy, _Data, _Arg}, _WinInfo) ->
- stopped;
-handle_event({gs, _Id, motion, _Data, [X,Y]}, WinInfo) ->
- {LastX, LastY} = dbg_ui_win:motion(X, Y),
- Win = WinInfo#winInfo.window,
- {coords, {gs:read(Win, x)+LastX-5, gs:read(Win, y)+LastY-5}};
-
-%% Menus and keyboard shortcuts
-handle_event({gs, _Id, keypress, _Data, [Key,_,_,1]}, _WinInfo) when
- Key/='Up', Key/='Down', Key/=p, Key/=n ->
- {shortcut, Key};
-handle_event({gs, _Id, click, {dbg_ui_winman, Win}, _Arg}, _WinInfo) ->
- dbg_ui_winman:raise(Win),
- ignore;
-handle_event({gs, _Id, click, {menuitem, Name}, _Arg}, _WinInfo) ->
- Name;
-handle_event({gs, _Id, click, {menu, Menu}, _Arg}, _WinInfo) ->
- Names = dbg_ui_win:selected(Menu),
- {Menu, Names};
-handle_event({gs, _Id, click, {break, Point, What}, _Arg}, _WinInfo) ->
- {break, Point, What};
-handle_event({gs, _Id, click, {module, Mod, What}, _Arg}, _WinInfo) ->
- {module, Mod, What};
-
-%% Listbox
-handle_event({gs, _Id, doubleclick, listbox, [_Index, ModS|_]}, _WI) ->
- {module, list_to_atom(ModS), view};
-
-%% Auto attach buttons
-handle_event({gs, _Id, click, autoattach, _Arg}, WinInfo) ->
- Names = lists:foldl(fun (Button, NamesAcc) ->
- case gs:read(Button, select) of
- true ->
- {text, Name} =
- gs:read(Button, label),
- [list_to_atom(Name)|NamesAcc];
- false ->
- NamesAcc
- end
- end,
- [],
- [WinInfo#winInfo.ebutton,
- WinInfo#winInfo.bbutton,
- WinInfo#winInfo.fbutton]),
- {'Auto Attach', Names};
-
-%% Process grid
-handle_event({gs, _Id, keypress, _Data, [Key|_]}, WinInfo) when
- Key =:= 'Up'; Key =:= 'Down' ->
- Dir = if Key =:= 'Up' -> up; Key =:= 'Down' -> down end,
- Row = move(WinInfo, Dir),
- if Row>1 ->
- WinInfo2 = highlight(WinInfo, Row),
- #procInfo{pid=Pid} =
- lists:keyfind(Row, #procInfo.row, WinInfo#winInfo.processes),
- {focus, Pid, WinInfo2};
- true ->
- ignore
- end;
-handle_event({gs, _Id, click, {gridline, Pid}, [_Col,Row|_]}, WinInfo) ->
- WinInfo2 = highlight(WinInfo, Row),
- {focus, Pid, WinInfo2};
-handle_event({gs, _Id, doubleclick, _Data, _Arg}, _WinInfo) ->
- default;
-
-handle_event(_GSEvent, _WinInfo) ->
- ignore.
-
-move(WinInfo, Dir) ->
- Row = WinInfo#winInfo.focus,
- Last = WinInfo#winInfo.row,
- if
- Dir =:= up, Row > 1 -> Row-1;
- Dir =:= down, Row < Last -> Row+1;
- true -> Row
- end.
-
-highlight(WinInfo, Row) ->
- Grid = WinInfo#winInfo.grid,
- case WinInfo#winInfo.focus of
- 0 -> ignore;
- Focus ->
- GridLine1 = gs:read(Grid, {obj_at_row, Focus}),
- gs:config(GridLine1, {fg, black})
- end,
- GridLine2 = gs:read(Grid, {obj_at_row, Row}),
- gs:config(GridLine2, {fg, white}),
- WinInfo#winInfo{focus=Row}.
-
-%%====================================================================
-%% Internal functions
-%%====================================================================
-
-configure(WinInfo, {W, H}) ->
- Grid = WinInfo#winInfo.grid,
- NewW = W - (2*?PAD+?Wf),
- Dx = NewW - gs:read(Grid, width),
- Dy = H-42 - gs:read(Grid, height),
- if
- (Dx+Dy) =/= 0 ->
- gs:config(Grid, [{width, NewW}, {height, H-30}]),
- Cols = calc_columnwidths(NewW),
- gs:config(Grid, Cols);
- true ->
- ok
- end.
-
-calc_columnwidths(Width) ->
- W = if
- Width =< ?Wg -> ?Wg;
- true -> Width
- end,
- First = [round(X) || X <- [0.13*W, 0.27*W, 0.18*W, 0.18*W]],
- Last = W - lists:sum(First) - 30,
- {columnwidths, First++[Last]}.
diff --git a/lib/debugger/src/dbg_ui_settings.erl b/lib/debugger/src/dbg_ui_settings.erl
deleted file mode 100644
index fcfd67966f..0000000000
--- a/lib/debugger/src/dbg_ui_settings.erl
+++ /dev/null
@@ -1,162 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2002-2011. 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(dbg_ui_settings).
-
--include_lib("kernel/include/file.hrl").
-
-%% External exports
--export([start/4]).
-
-%% Internal exports
--export([init/6]).
-
-%% OTP-6011 What's denoted gs="Graphics system id" is now in fact
-%% the object id of the monitor window.
--record(state, {gs, % term() Graphics system id
- win, % term() Settings dialog window data
- monitor, % pid() Monitor pid
- action % load | save
- }).
-
-%%====================================================================
-%% External exports
-%%====================================================================
-
-%%--------------------------------------------------------------------
-%% start(GS, Pos, Action, SFile)
-%% GS = Graphics system id
-%% Pos = {X,Y}
-%% Action = load | save
-%% SFile = default | string()
-%%--------------------------------------------------------------------
-start(GS, Pos, Action, SFile) ->
- Title = case Action of
- load -> "Load Settings Dialog";
- save -> "Save Settings Dialog"
- end,
- case dbg_ui_winman:is_started(Title) of
- true -> ignore;
- false ->
- spawn(?MODULE, init, [self(), GS, Pos, Title, Action, SFile])
- end.
-
-%%====================================================================
-%% Internal exports
-%%====================================================================
-
-init(Monitor, GS, Pos, Title, Action, SFile) ->
- {SDir, SFileName} =
- if
- %% If settings are saved for the first time, and to
- %% the default directory HOME/erlang.tools/debugger,
- %% make sure the directory exists, or create it if
- %% desired and possible
- SFile==default -> {default_settings_dir(GS), "NoName.state"};
- true -> {filename:dirname(SFile), filename:basename(SFile)}
- end,
-
- Filter = filename:join(SDir, "*.state"),
- Extra = fun(_File) -> true end,
-
- %% Create window
- Win = case Action of
- load ->
- dbg_ui_filedialog_win:create_win(GS, Title, Pos, normal,
- Filter, Extra);
- save ->
- dbg_ui_filedialog_win:create_win(GS, Title, Pos, normal,
- Filter, Extra, SFileName)
- end,
- Window = dbg_ui_filedialog_win:get_window(Win),
- dbg_ui_winman:insert(Title, Window),
-
- State = #state{gs=GS, win=Win, monitor=Monitor, action=Action},
- loop(State).
-
-
-%%====================================================================
-%% Main loop and message handling
-%%====================================================================
-
-loop(State) ->
- receive
-
- %% From the GUI
- GuiEvent when is_tuple(GuiEvent), element(1, GuiEvent)==gs ->
- Cmd = dbg_ui_filedialog_win:handle_event(GuiEvent,
- State#state.win),
- State2 = gui_cmd(Cmd, State),
- loop(State2);
-
- %% From the dbg_ui_winman process (Debugger window manager)
- {dbg_ui_winman, update_windows_menu, _Data} ->
- loop(State);
- {dbg_ui_winman, destroy} ->
- exit(normal)
- end.
-
-gui_cmd(ignore, State) ->
- State;
-gui_cmd({stopped, _Dir}, _State) ->
- exit(normal);
-gui_cmd({win, Win}, State) ->
- State#state{win=Win};
-gui_cmd({select, File}, State) ->
- State#state.monitor ! {dbg_ui_settings, File, State#state.action},
- exit(normal).
-
-
-%%====================================================================
-%% Internal functions
-%%====================================================================
-
-default_settings_dir(GS) ->
- {ok, [[Home]]} = init:get_argument(home),
- DefDir = filename:join([Home, ".erlang_tools", "debugger"]),
-
- case filelib:is_dir(DefDir) of
- true -> DefDir;
- false ->
- {ok, CWD} = file:get_cwd(),
-
- Msg = ["Default directory", DefDir, "does not exist.",
- "Click OK to create it or",
- "Cancel to use other directory."],
- case tool_utils:confirm(GS, Msg) of
- ok ->
- ToolsDir = filename:dirname(DefDir),
- case filelib:is_dir(ToolsDir) of
- true ->
- case file:make_dir(DefDir) of
- ok -> DefDir;
- _Error -> CWD
- end;
- false ->
- case file:make_dir(ToolsDir) of
- ok ->
- case file:make_dir(DefDir) of
- ok -> DefDir;
- _Error -> CWD
- end;
- _Error -> CWD
- end
- end;
- cancel -> CWD
- end
- end.
diff --git a/lib/debugger/src/dbg_ui_trace.erl b/lib/debugger/src/dbg_ui_trace.erl
deleted file mode 100644
index 3e1fb2dcae..0000000000
--- a/lib/debugger/src/dbg_ui_trace.erl
+++ /dev/null
@@ -1,814 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2013. 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(dbg_ui_trace).
-
-%% External exports
--export([start/1, start/3]).
--export([title/1]).
-
--define(TRACEWIN, ['Button Area', 'Evaluator Area', 'Bindings Area']).
--define(BACKTRACE, 100).
-
--record(state, {gs, % term() Graphics system id
- win, % term() Attach process window data
- coords, % {X,Y} Mouse point position
-
- pid, % pid() Debugged process
- meta, % pid() Meta process
- status, % {Status,Mod,Line} | {exit,Where,Reason}
- % Status = init | idle | break
- % | wait_break | wait_running
- % | running
- % Where={Mod,Line} | null
-
- cm, % atom() | undefined Current module
- cm_obsolete=false, % boolean() Curr mod needs reloading
-
- stack, % {Cur,Max}
-
- trace, % boolean()
- stack_trace, % all | no_tail | false
- backtrace % integer() #call frames to fetch
- }).
-
-%%====================================================================
-%% External exports
-%%====================================================================
-
-%%--------------------------------------------------------------------
-%% start(Pid)
-%% start(Pid, TraceWin, BackTrace)
-%% Pid = pid()
-%% TraceWin = [WinArea]
-%% WinArea = 'Button|Evaluator|Bindings|Trace Area'
-%% Backtrace = integer()
-%%--------------------------------------------------------------------
-start(Pid) -> % Used by debugger:quick/3 (no monitor)
- start(Pid, ?TRACEWIN, ?BACKTRACE).
-start(Pid, TraceWin, BackTrace) ->
- case {whereis(dbg_wx_mon), whereis(dbg_ui_mon)} of
- {undefined, undefined} ->
- case which_gui() of
- gs ->
- start2(Pid, TraceWin, BackTrace);
- wx ->
- dbg_wx_trace:start(Pid, TraceWin, BackTrace)
- end;
- {undefined, Monitor} when is_pid(Monitor) ->
- start2(Pid, TraceWin, BackTrace);
- {Monitor, _} when is_pid(Monitor) ->
- dbg_wx_trace:start(Pid, TraceWin, BackTrace)
- end.
-
-start2(Pid, TraceWin, BackTrace) ->
- %% Inform int about my existence and get the meta pid back
- case int:attached(Pid) of
- {ok, Meta} ->
- init(Pid, Meta, TraceWin, BackTrace);
- error ->
- ignore
- end.
-
-which_gui() ->
- try
- wx:new(),
- wx:destroy(),
- wx
- catch _:_ ->
- gs
- end.
-
-%%--------------------------------------------------------------------
-%% title(Pid) -> string()
-%% By exporting this function, dbg_ui_mon may check with dbg_ui_winman
-%% if there already is an attach window for a given pid and thus avoid
-%% spawning processes unnecessarily.
-%%--------------------------------------------------------------------
-title(Pid) ->
- "Attach Process " ++ pid_to_list(Pid).
-
-
-%%====================================================================
-%% Main loop and message handling
-%%====================================================================
-
-init(Pid, Meta, TraceWin, BackTrace) ->
-
- %% Start necessary stuff
- GS = dbg_ui_trace_win:init(), % Graphics system
-
- %% Create attach process window
- Title = title(Pid),
- Win = dbg_ui_trace_win:create_win(GS, Title, TraceWin, menus()),
- Window = dbg_ui_trace_win:get_window(Win),
- dbg_ui_winman:insert(Title, Window),
-
- %% Initial process state
- State1 = #state{gs=GS, win=Win, coords={0,0}, pid=Pid, meta=Meta,
- status={idle,null,null},
- stack={1,1}},
-
- State2 = init_options(TraceWin,
- int:stack_trace(), % Stack Trace
- BackTrace, % Back trace size
- State1),
-
- State3 = init_contents(int:all_breaks(), % Breakpoints
- State2),
-
- int:meta(Meta, trace, State3#state.trace),
-
- gui_enable_updown(stack_trace, {1,1}),
- gui_enable_btrace(false, false),
- dbg_ui_trace_win:display(idle),
-
- loop(State3).
-
-init_options(TraceWin, StackTrace, BackTrace, State) ->
- lists:foreach(fun(Area) -> dbg_ui_trace_win:select(Area, true) end,
- TraceWin),
-
- Trace = lists:member('Trace Area', TraceWin),
-
- dbg_ui_trace_win:select(map(StackTrace), true),
-
- %% Backtrace size is (currently) not shown in window
-
- State#state{trace=Trace,stack_trace=StackTrace,backtrace=BackTrace}.
-
-init_contents(Breaks, State) ->
- Win =
- lists:foldl(fun(Break, Win) ->
- dbg_ui_trace_win:add_break(Win,
- 'Break',Break)
- end,
- State#state.win,
- Breaks),
-
- State#state{win=Win}.
-
-loop(#state{meta=Meta} = State) ->
- receive
-
- %% From the GUI main window
- GuiEvent when is_tuple(GuiEvent), element(1, GuiEvent)==gs ->
- Cmd =
- dbg_ui_trace_win:handle_event(GuiEvent,State#state.win),
- State2 = gui_cmd(Cmd, State),
- loop(State2);
-
- %% From the GUI help windows
- {gui, Cmd} ->
- State2 = gui_cmd(Cmd, State),
- loop(State2);
-
- %% From the interpreter
- {int, Cmd} ->
- State2 = int_cmd(Cmd, State),
- loop(State2);
-
- %% From the meta process
- {Meta, Cmd} ->
- State2 = meta_cmd(Cmd, State),
- loop(State2);
- {NewMeta, {exit_at, Where, Reason, Cur}} ->
- State2 = meta_cmd({exit_at, Where, Reason, Cur},
- State#state{meta=NewMeta}),
- loop(State2);
-
- %% From the dbg_ui_edit process
- {dbg_ui_edit, 'Backtrace:', BackTrace} ->
- loop(State#state{backtrace=BackTrace});
- {dbg_ui_edit, Var, Val} ->
- Cmd = atom_to_list(Var)++"="++io_lib:format("~p", [Val]),
- State2 = gui_cmd({user_command, lists:flatten(Cmd)}, State),
- loop(State2);
-
- %% From the dbg_ui_winman process (Debugger window manager)
- {dbg_ui_winman, update_windows_menu, Data} ->
- dbg_ui_winman:update_windows_menu(Data),
- loop(State);
- {dbg_ui_winman, destroy} ->
- exit(stop)
- end.
-
-%%--Commands from the GUI---------------------------------------------
-
-gui_cmd(ignore, State) ->
- State;
-gui_cmd({win, Win}, State) ->
- State#state{win=Win};
-gui_cmd(stopped, _State) ->
- exit(stop);
-gui_cmd({coords, Coords}, State) ->
- State#state{coords=Coords};
-
-gui_cmd({shortcut, Key}, State) ->
- case shortcut(Key) of
- {always, Cmd} -> gui_cmd(Cmd, State);
- {if_enabled, Cmd} ->
- case dbg_ui_trace_win:is_enabled(Cmd) of
- true -> gui_cmd(Cmd, State);
- false -> State
- end;
- false -> State
- end;
-
-%% File menu
-gui_cmd('Close', State) ->
- gui_cmd(stopped, State);
-
-%% Edit menu
-gui_cmd('Go To Line...', State) ->
- %% Will result in message handled below: {gui, {gotoline, Line}}
- dbg_ui_trace_win:helpwin(gotoline, State#state.win,
- State#state.gs, State#state.coords),
- State;
-gui_cmd({gotoline, Line}, State) ->
- Win = dbg_ui_trace_win:select_line(State#state.win, Line),
- State#state{win=Win};
-gui_cmd('Search...', State) ->
- dbg_ui_trace_win:helpwin(search, State#state.win,
- State#state.gs, State#state.coords),
- State;
-
-%% Process menu
-gui_cmd('Step', State) ->
- int:meta(State#state.meta, step),
- State;
-gui_cmd('Next', State) ->
- int:meta(State#state.meta, next),
- State;
-gui_cmd('Continue', State) ->
- int:meta(State#state.meta, continue),
- {Status, Mod, Line} = State#state.status,
- if
- Status==wait_break ->
- Win = dbg_ui_trace_win:unmark_line(State#state.win),
- gui_enable_functions(wait_running),
- State#state{win=Win, status={wait_running,Mod,Line}};
- true ->
- dbg_ui_trace_win:enable(['Stop'], true),
- dbg_ui_trace_win:enable(['Continue'], false),
- State
- end;
-gui_cmd('Finish', State) ->
- int:meta(State#state.meta, finish),
- State;
-gui_cmd('Skip', State) ->
- int:meta(State#state.meta, skip),
- State;
-gui_cmd('Time Out', State) ->
- int:meta(State#state.meta, timeout),
- State;
-gui_cmd('Stop', State) ->
- int:meta(State#state.meta, stop),
- {Status, Mod, Line} = State#state.status,
- if
- Status==wait_running ->
- Win = dbg_ui_trace_win:mark_line(State#state.win, Line,
- break),
- gui_enable_functions(wait_break),
- gui_enable_updown(State#state.stack_trace,
- State#state.stack),
- gui_enable_btrace(State#state.trace,
- State#state.stack_trace),
- dbg_ui_trace_win:display({wait, Mod, Line}),
- State#state{win=Win, status={wait_break,Mod,Line}};
- true ->
- dbg_ui_trace_win:enable(['Stop'], false),
- dbg_ui_trace_win:enable(['Continue'], true),
- State
- end;
-gui_cmd('Where', State) ->
- {_Cur, Max} = State#state.stack,
- Stack = {Max, Max},
- {_Status, Mod, Line} = State#state.status,
- Win = gui_show_module(State#state.win, Mod, Line,
- State#state.cm, State#state.pid, break),
- gui_update_bindings(State#state.meta),
- gui_enable_updown(State#state.stack_trace, Stack),
- dbg_ui_trace_win:display(State#state.status),
- State#state{win=Win, cm=Mod, stack=Stack};
-
-gui_cmd('Kill', State) ->
- exit(State#state.pid, kill),
- State;
-gui_cmd('Messages', State) ->
- case int:meta(State#state.meta, messages) of
- [] ->
- dbg_ui_trace_win:eval_output("< No Messages!\n", bold);
- Messages ->
- dbg_ui_trace_win:eval_output("< --- Current Messages ---\n",
- bold),
- lists:foldl(
- fun(Msg, N) ->
- Str1 = io_lib:format(" ~w:", [N]),
- dbg_ui_trace_win:eval_output(Str1, bold),
- Str2 = io_lib:format(" ~ts~n",[io_lib:print(Msg)]),
- dbg_ui_trace_win:eval_output(Str2, normal),
- N+1
- end,
- 1,
- Messages)
- end,
- State;
-gui_cmd('Back Trace', State) ->
- dbg_ui_trace_win:trace_output("\nBACK TRACE\n----------\n"),
- lists:foreach(
- fun({Le, {Mod,Func,Args}}) ->
- Str = io_lib:format("~p > ~p:~p~p~n",
- [Le, Mod, Func, Args]),
- dbg_ui_trace_win:trace_output(Str);
- ({Le, {Fun,Args}}) ->
- Str = io_lib:format("~p > ~p~p~n", [Le, Fun, Args]),
- dbg_ui_trace_win:trace_output(Str);
- (_) -> ignore
- end,
- int:meta(State#state.meta, backtrace, State#state.backtrace)),
- dbg_ui_trace_win:trace_output("\n"),
- State;
-gui_cmd('Up', State) ->
- {Cur, Max} = State#state.stack,
- case int:meta(State#state.meta, stack_frame, {up, Cur}) of
- {New, {undefined,-1}, _Bs} -> % call from non-interpreted code
- Stack = {New, Max},
- Win = dbg_ui_trace_win:show_no_code(State#state.win),
- dbg_ui_trace_win:update_bindings([]),
- gui_enable_updown(State#state.stack_trace, Stack),
- dbg_ui_trace_win:display({New,null,null}),
- State#state{win=Win, cm=null, stack=Stack};
-
- {New, {Mod,Line}, Bs} ->
- Stack = {New, Max},
- Win = gui_show_module(State#state.win, Mod, Line,
- State#state.cm, State#state.pid,
- where),
- dbg_ui_trace_win:update_bindings(Bs),
- gui_enable_updown(State#state.stack_trace, Stack),
- dbg_ui_trace_win:display({New,Mod,Line}),
- State#state{win=Win, cm=Mod, stack=Stack};
- top ->
- dbg_ui_trace_win:enable(['Up'], false),
- State
- end;
-gui_cmd('Down', State) ->
- {Cur, Max} = State#state.stack,
- case int:meta(State#state.meta, stack_frame, {down, Cur}) of
- {New, {undefined,-1}, _Bs} -> % call from non-interpreted code
- Stack = {New, Max},
- Win = dbg_ui_trace_win:show_no_code(State#state.win),
- dbg_ui_trace_win:update_bindings([]),
- gui_enable_updown(State#state.stack_trace, Stack),
- dbg_ui_trace_win:display({New,null,null}),
- State#state{win=Win, cm=null, stack=Stack};
-
- {New, {Mod,Line}, Bs} ->
- Stack = {New, Max},
- Win = gui_show_module(State#state.win, Mod, Line,
- State#state.cm, State#state.pid,
- where),
- dbg_ui_trace_win:update_bindings(Bs),
- gui_enable_updown(State#state.stack_trace, Stack),
- dbg_ui_trace_win:display({New,Mod,Line}),
- State#state{win=Win, cm=Mod, stack=Stack};
-
- bottom ->
- gui_cmd('Where', State)
- end;
-
-%% Break menu
-gui_cmd('Line Break...', State) ->
- add_break(State#state.gs, State#state.coords, line,
- State#state.cm,
- dbg_ui_trace_win:selected_line(State#state.win)),
- State;
-gui_cmd('Conditional Break...', State) ->
- add_break(State#state.gs, State#state.coords, conditional,
- State#state.cm,
- dbg_ui_trace_win:selected_line(State#state.win)),
- State;
-gui_cmd('Function Break...', State) ->
- add_break(State#state.gs, State#state.coords, function,
- State#state.cm, undefined),
- State;
-gui_cmd('Enable All', State) ->
- Breaks = int:all_breaks(),
- ThisMod = State#state.cm,
- lists:foreach(fun ({{Mod, Line}, _Options}) when Mod==ThisMod ->
- int:enable_break(Mod, Line);
- (_Break) ->
- ignore
- end,
- Breaks),
- State;
-gui_cmd('Disable All', State) ->
- Breaks = int:all_breaks(),
- ThisMod = State#state.cm,
- lists:foreach(fun ({{Mod, Line}, _Options}) when Mod==ThisMod ->
- int:disable_break(Mod, Line);
- (_Break) ->
- ignore
- end,
- Breaks),
- State;
-gui_cmd('Delete All', State) ->
- int:no_break(State#state.cm),
- State;
-gui_cmd({break, {Mod, Line}, What}, State) ->
- case What of
- add -> int:break(Mod, Line);
- delete -> int:delete_break(Mod, Line);
- {status, inactive} -> int:disable_break(Mod, Line);
- {status, active} -> int:enable_break(Mod, Line);
- {trigger, Action} -> int:action_at_break(Mod, Line, Action)
- end,
- State;
-
-%% Options menu
-gui_cmd({'Trace Window', TraceWin}, State) ->
- Trace = lists:member('Trace Area', TraceWin),
- int:meta(State#state.meta, trace, Trace),
- Win = dbg_ui_trace_win:configure(State#state.win, TraceWin),
- {Status,_,_} = State#state.status,
- if
- Status==break; Status==wait_break ->
- gui_enable_btrace(Trace, State#state.stack_trace);
- true -> ignore
- end,
- State#state{win=Win, trace=Trace};
-gui_cmd({'Stack Trace', [Name]}, State) ->
- int:meta(State#state.meta, stack_trace, map(Name)),
- {Status,_,_} = State#state.status,
- if
- Status==break; Status==wait_break ->
- gui_enable_btrace(State#state.trace, map(Name));
- true -> ignore
- end,
- State;
-gui_cmd('Back Trace Size...', State) ->
- dbg_ui_edit:start(State#state.gs, State#state.coords, "Backtrace",
- 'Backtrace:', {integer, State#state.backtrace}),
- State;
-
-%% Help menu
-gui_cmd('Debugger', State) ->
- Window = dbg_ui_trace_win:get_window(State#state.win),
- HelpFile = filename:join([code:lib_dir(debugger),
- "doc", "html", "part_frame.html"]),
- tool_utils:open_help(Window, HelpFile),
- State;
-
-gui_cmd({user_command, Cmd}, State) ->
- {Status, _Mod, _Line} = State#state.status,
- if
- Status==break;
- Status==wait_break;
- Status==wait_running ->
- Cm = State#state.cm,
- Arg = case State#state.stack of
- {Cur, Max} when Cur<Max -> {Cm, Cmd, Cur};
- _Stack -> {Cm, Cmd}
- end,
-
- %% Reply will be received as {Meta, {eval_rsp, Res}}
- int:meta(State#state.meta, eval, Arg);
- true ->
- Str = "Commands not allowed",
- dbg_ui_trace_win:eval_output([$<,Str,10], normal)
- end,
- State;
-
-gui_cmd({edit, {Var, Val}}, State) ->
- dbg_ui_edit:start(State#state.gs, State#state.coords,
- "Edit variable", Var, {term, Val}),
- State.
-
-add_break(GS, Coords, Type, undefined, _Line) ->
- dbg_ui_break:start(GS, Coords, Type);
-add_break(GS, Coords, Type, Mod, undefined) ->
- dbg_ui_break:start(GS, Coords, Type, Mod);
-add_break(GS, Coords, Type, Mod, Line) ->
- dbg_ui_break:start(GS, Coords, Type, Mod, Line).
-
-%%--Commands from the interpreter-------------------------------------
-
-int_cmd({interpret, Mod}, State) ->
- if
- Mod==State#state.cm ->
- State#state{cm_obsolete=true};
- true ->
- State
- end;
-int_cmd({no_interpret, Mod}, State) ->
- if
- Mod==State#state.cm ->
- State#state{cm_obsolete=true};
- true ->
- Win = dbg_ui_trace_win:remove_code(State#state.win, Mod),
- State#state{win=Win}
- end;
-
-int_cmd({new_break, Break}, State) ->
- Win = dbg_ui_trace_win:add_break(State#state.win, 'Break', Break),
- State#state{win=Win};
-int_cmd({delete_break, Point}, State) ->
- Win = dbg_ui_trace_win:delete_break(State#state.win, Point),
- State#state{win=Win};
-int_cmd({break_options, Break}, State) ->
- Win = dbg_ui_trace_win:update_break(State#state.win, Break),
- State#state{win=Win};
-int_cmd(no_break, State) ->
- Win = dbg_ui_trace_win:clear_breaks(State#state.win),
- State#state{win=Win};
-int_cmd({no_break, Mod}, State) ->
- Win = dbg_ui_trace_win:clear_breaks(State#state.win, Mod),
- State#state{win=Win}.
-
-%%--Commands from the meta process------------------------------------
-
-%% Message received when first attached to a living process
-%% '_Trace' is a boolean indicating if the process is traced or not --
-%% ignore this as we already have ordered tracing or not depending on if
-%% the Trace Area is shown or not.
-meta_cmd({attached, Mod, Line, _Trace}, State) ->
- Win = if
- Mod/=undefined ->
- gui_enable_functions(init),
- gui_show_module(State#state.win, Mod, Line,
- State#state.cm, State#state.pid,
- break);
- true -> State#state.win
- end,
- State#state{win=Win, status={init,Mod,Line}, cm=Mod};
-
-%% Message received when returning to interpreted code
-meta_cmd({re_entry, dbg_ieval, eval_fun}, State) ->
- State;
-meta_cmd({re_entry, Mod, _Func}, State) ->
- Obs = State#state.cm_obsolete,
- case State#state.cm of
- Mod when Obs==true ->
- Win = gui_load_module(State#state.win, Mod,State#state.pid),
- State#state{win=Win, cm_obsolete=false};
- Mod -> State;
- Cm ->
- Win = gui_show_module(State#state.win, Mod, 0,
- Cm, State#state.pid, break),
- State#state{win=Win, cm=Mod}
- end;
-
-%% Message received when attached to a terminated process
-meta_cmd({exit_at, null, Reason, Cur}, State) ->
- Stack = {Cur, Cur},
- gui_enable_functions(exit),
- gui_enable_updown(false, Stack),
- dbg_ui_trace_win:display({exit, null, Reason}),
- State#state{status={exit,null,Reason}, stack=Stack};
-meta_cmd({exit_at, {Mod,Line}, Reason, Cur}, State) ->
- Stack = {Cur+1, Cur+1},
- Win = gui_show_module(State#state.win, Mod, Line,
- State#state.cm, State#state.pid, break),
- gui_enable_functions(exit),
- gui_enable_updown(State#state.stack_trace, Stack),
- gui_enable_btrace(State#state.trace, State#state.stack_trace),
- gui_update_bindings(State#state.meta),
- dbg_ui_trace_win:display({exit, {Mod,Line}, Reason}),
- State#state{win=Win, cm=Mod,status={exit,{Mod,Line},Reason},
- stack=Stack};
-
-meta_cmd({break_at, Mod, Line, Cur}, State) ->
- Stack = {Cur,Cur},
- Win = gui_show_module(State#state.win, Mod, Line,
- State#state.cm, State#state.pid, break),
- gui_enable_functions(break),
- gui_enable_updown(State#state.stack_trace, Stack),
- gui_enable_btrace(State#state.trace, State#state.stack_trace),
- gui_update_bindings(State#state.meta),
- dbg_ui_trace_win:display({break, Mod, Line}),
- State#state{win=Win, cm=Mod, status={break,Mod,Line}, stack=Stack};
-meta_cmd({func_at, Mod, Line, Cur}, State) ->
- Stack = {Cur,Cur},
- Win = gui_show_module(State#state.win, Mod, Line,
- State#state.cm, State#state.pid, where),
- gui_enable_functions(idle),
- dbg_ui_trace_win:display(idle),
- State#state{win=Win, cm=Mod, status={idle,Mod,Line}, stack=Stack};
-meta_cmd({wait_at, Mod, Line, Cur}, #state{status={Status,_,_}}=State)
- when Status/=init, Status/=break ->
- Stack = {Cur,Cur},
- gui_enable_functions(wait_running),
- dbg_ui_trace_win:display({wait,Mod,Line}),
- State#state{status={wait_running,Mod,Line}, stack=Stack};
-meta_cmd({wait_at, Mod, Line, Cur}, State) ->
- Stack = {Cur,Cur},
- Win = gui_show_module(State#state.win, Mod, Line,
- State#state.cm, State#state.pid, break),
- gui_enable_functions(wait_break),
- gui_enable_updown(State#state.stack_trace, Stack),
- gui_enable_btrace(State#state.trace, State#state.stack_trace),
- gui_update_bindings(State#state.meta),
- dbg_ui_trace_win:display({wait, Mod, Line}),
- State#state{win=Win, cm=Mod, status={wait_break,Mod,Line},
- stack=Stack};
-meta_cmd({wait_after_at, Mod, Line, Sp}, State) ->
- meta_cmd({wait_at, Mod, Line, Sp}, State);
-meta_cmd(running, State) ->
- Win = dbg_ui_trace_win:unmark_line(State#state.win),
- gui_enable_functions(running),
- dbg_ui_trace_win:update_bindings([]),
- dbg_ui_trace_win:display({running, State#state.cm}),
- State#state{win=Win, status={running,null,null}};
-
-meta_cmd(idle, State) ->
- Win = dbg_ui_trace_win:show_no_code(State#state.win),
- gui_enable_functions(idle),
- dbg_ui_trace_win:update_bindings([]),
- dbg_ui_trace_win:display(idle),
- State#state{win=Win, status={idle,null,null}, cm=undefined};
-
-%% Message about changed trace option can be ignored, the change must
-%% have been ordered by this process. (In theory, the change could have
-%% been ordered by another attached process. The Debugger, though,
-%% allows max one attached process per debugged process).
-meta_cmd({trace, _Bool}, State) ->
- State;
-
-meta_cmd({stack_trace, Flag}, State) ->
- dbg_ui_trace_win:select(map(Flag), true),
- gui_enable_updown(Flag, State#state.stack),
- {Status,_,_} = State#state.status,
- if
- Status==break; Status==wait_break ->
- gui_enable_btrace(State#state.trace, Flag);
- true -> ignore
- end,
- State#state{stack_trace=Flag};
-
-meta_cmd({trace_output, Str}, State) ->
- dbg_ui_trace_win:trace_output(Str),
- State;
-
-%% Reply on a user command
-meta_cmd({eval_rsp, Res}, State) ->
- Str = io_lib:print(Res),
- dbg_ui_trace_win:eval_output([$<,Str,10], normal),
- State.
-
-
-%%====================================================================
-%% GUI auxiliary functions
-%%====================================================================
-
-menus() ->
- [{'File', [{'Close', no}]},
- {'Edit', [{'Go To Line...', no},
- {'Search...', no}]},
- {'Process', [{'Step', 0},
- {'Next', 0},
- {'Continue', 0},
- {'Finish', 0},
- {'Skip', no},
- {'Time Out', no},
- {'Stop', no},
- separator,
- {'Kill', no},
- separator,
- {'Messages', 0},
- {'Back Trace', no},
- separator,
- {'Where', 0},
- {'Up', no},
- {'Down', no}]},
- {'Break', [{'Line Break...', 5},
- {'Conditional Break...', no},
- {'Function Break...', no},
- separator,
- {'Enable All', no},
- {'Disable All', no},
- {'Delete All', 0},
- separator]},
- {'Options', [{'Trace Window', no, cascade,
- [{'Button Area', no, check},
- {'Evaluator Area', no, check},
- {'Bindings Area', no, check},
- {'Trace Area', no, check}]},
- {'Stack Trace', no, cascade,
- [{'Stack On, Tail', no, radio},
- {'Stack On, No Tail', no, radio},
- {'Stack Off', no, radio}]},
- {'Back Trace Size...', no}]},
- {'Help', [{'Debugger', no}]}].
-
-%% enable(Status) -> [MenuItem]
-%% Status = init % when first message from Meta has arrived
-%% | idle | break | exit | wait_break | wait_running | running
-enable(init) -> [];
-enable(idle) -> ['Stop','Kill'];
-enable(break) -> ['Step','Next','Continue','Finish','Skip',
- 'Kill','Messages'];
-enable(exit) -> [];
-enable(wait_break) -> ['Continue','Time Out','Kill'];
-enable(wait_running) -> ['Stop','Kill'];
-enable(running) -> ['Stop','Kill'].
-
-all_buttons() ->
- ['Step','Next','Continue','Finish','Skip','Time Out','Stop',
- 'Kill','Messages','Back Trace','Where','Up','Down'].
-
-shortcut(s) -> {if_enabled, 'Step'};
-shortcut(n) -> {if_enabled, 'Next'};
-shortcut(c) -> {if_enabled, 'Continue'};
-shortcut(f) -> {if_enabled, 'Finish'};
-shortcut(m) -> {if_enabled, 'Messages'};
-shortcut(w) -> {if_enabled, 'Where'};
-
-shortcut(b) -> {always, 'Line Break...'};
-shortcut(d) -> {always, 'Delete All'};
-
-shortcut(_) -> false.
-
-map('Stack On, Tail') -> all; % Stack trace
-map('Stack On, No Tail') -> no_tail;
-map('Stack Off') -> false;
-map(all) -> 'Stack On, Tail';
-map(true) -> 'Stack On, Tail';
-map(no_tail) -> 'Stack On, No Tail';
-map(false) -> 'Stack Off'.
-
-
-%% gui_show_module(Win, Mod, Line, Cm, Pid, How) -> Win
-%% gui_show_module(Win, {Mod,Line}, _Reason, Cm, Pid, How) -> Win
-%% How = where | break
-%% Show contents of a module in code area
-gui_show_module(Win, {Mod,Line}, _Reason, Cm, Pid, How) ->
- gui_show_module(Win, Mod, Line, Cm, Pid, How);
-gui_show_module(Win, Mod, Line, Mod, _Pid, How) ->
- dbg_ui_trace_win:mark_line(Win, Line, How);
-gui_show_module(Win, Mod, Line, _Cm, Pid, How) ->
- Win2 = case dbg_ui_trace_win:is_shown(Win, Mod) of
- {true, Win3} -> Win3;
- false -> gui_load_module(Win, Mod, Pid)
- end,
- dbg_ui_trace_win:mark_line(Win2, Line, How).
-
-gui_load_module(Win, Mod, Pid) ->
- dbg_ui_trace_win:display({text, "Loading module..."}),
- Contents = int:contents(Mod, Pid),
- Win2 = dbg_ui_trace_win:show_code(Win, Mod, Contents),
- dbg_ui_trace_win:display({text, ""}),
- Win2.
-
-gui_update_bindings(Meta) ->
- Bs = int:meta(Meta, bindings, nostack),
- dbg_ui_trace_win:update_bindings(Bs).
-
-gui_enable_functions(Status) ->
- Enable = enable(Status),
- Disable = all_buttons() -- Enable,
- dbg_ui_trace_win:enable(Disable, false),
- dbg_ui_trace_win:enable(Enable, true).
-
-gui_enable_updown(Flag, Stack) ->
- {Enable, Disable} =
- if
- Flag==false -> {[], ['Up', 'Down']};
- true ->
- case Stack of
- {1,1} -> {[], ['Up', 'Down']};
- {2,2} -> {[], ['Up', 'Down']};
- {Max,Max} -> {['Up'], ['Down']};
- {2,_Max} -> {['Down'], ['Up']};
- {_Cur,_Max} -> {['Up', 'Down'], []}
- end
- end,
- dbg_ui_trace_win:enable(Enable, true),
- dbg_ui_trace_win:enable(Disable, false),
- if
- Enable==[] -> dbg_ui_trace_win:enable(['Where'], false);
- true -> dbg_ui_trace_win:enable(['Where'], true)
- end.
-
-gui_enable_btrace(Trace, StackTrace) ->
- Bool = if
- Trace==false -> false;
- StackTrace==false -> false;
- true -> true
- end,
- dbg_ui_trace_win:enable(['Back Trace'], Bool).
diff --git a/lib/debugger/src/dbg_ui_trace_win.erl b/lib/debugger/src/dbg_ui_trace_win.erl
deleted file mode 100644
index beb3fbd71e..0000000000
--- a/lib/debugger/src/dbg_ui_trace_win.erl
+++ /dev/null
@@ -1,1595 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. 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(dbg_ui_trace_win).
--compile([{nowarn_deprecated_function,{gs,button,2}},
- {nowarn_deprecated_function,{gs,button,3}},
- {nowarn_deprecated_function,{gs,checkbutton,2}},
- {nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,create,4}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,editor,2}},
- {nowarn_deprecated_function,{gs,editor,3}},
- {nowarn_deprecated_function,{gs,entry,2}},
- {nowarn_deprecated_function,{gs,entry,3}},
- {nowarn_deprecated_function,{gs,frame,3}},
- {nowarn_deprecated_function,{gs,grid,3}},
- {nowarn_deprecated_function,{gs,gridline,2}},
- {nowarn_deprecated_function,{gs,label,2}},
- {nowarn_deprecated_function,{gs,label,3}},
- {nowarn_deprecated_function,{gs,menubar,2}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,window,2}},
- {nowarn_deprecated_function,{gs,window,3}}]).
-
-%% External exports
--export([init/0]).
--export([create_win/4, get_window/1,
- configure/2,
- enable/2, is_enabled/1, select/2,
- add_break/3, update_break/2, delete_break/2,
- clear_breaks/1, clear_breaks/2,
- display/1, % Help messages
- is_shown/2, % Code area
- show_code/3, show_no_code/1, remove_code/2,
- mark_line/3, unmark_line/1,
- select_line/2, selected_line/1,
- eval_output/2, % Evaluator area
- update_bindings/1, % Bindings area
- trace_output/1, % Trace area
- handle_event/2
- ]).
--export([helpwin/4, % Help windows
- helpwin/5]).
-
--record(breakInfo, {point, status, break}).
--record(winInfo, {window, % gsobj()
- size, % {W, H}
- flags, % {F,F,F,F} F = open|close
-
- marked_line=0, % integer() Current line
- selected_line=0, % integer() Selected line
-
- breaks=[], % [#breakInfo{}] Known breakpoints
-
- editor, % {Mod, Editor} Visible code editor
- editors=[] % [{Mod,Editor}] Code editors
- }).
-
-
-%%====================================================================
-%% External exports
-%%====================================================================
-
-%%--------------------------------------------------------------------
-%% init() -> GS
-%% GS = term()
-%%--------------------------------------------------------------------
-init() ->
- dbg_ui_win:init().
-
-%%--------------------------------------------------------------------
-%% create_win(GS, Title, TraceWin, Menus) -> #winInfo{}
-%% GS = gsobj()
-%% Title = string()
-%% TraceWin = [WinArea]
-%% WinArea = 'Button|Evaluator|Bindings|Trace Area'
-%% Menus = [menu()] See dbg_ui_win.erl
-%%--------------------------------------------------------------------
-create_win(GS, Title, TraceWin, Menus) ->
- Bu = flip(lists:member('Button Area', TraceWin)),
- Ev = flip(lists:member('Evaluator Area', TraceWin)),
- Bi = flip(lists:member('Bindings Area', TraceWin)),
- Tr = flip(lists:member('Trace Area', TraceWin)),
-
- Win = gs:window(trace_window, GS, [{title, Title},
- {width, 550},
- {configure,true}, {destroy,true},
- {keypress,true}, {motion,true}]),
-
- MenuBar = gs:menubar(Win, []),
- dbg_ui_win:create_menus(MenuBar, Menus),
- dbg_ui_winman:windows_menu(MenuBar),
-
- FrameOpts = [{anchor,nw}, {relief,raised}, {bw,2}, {keypress,true}],
- Editor = code_area(2, 25, FrameOpts, Win),
- button_area(Bu, 2, 235, FrameOpts, Win),
- eval_area({Ev,Bi}, 2, 265, FrameOpts, Win),
- bind_area({Ev,Bi}, 300, 265, FrameOpts, Win),
- trace_area(Tr, 2, 475, FrameOpts, Win),
-
- Flags = {Bu, Ev, Bi, Tr},
- resizebar(rb1(Flags), 'RB1', 2, 225, 710, 10, Win),
- resizebar(rb2(Flags), 'RB2', 2, 465, 710, 10, Win),
- resizebar(rb3(Flags), 'RB3', 290, 265, 10, 200, Win),
- config_v(),
- config_h(),
-
- gs:config(Win,{height,
- 25 +
- gs:read('CodeArea', height) +
- gs:read('RB1', height) +
- gs:read('ButtonArea', height) +
- erlang:max(gs:read('EvalArea', height),
- gs:read('BindArea', height)) +
- gs:read('RB2', height) +
- gs:read('TraceArea', height)}),
-
- gs:config(Win, {map, true}),
- #winInfo{window=Win, size={gs:read(Win,width), gs:read(Win,height)},
- flags=Flags,
- editor={'$top', Editor}, editors=[{'$top', Editor}]}.
-
-flip(true) -> open;
-flip(false) -> close.
-
-%%--------------------------------------------------------------------
-%% get_window(WinInfo) -> Window
-%% WinInfo = #winInfo{}
-%% Window = gsobj()
-%%--------------------------------------------------------------------
-get_window(WinInfo) ->
- WinInfo#winInfo.window.
-
-%%--------------------------------------------------------------------
-%% configure(WinInfo, TraceWin) -> WinInfo
-%% WinInfo = #winInfo{}
-%% TraceWin = [WinArea]
-%% WinArea = 'Button|Evaluator|Bindings|Trace Area'
-%% Window areas should be opened or closed.
-%%--------------------------------------------------------------------
-configure(WinInfo, TraceWin) ->
- {Bu1, Ev1, Bi1, Tr1} = OldFlags = WinInfo#winInfo.flags,
- Bu2 = flip(lists:member('Button Area', TraceWin)),
- Ev2 = flip(lists:member('Evaluator Area', TraceWin)),
- Bi2 = flip(lists:member('Bindings Area', TraceWin)),
- Tr2 = flip(lists:member('Trace Area', TraceWin)),
- NewFlags = {Bu2, Ev2, Bi2, Tr2},
-
- Win = WinInfo#winInfo.window,
- W = gs:read(Win, width),
- H = gs:read(Win, height),
-
- H2 = if
- Bu1 =:= close, Bu2 =:= open ->
- resize_button_area(open, width, W-4),
- gs:config('ButtonArea', {height, 30}),
- H+30;
- Bu1 =:= open, Bu2 =:= close ->
- gs:config('ButtonArea', [{width, 0}, {height, 0}]),
- H-30;
- true -> H
- end,
- H3 = if
- Ev1 =:= close, Ev2 =:= open, Bi1 =:= open ->
- Wnew1 = round((W-10-4)/2), % W = window/2 - rb - pads
- Hbi1 = gs:read('BindArea', height), % H = bind area h
- resize_eval_area(open, width, Wnew1),
- resize_eval_area(open, height, Hbi1),
- gs:config('RB3', {width, 10}),
- gs:config('RB3', {height, Hbi1}),
- resize_bind_area(open, width,
- Wnew1-gs:read('BindArea', width)),
- H2;
- Ev1 =:= close, Ev2 =:= open, Bi1 =:= close ->
- resize_eval_area(open, width, W-4),
- resize_eval_area(open, height, 200),
- H2+200;
- Ev1 =:= open, Ev2 =:= close, Bi1 =:= open ->
- gs:config('EvalArea', [{width,0}, {height,0}]),
- gs:config('RB3', [{width, 0}, {height, 0}]),
- Wnew2 = W-4,
- resize_bind_area(open, width,
- Wnew2-gs:read('BindArea', width)),
- H2;
- Ev1 =:= open, Ev2 =:= close, Bi1 =:= close ->
- Hs1 = gs:read('EvalArea', height),
- gs:config('EvalArea', [{width, 0}, {height, 0}]),
- H2-Hs1;
- true -> H2
- end,
- H4 = if
- Bi1 =:= close, Bi2 =:= open, Ev2 =:= open ->
- Wnew3 = round((W-10-4)/2), % W = window/2 - rb - pads
- Hs2 = gs:read('EvalArea', height), % H = eval area h
- resize_bind_area(open, width, Wnew3),
- resize_bind_area(open, height, Hs2),
- gs:config('RB3', [{width,10},{height,Hs2}]),
- resize_eval_area(open, width,
- Wnew3-gs:read('EvalArea', width)),
- H3;
- Bi1 =:= close, Bi2 =:= open, Ev2 =:= close ->
- resize_bind_area(open, width, W-4),
- resize_bind_area(open, height, 200),
- H3+200;
- Bi1 =:= open, Bi2 =:= close, Ev2 =:= open ->
- gs:config('BindArea', [{width, 0}, {height, 0}]),
- gs:config('RB3', [{width, 0}, {height, 0}]),
- Wnew4 = W-4,
- resize_eval_area(open, width,
- Wnew4-gs:read('EvalArea', width)),
- H3;
- Bi1 =:= open, Bi2 =:= close, Ev2 =:= close ->
- Hbi2 = gs:read('BindArea', height),
- gs:config('BindArea', [{width, 0}, {height, 0}]),
- H3-Hbi2;
- true -> H3
- end,
- H5 = if
- Tr1 =:= close, Tr2 =:= open ->
- resize_trace_area(open, width, W-4),
- resize_trace_area(open, height, 200),
- H4+200;
- Tr1 =:= open, Tr2 =:= close ->
- Hf = gs:read('TraceArea', height),
- gs:config('TraceArea', [{width, 0}, {height, 0}]),
- H4-Hf;
- true -> H4
- end,
- gs:config(Win, {height, H5}),
-
- RB1old = rb1(OldFlags), RB1new = rb1(NewFlags),
- if
- RB1old =:= close, RB1new =:= open ->
- gs:config('RB1', [{width, W-4}, {height, 10}]),
- gs:config(Win, {height, gs:read(Win, height)+10});
- RB1old =:= open, RB1new =:= close ->
- gs:config('RB1', [{width, 0}, {height, 0}, lower]),
- gs:config(Win, {height, gs:read(Win, height)-10});
- true -> ignore
- end,
-
- RB2old = rb2(OldFlags), RB2new = rb2(NewFlags),
- if
- RB2old =:= close, RB2new =:= open ->
- gs:config('RB2', [{width, W-4}, {height, 10}]),
- gs:config(Win, {height,gs:read(Win, height)+10});
- RB2old =:= open, RB2new =:= close ->
- gs:config('RB2', [{width, 0}, {height, 0}, lower]),
- gs:config(Win, {height, gs:read(Win, height)-10});
- true -> ignore
- end,
- config_v(),
- config_h(),
-
- flush_configure(),
-
- WinInfo#winInfo{size={gs:read(Win, width), gs:read(Win, height)},
- flags=NewFlags}.
-
-flush_configure() ->
- receive
- {gs, _Id, configure, _Data, _Arg} ->
- flush_configure()
- after 100 ->
- true
- end.
-
-%%--------------------------------------------------------------------
-%% enable([MenuItem], Bool)
-%% is_enabled(MenuItem) -> Bool
-%% MenuItem = atom()
-%% Bool = boolean()
-%%--------------------------------------------------------------------
-enable(MenuItems, Bool) ->
- lists:foreach(fun(MenuItem) ->
- gs:config(MenuItem, {enable, Bool}),
- case is_button(MenuItem) of
- {true, Button} ->
- gs:config(Button, {enable, Bool});
- false -> ignore
- end
- end,
- MenuItems).
-
-is_enabled(MenuItem) ->
- gs:read(MenuItem, enable).
-
-%%--------------------------------------------------------------------
-%% select(MenuItem, Bool)
-%% MenuItem = atom()
-%% Bool = boolean()
-%%--------------------------------------------------------------------
-select(MenuItem, Bool) ->
- dbg_ui_win:select(MenuItem, Bool).
-
-%%--------------------------------------------------------------------
-%% add_break(WinInfo, Name, {Point, Options}) -> WinInfo
-%% WinInfo = #winInfo{}
-%% Name = atom() Menu name
-%% Point = {Mod, Line}
-%% Options = [Status, Action, Mods, Cond]
-%% Status = active | inactive
-%% Action = enable | disable | delete
-%% Mods = null (not used)
-%% Cond = null | {Mod, Func}
-%%--------------------------------------------------------------------
-add_break(WinInfo, Menu, {{Mod,Line},[Status|_Options]}=Break) ->
- case lists:keyfind(Mod, 1, WinInfo#winInfo.editors) of
- {Mod, Editor} ->
- add_break_to_code(Editor, Line, Status);
- false -> ignore
- end,
- add_break_to_menu(WinInfo, Menu, Break).
-
-add_break_to_code(Editor, Line, Status) ->
- Color = if Status =:= active -> red; Status =:= inactive -> blue end,
- config_editor(Editor, [{overwrite,{{Line,0},"-@- "}},
- {fg,{{{Line,0},{Line,lineend}}, Color}}]).
-
-add_break_to_menu(WinInfo, Menu, {Point, [Status|_Options]=Options}) ->
- Break = dbg_ui_win:add_break(Menu, Point),
- dbg_ui_win:update_break(Break, Options),
- BreakInfo = #breakInfo{point=Point, status=Status, break=Break},
- WinInfo#winInfo{breaks=[BreakInfo|WinInfo#winInfo.breaks]}.
-
-%%--------------------------------------------------------------------
-%% update_break(WinInfo, {Point, Options}) -> WinInfo
-%% WinInfo = #winInfo{}
-%% Point = {Mod, Line}
-%% Options = [Status, Action, Mods, Cond]
-%% Status = active | inactive
-%% Action = enable | disable | delete
-%% Mods = null (not used)
-%% Cond = null | {Mod, Func}
-%%--------------------------------------------------------------------
-update_break(WinInfo, {{Mod,Line},[Status|_Options]}=Break) ->
- case lists:keyfind(Mod, 1, WinInfo#winInfo.editors) of
- {Mod, Editor} ->
- add_break_to_code(Editor, Line, Status);
- false -> ignore
- end,
- update_break_in_menu(WinInfo, Break).
-
-update_break_in_menu(WinInfo, {Point, [Status|_Options]=Options}) ->
- {value, BreakInfo} = lists:keysearch(Point, #breakInfo.point,
- WinInfo#winInfo.breaks),
- dbg_ui_win:update_break(BreakInfo#breakInfo.break, Options),
- BreakInfo2 = BreakInfo#breakInfo{status=Status},
- WinInfo#winInfo{breaks=lists:keyreplace(Point, #breakInfo.point,
- WinInfo#winInfo.breaks,
- BreakInfo2)}.
-
-%%--------------------------------------------------------------------
-%% delete_break(WinInfo, Point) -> WinInfo
-%% WinInfo = #winInfo{}
-%% Point = {Mod, Line}
-%%--------------------------------------------------------------------
-delete_break(WinInfo, {Mod,Line}=Point) ->
- case lists:keyfind(Mod, 1, WinInfo#winInfo.editors) of
- {Mod, Editor} -> delete_break_from_code(Editor, Line);
- false -> ignore
- end,
- delete_break_from_menu(WinInfo, Point).
-
-delete_break_from_code(Editor, Line) ->
- Prefix = string:substr(integer_to_list(Line)++": ", 1, 5),
- config_editor(Editor, [{overwrite,{{Line,0},Prefix}},
- {fg,{{{Line,0},{Line,lineend}}, black}}]).
-
-delete_break_from_menu(WinInfo, Point) ->
- {value, BreakInfo} = lists:keysearch(Point, #breakInfo.point,
- WinInfo#winInfo.breaks),
- dbg_ui_win:delete_break(BreakInfo#breakInfo.break),
- WinInfo#winInfo{breaks=lists:keydelete(Point, #breakInfo.point,
- WinInfo#winInfo.breaks)}.
-
-%%--------------------------------------------------------------------
-%% clear_breaks(WinInfo) -> WinInfo
-%% clear_breaks(WinInfo, Mod) -> WinInfo
-%% WinInfo = #winInfo{}
-%%--------------------------------------------------------------------
-clear_breaks(WinInfo) ->
- clear_breaks(WinInfo, all).
-clear_breaks(WinInfo, Mod) ->
- Remove = if
- Mod =:= all -> WinInfo#winInfo.breaks;
- true ->
- lists:filter(fun(#breakInfo{point={Mod2,_L}}) ->
- if
- Mod2 =:= Mod -> true;
- true -> false
- end
- end,
- WinInfo#winInfo.breaks)
- end,
- lists:foreach(fun(#breakInfo{point=Point}) ->
- delete_break(WinInfo, Point)
- end,
- Remove),
- Remain = WinInfo#winInfo.breaks -- Remove,
- WinInfo#winInfo{breaks=Remain}.
-
-%%--------------------------------------------------------------------
-%% display(Arg)
-%% Arg = idle | {Status,Mod,Line} | {running,Mod}
-%% | {exit,Where,Reason} | {text,Text}
-%% Status = break | wait | Level
-%% Level = int()
-%% Mod = atom()
-%% Line = integer()
-%% Where = {Mod,Line} | null
-%% Reason = term()
-%% Text = string()
-%%--------------------------------------------------------------------
-display(Arg) ->
- Str = case Arg of
- idle -> "State: uninterpreted";
- {exit, {Mod,Line}, Reason} ->
- gs:config(trace_window, raise),
- io_lib:format("State: EXITED [~w.erl/~w], Reason:~w",
- [Mod, Line, Reason]);
- {exit, null, Reason} ->
- gs:config(trace_window, raise),
- io_lib:format("State: EXITED [uninterpreted], "
- "Reason:~w", [Reason]);
- {Level, null, _Line} when is_integer(Level) ->
- io_lib:format("*** Call level #~w "
- "(in non-interpreted code)",
- [Level]);
- {Level, Mod, Line} when is_integer(Level) ->
- io_lib:format("*** Call level #~w [~w.erl/~w]",
- [Level, Mod, Line]);
- {Status, Mod, Line} ->
- What = case Status of
- wait -> 'receive';
- _ -> Status
- end,
- io_lib:format("State: ~w [~w.erl/~w]",
- [What, Mod, Line]);
- {running, Mod} ->
- io_lib:format("State: running [~w.erl]", [Mod]);
- {text, Text} -> Text
- end,
- gs:config(info_window, {label,{text,lists:flatten(Str)}}).
-
-%%--------------------------------------------------------------------
-%% is_shown(WinInfo, Mod) -> {true, WinInfo} | false
-%% show_code(WinInfo, Mod, Contents) -> WinInfo
-%% show_no_code(WinInfo) -> WinInfo
-%% remove_code(WinInfo, Mod) -> WinInfo
-%% WinInfo = #winInfo{}
-%% Mod = atom()
-%% Contents = string()
-%% Note: remove_code/2 should not be used for currently shown module.
-%%--------------------------------------------------------------------
-is_shown(WinInfo, Mod) ->
- case lists:keyfind(Mod, 1, WinInfo#winInfo.editors) of
- {Mod, Editor} ->
- gs:config(Editor, raise),
- {true, WinInfo#winInfo{editor={Mod, Editor}}};
- false -> false
- end.
-
-show_code(WinInfo, Mod, Contents) ->
- Editors = WinInfo#winInfo.editors,
- {Flag, Editor} = case lists:keyfind(Mod, 1, Editors) of
- {Mod, Ed} -> {existing, Ed};
- false -> {new, code_editor()}
- end,
- %% Insert code and update breakpoints, if any
- config_editor(Editor, [raise, clear]),
- show_code(Editor, Contents),
- lists:foreach(fun(BreakInfo) ->
- case BreakInfo#breakInfo.point of
- {Mod2, Line} when Mod2 =:= Mod ->
- Status = BreakInfo#breakInfo.status,
- add_break_to_code(Editor, Line,Status);
- _Point -> ignore
- end
- end,
- WinInfo#winInfo.breaks),
- case Flag of
- existing ->
- WinInfo#winInfo{editor={Mod, Editor}};
- new ->
- WinInfo#winInfo{editor={Mod, Editor},
- editors=[{Mod, Editor} | Editors]}
- end.
-
-show_code(Editor, Text) when length(Text) > 1500 ->
- %% Add some text at a time so that other processes may get scheduled
- Str = string:sub_string(Text, 1, 1500),
- config_editor(Editor, {insert,{'end', Str}}),
- show_code(Editor, string:sub_string(Text, 1501));
-show_code(Editor, Text) ->
- config_editor(Editor, {insert,{'end',Text}}).
-
-show_no_code(WinInfo) ->
- {'$top', Editor} = lists:keyfind('$top', 1, WinInfo#winInfo.editors),
- gs:config(Editor, raise),
- WinInfo#winInfo{editor={'$top', Editor}}.
-
-remove_code(WinInfo, Mod) ->
- Editors = WinInfo#winInfo.editors,
- case lists:keyfind(Mod, 1, Editors) of
- {Mod, Editor} ->
- gs:destroy(Editor),
- WinInfo#winInfo{editors=lists:keydelete(Mod, 1, Editors)};
- false ->
- WinInfo
- end.
-
-%%--------------------------------------------------------------------
-%% mark_line(WinInfo, Line, How) -> WinInfo
-%% WinInfo = #winInfo{}
-%% Line = integer()
-%% How = break | where
-%% Mark the code line where the process is executing.
-%%--------------------------------------------------------------------
-mark_line(WinInfo, Line, How) ->
- {_Mod, Editor} = WinInfo#winInfo.editor,
- mark_line2(Editor, WinInfo#winInfo.marked_line, false),
- mark_line2(Editor, Line, How),
- if
- Line =/= 0 -> config_editor(Editor, {vscrollpos, Line-5});
- true -> ignore
- end,
- WinInfo#winInfo{marked_line=Line}.
-
-unmark_line(WinInfo) ->
- mark_line(WinInfo, 0, false).
-
-mark_line2(Editor, Line, How) ->
- Prefix = case How of
- break -> "-->";
- where -> ">>>";
- false -> " "
- end,
- Font = if
- How =:= false -> dbg_ui_win:font(normal);
- true -> dbg_ui_win:font(bold)
- end,
- config_editor(Editor, [{overwrite, {{Line,5}, Prefix}},
- {font_style,
- {{{Line,0},{Line,lineend}}, Font}}]).
-
-%%--------------------------------------------------------------------
-%% select_line(WinInfo, Line) -> WinInfo
-%% selected_line(WinInfo) -> undefined | Line
-%% WinInfo = #winInfo{}
-%% Line = integer()
-%% Select/unselect a line (unselect if Line=0).
-%%--------------------------------------------------------------------
-select_line(WinInfo, Line) ->
- {_Mod, Editor} = WinInfo#winInfo.editor,
-
- %% Since 'Line' may be specified by the user in the 'Go To Line'
- %% help window, it must be checked that it is correct
- Size = gs:read(Editor, size),
- if
- Line =:= 0 ->
- select_line(Editor, WinInfo#winInfo.selected_line, false),
- WinInfo#winInfo{selected_line=0};
- Line < Size ->
- select_line(Editor, Line, true),
- config_editor(Editor, {vscrollpos, Line-5}),
- WinInfo#winInfo{selected_line=Line};
- true ->
- WinInfo
- end.
-
-select_line(Editor, Line, true) ->
- config_editor(Editor, {selection, {{Line,0}, {Line,lineend}}});
-select_line(Editor, _Line, false) ->
- config_editor(Editor, {selection, {{1,0}, {1,0}}}).
-
-selected_line(WinInfo) ->
- case WinInfo#winInfo.selected_line of
- 0 -> undefined;
- Line -> Line
- end.
-
-%%--------------------------------------------------------------------
-%% eval_output(Str, Face)
-%% Str = string()
-%% Face = normal | bold
-%%--------------------------------------------------------------------
-eval_output(Text, Face) ->
- Y1 = gs:read('EvalEditor', size),
- config_editor('EvalEditor', {insert,{'end',Text}}),
- Y2 = gs:read('EvalEditor', size),
-
- Font = dbg_ui_win:font(Face),
- config_editor('EvalEditor',
- [{font_style, {{{Y1,0},{Y2,lineend}}, Font}},
- {vscrollpos,Y2}]).
-
-%%--------------------------------------------------------------------
-%% update_bindings(Bs)
-%% Bs = [{Var,Val}]
-%%--------------------------------------------------------------------
-update_bindings(Bs) ->
- gs:config('BindGrid', {rows, {1,length(Bs)+1}}),
- Font = dbg_ui_win:font(normal),
- Last =
- lists:foldl(fun({Var, Val}, Row) ->
- Opts = [{text, {1,atom_to_list(Var)}},
- {text, {2,io_lib:format("~P",
- [Val, 4])}},
- {doubleclick, true},
- {data, {binding,{Var,Val}}}],
- case gs:read('BindGrid',{obj_at_row,Row}) of
- undefined ->
- gs:gridline('BindGrid',
- [{row, Row},
- {height, 14},
- {font, Font} | Opts]);
- GridLine ->
- gs:config(GridLine, Opts)
- end,
- Row+1
- end,
- 2,
- Bs),
- delete_gridlines(Last).
-
-delete_gridlines(Row) ->
- case gs:read('BindGrid', {obj_at_row, Row}) of
- undefined -> true;
- GridLine ->
- gs:destroy(GridLine),
- delete_gridlines(Row+1)
- end.
-
-%%--------------------------------------------------------------------
-%% trace_output(Str)
-%% Str = string()
-%%--------------------------------------------------------------------
-trace_output(Str) ->
- Font = dbg_ui_win:font(normal),
- config_editor('TraceEditor',
- [{insert, {'end',Str}},
- {fg, {{{1,0},'end'},black}},
- {font_style, {{{1,0},'end'},Font}}]),
- Max = gs:read('TraceEditor', size),
- config_editor('TraceEditor', {vscrollpos, Max}).
-
-%%--------------------------------------------------------------------
-%% handle_event(GSEvent, WinInfo) -> Command
-%% GSEvent = {gs, Id, Event, Data, Arg}
-%% WinInfo = #winInfo{}
-%% Command = ignore
-%% | {win, WinInfo}
-%% | stopped
-%% | {coords, {X,Y}}
-%%
-%% | {shortcut, Key}
-%% | MenuItem | {Menu, [MenuItem]}
-%% MenuItem = Menu = atom()
-%% | {break, Point, What}
-%% What = add | delete | {status,Status} |{trigger,Trigger}
-%% | {module, Mod, view}
-%%
-%% | {user_command, Cmd}
-%%
-%% | {edit, {Var, Val}}
-%%--------------------------------------------------------------------
-%% Window events
-handle_event({gs, _Id, configure, _Data, [W, H|_]}, WinInfo) ->
- case WinInfo#winInfo.size of
- {W, H} -> ignore;
- _Size ->
- configure(WinInfo, W, H),
- {win, WinInfo#winInfo{size={W, H}}}
- end;
-handle_event({gs, _Id, destroy, _Data, _Arg}, _WinInfo) ->
- stopped;
-handle_event({gs, _Id, motion, _Data, [X,Y]}, WinInfo) ->
- {LastX, LastY} = dbg_ui_win:motion(X, Y),
- Win = WinInfo#winInfo.window,
- {coords, {gs:read(Win, x)+LastX-5, gs:read(Win, y)+LastY-5}};
-handle_event({gs, RB, buttonpress, resizebar, _Arg}, WinInfo) ->
- resize(WinInfo, RB), % Resize window contents
- ignore;
-
-%% Menus, buttons and keyboard shortcuts
-handle_event({gs, _Id, keypress, _Data, [Key,_,_,1]}, _WinInfo) ->
- {shortcut, Key};
-handle_event({gs, _Id, click, {dbg_ui_winman, Win}, _Arg}, _WinInfo) ->
- dbg_ui_winman:raise(Win),
- ignore;
-handle_event({gs, _Id, click, {menuitem, Name}, _Arg}, _WinInfo) ->
- Name;
-handle_event({gs, _Id, click, {menu, Menu}, _Arg}, _WinInfo) ->
- Names = dbg_ui_win:selected(Menu),
- {Menu, Names};
-handle_event({gs, _Id, click, {break, Point, What}, _Arg}, _WinInfo) ->
- {break, Point, What};
-handle_event({gs, _Id, click, {module, Mod, view}, _Arg}, _WinInfo) ->
- {module, Mod, view};
-
-%% Code area
-handle_event({gs, Editor, buttonpress, code_editor, _Arg}, WinInfo) ->
- {Row, _Col} = gs:read(Editor, insertpos),
- Again = receive
- {gs, Editor, buttonpress, code_editor, _} ->
- gs:read(Editor, insertpos)
- after 500 ->
- false
- end,
- case Again of
- {Row, _} ->
- {Mod, _Editor} = WinInfo#winInfo.editor,
- Point = {Mod, Row},
- case lists:keymember(Point, #breakInfo.point,
- WinInfo#winInfo.breaks) of
- false -> {break, Point, add};
- true -> {break, Point, delete}
- end;
- {Row2, _} ->
- select_line(Editor, Row2, true),
- {win, WinInfo#winInfo{selected_line=Row2}};
- false ->
- select_line(Editor, Row, true),
- {win, WinInfo#winInfo{selected_line=Row}}
- end;
-
-%% Button area
-handle_event({gs, _Id, click, {button, Name}, _Arg}, _WinInfo) ->
- Name;
-
-%% Evaluator area
-handle_event({gs, 'EvalEntry', keypress, _Data, ['Return'|_]}, _WI) ->
- Command = case gs:read('EvalEntry', text) of
- [10] ->
- eval_output("\n", normal),
- ignore;
- Cmd ->
- eval_output([$>, Cmd, 10], normal),
- {user_command, Cmd}
- end,
- gs:config('EvalEntry', [{text,""}, {focus,false}]),
- Command;
-
-%% Bindings area
-handle_event({gs, _Id, click, {binding, {Var, Val}}, _Arg}, _WinInfo) ->
- Str = io_lib:format("< ~p = ~p~n", [Var, Val]),
- eval_output(Str, bold),
- ignore;
-handle_event({gs, _Id, doubleclick, {binding, B}, _Arg}, _WinInfo) ->
- {edit, B};
-
-handle_event(_GSEvent, _WinInfo) ->
- ignore.
-
-
-%%====================================================================
-%% Internal functions
-%%====================================================================
-
-%%--Code Area---------------------------------------------------------
-
-code_area(X, Y, FrameOpts, Win) ->
- gs:frame('CodeArea', Win,
- [{x,X}, {y,Y}, {width,546}, {height,400} | FrameOpts]),
- gs:label(info_window, 'CodeArea',
- [{label,{text,""}}, {font,dbg_ui_win:font(normal)},
- {x,5}, {y,10}, {width,406}, {height,15},
- {anchor,nw}, {align,w}]),
- code_editor('CodeEditor', 536, 365).
-
-code_editor() ->
- W = gs:read('CodeEditor', width),
- H = gs:read('CodeEditor', height),
- code_editor(null, W, H).
-
-code_editor(Name, W, H) ->
- Editor = if
- Name =:= null -> gs:editor('CodeArea', []);
- true -> gs:editor(Name, 'CodeArea', [])
- end,
- gs:config(Editor, [{x,5}, {y,30}, {width,W}, {height,H},
- {keypress,false}, {buttonpress,true},
- {data,code_editor}]),
- config_editor(Editor, [{vscroll,right}, {hscroll,bottom}]),
- Font = dbg_ui_win:font(normal),
- config_editor(Editor, [{wrap,none}, {fg,{{{1,0},'end'},black}},
- {font, Font},
- {font_style, {{{1,0},'end'},Font}}]),
- Editor.
-
-resize_code_area(WinInfo, Key, Diff) ->
- gs:config('CodeArea', {Key,gs:read('CodeArea', Key)+Diff}),
- case Key of
- width ->
- gs:config(info_window, {Key,gs:read(info_window,Key)+Diff});
- height -> ignore
- end,
-
- %% Resize all code editors
- Value = gs:read('CodeEditor', Key)+Diff,
- gs:config('CodeEditor', {Key,Value}),
- Editors = WinInfo#winInfo.editors,
- lists:foreach(fun({_Mod, Editor}) ->
- gs:config(Editor, {Key,Value})
- end,
- Editors).
-
-%%--Button Area-------------------------------------------------------
-
-buttons() ->
- [{'Step','StepButton'}, {'Next','NextButton'},
- {'Continue','ContinueButton'}, {'Finish','FinishButton'},
- {'Where','WhereButton'}, {'Up','UpButton'}, {'Down','DownButton'}].
-
-is_button(Name) ->
- case lists:keyfind(Name, 1, buttons()) of
- {Name, Button} -> {true, Button};
- false -> false
- end.
-
-button_area(Bu, X, Y, FrameOpts, Win) ->
- {W,H} = case Bu of
- open -> {546,30};
- close -> {0,0}
- end,
- gs:frame('ButtonArea', Win,
- [{x,X}, {y,Y}, {width,W}, {height,H} | FrameOpts]),
- Font = dbg_ui_win:font(normal),
- lists:foldl(fun({Name, Button}, Xb) ->
- gs:button(Button, 'ButtonArea',
- [{label, {text,Name}}, {font,Font},
- {x, Xb}, {y, 1},
- {width, 77}, {height, 24},
- {data, {button,Name}}]),
- Xb+78
- end,
- 1,
- buttons()).
-
-resize_button_area(close, width, _Diff) ->
- ignore;
-resize_button_area(open, width, Diff) ->
- gs:config('ButtonArea', {width, gs:read('ButtonArea', width)+Diff}).
-
-%%--Evaluator Area----------------------------------------------------
-
-eval_area({Ev,Bi}, X, Y, FrameOpts, Win) ->
- {W,H} = if
- Ev =:= open -> {289,200};
- true -> {0,0}
- end,
- Font = dbg_ui_win:font(normal),
- gs:frame('EvalArea', Win,
- [{x,X}, {y,Y}, {width,W}, {height,H} | FrameOpts]),
- gs:label('EvalArea',
- [{label,{text,"Evaluator:"}}, {font, Font},
- {x,5}, {y,35}, {width,80}, {height,25},
- {anchor,sw}, {align,center}]),
- gs:entry('EvalEntry', 'EvalArea',
- [{font, Font},
- {x,80}, {y,35}, {width,185}, {height,25},
- {anchor,sw}, {keypress,true}]),
- gs:editor('EvalEditor', 'EvalArea',
- [{x,5}, {y,35}, {width, 280}, {height, 160},
- {keypress,false},
- {vscroll,right}, {hscroll,bottom},
- {wrap,none}, {fg,{{{1,0},'end'},black}},
- {font, Font},
- {font_style,{{{1,0},'end'},Font}}]),
- gs:config('EvalEditor', {enable, false}),
- if
- Ev =:= open, Bi =:= close -> resize_eval_area(Ev, width, 257);
- true -> ignore
- end.
-
-resize_eval_area(close, _Key, _Diff) ->
- ignore;
-resize_eval_area(open, Key, Diff) ->
- New = gs:read('EvalArea', Key)+Diff,
- gs:config('EvalArea', {Key,New}),
- case Key of
- width ->
- gs:config('EvalEntry', {width,New-104}),
- gs:config('EvalEditor', {width,New-9});
- height ->
- gs:config('EvalEditor', {height,New-40})
- end.
-
-%%--Bindings Area-----------------------------------------------------
-
-bind_area({Ev,Bi}, X, Y, FrameOpts, Win) ->
- {W,H} = if
- Bi =:= open -> {249,200};
- true -> {0,0}
- end,
- gs:frame('BindArea', Win,
- [{x,X}, {y,Y}, {width,W}, {height,H} | FrameOpts]),
-
- Font = dbg_ui_win:font(bold),
- gs:grid('BindGrid', 'BindArea',
- [{x,2}, {y,2}, {height,193}, {width,241},
- {fg,black}, {vscroll,right}, {hscroll,bottom},
- {font,Font},
- calc_columnwidths(241), {rows, {1,50}}]),
- gs:gridline('BindGrid',
- [{row,1}, {height,14}, {fg,blue},
- {text,{1,"Name"}}, {text,{2,"Value"}}, {font,Font}]),
- gs:config('BindGrid', {rows,{1,1}}),
- if
- Bi =:= open, Ev =:= close -> resize_bind_area(Bi, width, 297);
- true -> ignore
- end.
-
-resize_bind_area(close, _Key, _Diff) ->
- ignore;
-resize_bind_area(open, Key, Diff) ->
- New = gs:read('BindArea', Key)+Diff,
- gs:config('BindArea', {Key,New}),
- case Key of
- width ->
- gs:config('BindGrid', {width,New-8}),
- Cols = calc_columnwidths(New-8),
- gs:config('BindGrid', Cols);
- height ->
- gs:config('BindGrid', {height,New-7})
- end.
-
-calc_columnwidths(Width) ->
- if Width =< 291 ->
- {columnwidths,[90,198]};
- true ->
- S = (Width)/(90+198),
- {columnwidths,[round(90*S),round(198*S)]}
- end.
-
-%%--Trace Area--------------------------------------------------------
-
-trace_area(Tr, X, Y, FrameOpts, Win) ->
- {W,H} = case Tr of
- open -> {546,200};
- close -> {0,0}
- end,
- gs:frame('TraceArea', Win,
- [{x,X}, {y,Y}, {width,W}, {height,H} | FrameOpts]),
- Editor = gs:editor('TraceEditor', 'TraceArea',
- [{x,5}, {y,5}, {width,536}, {height,190},
- {keypress,false}]),
- Font = dbg_ui_win:font(normal),
- config_editor(Editor,
- [{vscroll,right}, {hscroll,bottom},
- {wrap,none},{fg,{{{1,0},'end'},black}},
- {font, Font},
- {font_style,{{{1,0},'end'},Font}}]).
-
-resize_trace_area(close, _Key, _Diff) ->
- ignore;
-resize_trace_area(open, Key, Diff) ->
- New = gs:read('TraceArea', Key)+Diff,
- gs:config('TraceArea', {Key,New}),
- gs:config('TraceEditor', {Key,New-10}).
-
-%%--Editors-----------------------------------------------------------
-
-config_editor(Editor, Opts) ->
- gs:config(Editor, {enable,true}),
- gs:config(Editor, Opts),
- gs:config(Editor, {enable,false}).
-
-%%--Resize Bars-------------------------------------------------------
-%% The resize bars are used to resize the areas within the window.
-
-%%--------------------------------------------------------------------
-%% resizebar(Flag, Name, X, Y, W, H, Obj) -> resizebar()
-%% Flag = open | close
-%% Name = atom()
-%% X = Y = integer() Coordinates relative to Obj
-%% W = H = integer() Width and height
-%% Obj = gsobj()
-%% Creates a 'resize bar', a frame object over which the cursor will
-%% be of the 'resize' type.
-%%--------------------------------------------------------------------
-resizebar(Flag, Name, X, Y, W, H, Obj) ->
- {W2,H2} = case Flag of
- open -> {W,H};
- close -> {0,0}
- end,
- gs:create(frame, Name, Obj, [{x,X}, {y,Y}, {width,W2}, {height,H2},
- {bw,2},
- {cursor,resize},
- {buttonpress,true}, {buttonrelease,true},
- {data,resizebar}]).
-
-rb1({_Bu,Ev,Bi,Tr}) ->
- if
- Ev =:= close, Bi =:= close, Tr =:= close -> close;
- true -> open
- end.
-
-rb2({_Bu,Ev,Bi,Tr}) ->
- if
- Tr =:= open ->
- if
- Ev =:= close, Bi =:= close -> close;
- true -> open
- end;
- true -> close
- end.
-
-rb3({_Bu,Ev,Bi,_Tr}) ->
- if
- Ev =:= open, Bi =:= open -> open;
- true -> close
- end.
-
-%%--Configuration-----------------------------------------------------
-%% Resize the window as well as its contents
-
-%%--------------------------------------------------------------------
-%% config_v()
-%% Reconfigure the window vertically.
-%%--------------------------------------------------------------------
-config_v() ->
- Y1 = 25+gs:read('CodeArea', height),
- gs:config('RB1', {y,Y1}),
-
- Y2 = Y1+gs:read('RB1', height),
- gs:config('ButtonArea', {y,Y2}),
-
- Y3 = Y2+gs:read('ButtonArea', height),
- gs:config('EvalArea', {y,Y3}),
- gs:config('RB3', {y,Y3}),
- gs:config('BindArea', {y,Y3}),
-
- Y4 = Y3 + erlang:max(gs:read('EvalArea', height),
- gs:read('BindArea', height)),
- gs:config('RB2', {y,Y4}),
-
- Y5 = Y4 + gs:read('RB2', height),
- gs:config('TraceArea', {y,Y5}).
-
-%%--------------------------------------------------------------------
-%% config_h()
-%% Reconfigure the window horizontally.
-%%--------------------------------------------------------------------
-config_h() ->
- X1 = 2+gs:read('EvalArea', width),
- gs:config('RB3', {x,X1}),
-
- X2 = X1+gs:read('RB3', width),
- gs:config('BindArea', {x,X2}).
-
-%%--------------------------------------------------------------------
-%% configure(WinInfo, W, H)
-%% The window has been resized, now its contents must be resized too.
-%%--------------------------------------------------------------------
-configure(WinInfo, NewW, NewH) ->
- {Bu,Ev,Bi,Tr} = Flags = WinInfo#winInfo.flags,
-
- OldW = gs:read('CodeArea', width)+4,
- OldH = 25+gs:read('CodeArea', height)+
- gs:read('RB1', height)+
- gs:read('ButtonArea', height)+
- erlang:max(gs:read('EvalArea', height), gs:read('BindArea', height))+
- gs:read('RB2', height)+
- gs:read('TraceArea', height),
-
- %% Adjust width unless it is unchanged or less than minimum width
- if
- OldW =/= NewW ->
- {Dcode,Deval,Dbind} = configure_widths(OldW,NewW,Flags),
- resize_code_area(WinInfo, width, Dcode),
- case rb1(Flags) of
- open ->
- gs:config('RB1', {width,gs:read('RB1',width)+Dcode});
- close -> ignore
- end,
- resize_button_area(Bu, width, Dcode),
- resize_eval_area(Ev, width, Deval),
- resize_bind_area(Bi, width, Dbind),
- case rb2(Flags) of
- open ->
- gs:config('RB2', {width,gs:read('RB2',width)+Dcode});
- close -> ignore
- end,
- resize_trace_area(Tr, width, Dcode),
- config_h();
- true -> ignore
- end,
-
- %% Adjust height unless it is unchanged or less than minimum height
- if
- OldH =/= NewH ->
- {Dcode2,Deval2,Dtrace} = configure_heights(OldH,NewH,Flags),
- resize_code_area(WinInfo, height, Dcode2),
- resize_eval_area(Ev, height, Deval2),
- case rb3(Flags) of
- open ->
- gs:config('RB3',
- {height,gs:read('RB3',height)+Deval2});
- close -> ignore
- end,
- resize_bind_area(Bi, height, Deval2),
- resize_trace_area(Tr, height, Dtrace),
- config_v();
- true -> ignore
- end.
-
-%% Compute how much the width of each frame must be increased or
-%% decreased in order to adjust to the new window width.
-configure_widths(OldW, NewW, Flags) ->
- {_Bu,Ev,Bi,_Tr} = Flags,
-
- %% Difference between old and new width, considering min window width
- Diff = abs(erlang:max(OldW,330)-erlang:max(NewW,330)),
-
- %% Check how much the frames can be resized in reality
- Limits = if
- %% Window larger
- NewW > OldW ->
- if
- Ev =:= open, Bi =:= open -> {0,Diff,Diff};
- Ev =:= open -> {0,Diff,0};
- Bi =:= open -> {0,0,Diff};
- true -> {Diff,0,0}
- end;
-
- %% Window smaller; get difference between min size
- %% and current size
- OldW>NewW ->
- if
- Ev =:= open, Bi =:= open ->
- {0,
- gs:read('EvalArea',width)-204,
- gs:read('BindArea',width)-112};
- Ev =:= open -> {0,Diff,0};
- Bi =:= open -> {0,0,Diff};
- true -> {Diff,0,0}
- end
- end,
-
- case Limits of
-
- %% No Shell or Bind frame, larger window
- {T,0,0} when NewW > OldW -> {T,0,0};
-
- %% No Shell or Bind frame, smaller window
- {T,0,0} when OldW > NewW -> {-T,0,0};
-
- %% Window larger; divide Diff among the frames and return result
- {_,Sf,B} when NewW > OldW ->
- {_,Sf2,B2} = divide([{0,0},{0,Sf},{0,B}],Diff),
- {Sf2+B2,Sf2,B2};
-
- %% Window smaller; divide Diff among the frames and return
- %% the inverted result (the frames should shrink)
- {_,Sf,B} when OldW>NewW ->
- {_,Sf2,B2} = divide([{0,0},{0,Sf},{0,B}],Diff),
- {-(Sf2+B2),-Sf2,-B2}
- end.
-
-%% Compute how much the height of each frame must be increased or
-%% decreased in order to adjust to the new window height.
-configure_heights(OldH, NewH, Flags) ->
- {_Bu,Ev,Bi,Tr} = Flags,
-
- %% Difference between old and new height, considering min win height
- MinH = min_height(Flags),
- Diff = abs(erlang:max(OldH,MinH)-erlang:max(NewH,MinH)),
-
- %% Check how much the frames can be resized in reality
- {T,Sf,Ff} = if
- %% Window larger
- NewH > OldH ->
- {Diff,
- if
- Ev =:= close, Bi =:= close -> 0;
- true -> Diff
- end,
- if
- Tr =:= open -> Diff;
- true -> 0
- end};
-
- %% Window smaller; get difference between min size
- %% and current size
- OldH > NewH ->
- {gs:read('CodeArea',height)-100,
- if
- Ev =:= close, Bi =:= close -> 0;
- true ->
- if
- Ev =:= open ->
- gs:read('EvalArea',height)-100;
- Bi =:= open ->
- gs:read('BindArea',height)-100
- end
- end,
- if
- Tr =:= open -> gs:read('TraceArea',height)-100;
- true -> 0
- end}
- end,
-
- if
- %% Window larger; divide Diff among the frames and return result
- NewH>OldH -> divide([{0,T},{0,Sf},{0,Ff}],Diff);
-
- %% Window smaller; divide Diff among the frames and return
- %% the inverted result (the frames should shrink)
- OldH>NewH ->
- {T2,Sf2,Ff2} = divide([{0,T},{0,Sf},{0,Ff}],Diff),
- {-T2,-Sf2,-Ff2}
- end.
-
-%% Compute minimum window height
-min_height(Flags) ->
- {Bu,S,Bi,F} = Flags,
- H1 = 25 + 100 + 2, % Upper pad + Trace frame + lower pad
- H2 = H1 + bu(Bu) + s_bi(S,Bi) + f(F),
- H3 = case rb1(Flags) of
- open -> H2+10;
- close -> H2
- end,
- H4 = case rb2(Flags) of
- open -> H3+10;
- close -> H3
- end,
- H4.
-
-bu(close) -> 0;
-bu(open) -> 30.
-
-s_bi(close,close) -> 0;
-s_bi(_,_) -> 100.
-
-f(close) -> 0;
-f(open) -> 100.
-
-%% Try to distribute Diff as evenly as possible between E1, E2 and E3.
-divide([{T,T},{S,S},{F,F}], _Diff) ->
- {T,S,F};
-divide(L, Diff) ->
- [{T,Tmax},{S,Smax},{F,Fmax}] = L,
-
- %% Count how many elements in L can still be filled
- Rem = remaining(L),
-
- %% Divide Diff by Rem
- D = Diff div Rem,
-
- if
- %% All of Diff has been distributed
- D =:= 0 -> {T,S,F};
- true ->
- %% For each element, try to add as much as possible of D
- {NewT,Dt} = divide2(D,T,Tmax),
- {NewS,Ds} = divide2(D,S,Smax),
- {NewF,Df} = divide2(D,F,Fmax),
-
- %% Recur with a list of elements with new current values
- %% and decreased Diff
- divide([{NewT,Tmax},{NewS,Smax},{NewF,Fmax}],
- (Diff rem Rem)+Dt+Ds+Df)
- end.
-
-%% Count the number of 'non-filled' elements in L, ie where Curr<Max.
-remaining([]) -> 0;
-remaining([{Max,Max}|T]) -> remaining(T);
-remaining([_H|T]) -> 1 + remaining(T).
-
-divide2(_Diff, Max, Max) -> {Max,0};
-divide2(Diff, Curr, Max) ->
- New = Curr+Diff,
- if
- New>Max -> {Max,New-Max};
- true -> {New,0}
- end.
-
-%%--Resizing using resize bars----------------------------------------
-%% Motions event will move the ResizeBar accordingly in Win, when
-%% the mouse button is released, the window is reconfigured.
-
-resize(WinInfo, ResizeBar) ->
-
- %% Get window dimensions
- W = gs:read(WinInfo#winInfo.window, width),
- H = gs:read(WinInfo#winInfo.window, height),
-
- %% Call resize loop with min and max for the resize bars derived
- %% from the window dimensions
- resizeloop(WinInfo, ResizeBar, null,
- rblimits('RB1',W,H),
- rblimits('RB2',W,H),
- rblimits('RB3',W,H)).
-
-resizeloop(WI, RB, Prev, {Min1,Max1}, {Min2,Max2}, {Min3,Max3}) ->
- receive
- {gs,_,motion,_,[_,Y]} when RB =:= 'RB1', Y > Min1, Y < Max1 ->
- gs:config('RB1', {y,Y}),
- resizeloop(WI, RB, Y, {Min1,Max1}, {Min2,Max2}, {Min3,Max3});
- {gs,_,motion,_,_} when RB =:= 'RB1' ->
- resizeloop(WI, RB, Prev, {Min1,Max1}, {Min2,Max2}, {Min3,Max3});
-
- {gs,_,motion,_,[_,Y]} when RB =:= 'RB2', Y > Min2, Y < Max2 ->
- gs:config('RB2', {y,Y}),
- resizeloop(WI, RB, Y, {Min1,Max1}, {Min2,Max2}, {Min3,Max3});
- {gs,_,motion,_,_} when RB =:= 'RB2' ->
- resizeloop(WI, RB, Prev, {Min1,Max1}, {Min2,Max2}, {Min3,Max3});
-
- {gs,_,motion,_,[X,_]} when RB =:= 'RB3', X > Min3, X < Max3 ->
- gs:config('RB3', {x,X}),
- resizeloop(WI, RB, X, {Min1,Max1}, {Min2,Max2}, {Min3,Max3});
- {gs,_,motion,_,_} when RB =:= 'RB3' ->
- resizeloop(WI, RB, Prev, {Min1,Max1}, {Min2,Max2}, {Min3,Max3});
-
- {gs,_,buttonrelease,_,_} ->
- resize_win(WI, RB, Prev)
- end.
-
-resize_win(_WinInfo, _RB, null) -> ignore;
-resize_win(WinInfo, 'RB1', Y) ->
- {_Bu,S,Bi,F} = Flags = WinInfo#winInfo.flags,
- H = gs:read('CodeArea', height),
- Diff = H-(Y-25),
-
- %% Resize Code, Evaluator and Binding areas
- resize_code_area(WinInfo, height, -Diff),
- if
- S =:= close, Bi =:= close, F =:= open ->
- resize_trace_area(open, height, Diff);
- true ->
- resize_eval_area(S, height, Diff),
- resize_bind_area(Bi, height, Diff)
- end,
-
- %% Resize vertical resize bar
- case rb3(Flags) of
- open -> gs:config('RB3', {height,gs:read('RB3',height)+Diff});
- close -> ignore
- end,
-
- %% Adjust the frames y coordinates
- config_v();
-resize_win(WinInfo, 'RB2', Y) ->
- {_Bu,S,Bi,F} = Flags = WinInfo#winInfo.flags,
- Prev = gs:read('TraceArea',y),
- Diff = Prev-(Y+10),
-
- %% Resize Trace, Evaluator and Binding areas
- resize_trace_area(F, height, Diff),
- resize_eval_area(S, height, -Diff),
- resize_bind_area(Bi, height, -Diff),
-
- %% Resize vertical resize bar
- case rb3(Flags) of
- open -> gs:config('RB3', {height,gs:read('RB3',height)-Diff});
- close -> ignore
- end,
-
- %% Adjust the frames y coordinates
- config_v();
-
-resize_win(WinInfo, 'RB3', X) ->
- {_Bu,S,Bi,_F} = WinInfo#winInfo.flags,
- Prev = gs:read('BindArea', x),
- Diff = Prev-(X+10),
-
- %% Resize Binding and Trace areas
- resize_bind_area(Bi, width, Diff),
- resize_eval_area(S, width, -Diff),
-
- %% Adjust the frames x coordinates
- config_h().
-
-%% Given the window dimensions, return the limits for a resize bar.
-rblimits('RB1',_W,H) ->
-
- %% Code frame should not have height <100
- Min = 126,
-
- %% Max is decided by a minimum distance to 'RB2'
- %% unless 'RB2' is invisible and 'CodeArea' is visible
- %% (=> EvalFrame and BindFrame invisible) in which case
- %% TraceFrame should not have height <100
- RB2 = gs:read('RB2',height),
- FF = gs:read('TraceArea',height),
- Max = case RB2 of
- 0 when FF =/= 0 ->
- H-112;
- _ ->
- Y = gs:read('RB2',y),
- erlang:max(Min,Y-140)
- end,
-
- {Min,Max};
-rblimits('RB2',_W,H) ->
- %% TraceFrame should not have height < 100
- Max = H-112,
- %% Min is decided by a minimum distance to 'RB1'
- Y = gs:read('RB1',y),
- Min = erlang:min(Max,Y+140),
- {Min,Max};
-
-rblimits('RB3',W,_H) ->
- %% Neither CodeArea nor BindArea should occupy
- %% less than 1/3 of the total window width and EvalFrame should
- %% be at least 289 pixels wide
- {erlang:max(round(W/3),289),round(2*W/3)}.
-
-
-%%====================================================================
-%% 'Go To Line' and 'Search' help windows
-%%====================================================================
-
-helpwin(gotoline, WinInfo, GS, Coords) ->
- spawn_link(?MODULE, helpwin, [gotoline, WinInfo, GS, Coords,self()]);
-helpwin(search, WinInfo, GS, Coords) ->
- spawn_link(?MODULE, helpwin, [search, WinInfo, GS, Coords, self()]).
-
-helpwin(Type, WinInfo, GS, Coords, AttPid) ->
- {_Mod, Editor} = WinInfo#winInfo.editor,
- Data = case Type of
- gotoline -> null;
- search ->
- {{1, 0}, false}
- end,
- Win = helpwin(Type, GS, Coords),
- helpwin_loop(Type, AttPid, Editor, Data, Win).
-
-helpwin_loop(Type, AttPid, Editor, Data, Win) ->
- receive
- {gs, _Id, destroy, _Data, _Arg} ->
- helpwin_stop(Type, AttPid, Editor, Data),
- true;
-
- {gs, _Id, keypress, _Data, ['Return'|_]} ->
- gs:config(btn(Win), flash),
- Data2 = helpwin_action(Type, default,
- AttPid, Editor, Data, Win),
- helpwin_loop(Type, AttPid, Editor, Data2, Win);
- {gs, _Id, keypress, _Data, _Arg} ->
- helpwin_loop(Type, AttPid, Editor, Data, Win);
-
- {gs, _Id, click, _Data, ["Clear"]} ->
- gs:config(ent(Win), {delete, {0,last}}),
- Data2 = helpwin_clear(Type, AttPid, Editor, Data, Win),
- helpwin_loop(Type, AttPid, Editor, Data2, Win);
- {gs, _Id, click, _Data, ["Close"]} ->
- helpwin_stop(Type, AttPid, Editor, Data),
- true;
- {gs, _Id, click, Action, _Arg} ->
- Data2 =
- helpwin_action(Type, Action, AttPid, Editor, Data, Win),
- helpwin_loop(Type, AttPid, Editor, Data2, Win)
- end.
-
-helpwin_stop(gotoline, _AttPid, _Editor, _Data) ->
- ignore;
-helpwin_stop(search, _AttPid, Editor, {Pos, _CS}) ->
- unmark_string(Editor, Pos).
-
-helpwin_clear(gotoline, _AttPid, _Editor, Data, _Win) ->
- Data;
-helpwin_clear(search, _AttPid, Editor, {Pos, CS}, Win) ->
- unmark_string(Editor, Pos),
- gs:config(lbl(Win), {label, {text,""}}),
- {{1, 0}, CS}.
-
-helpwin_action(gotoline, default, AttPid, _Editor, Data, Win) ->
- case string:strip(gs:read(ent(Win), text)) of
- "" -> ignore;
- Str ->
- case catch list_to_integer(Str) of
- {'EXIT', _Reason} -> ignore;
- Line -> AttPid ! {gui, {gotoline, Line}}
- end
- end,
- Data;
-helpwin_action(search, case_sensitive, _AttPid, _Ed, {Pos, CS}, _Win) ->
- Bool = if CS =:= true -> false; CS =:= false -> true end,
- {Pos, Bool};
-helpwin_action(search, default, _AttPid, Editor, {Pos, CS}, Win) ->
- gs:config(lbl(Win), {label, {text, ""}}),
- unmark_string(Editor, Pos),
- case gs:read(ent(Win), text) of
- "" -> {Pos, CS};
- Str ->
- gs:config(lbl(Win), {label, {text,"Searching..."}}),
- Str2 = lowercase(CS, Str),
- case search(Str2, Editor, gs:read(Editor, size), Pos, CS) of
- {Row, Col} ->
- gs:config(lbl(Win), {label, {text,""}}),
- mark_string(Editor, {Row, Col}, Str),
- {{Row, Col}, CS};
- not_found ->
- gs:config(lbl(Win), {label, {text,"Not found"}}),
- {Pos, CS}
- end
- end.
-
-search(_Str, _Editor, Max, {Row, _Col}, _CS) when Row>Max ->
- not_found;
-search(Str, Editor, Max, {Row, Col}, CS) ->
- SearchIn = lowercase(CS, gs:read(Editor,
- {get,{{Row,Col+1},{Row,lineend}}})),
- case string:str(SearchIn, Str) of
- 0 -> search(Str, Editor, Max, {Row+1, 0}, CS);
- N -> {Row, Col+N}
- end.
-
-lowercase(true, Str) -> Str;
-lowercase(false, Str) ->
- [if Char >= $A, Char =< $Z -> Char+32;
- true -> Char
- end || Char <- Str].
-
-mark_string(Editor, {Row, Col}, Str) ->
- Between = {{Row,Col}, {Row,Col+length(Str)}},
- Font = dbg_ui_win:font(bold),
- gs:config(Editor, [{vscrollpos, Row-5},
- {font_style, {Between, Font}},
- {fg, {Between, red}}]).
-
-unmark_string(Editor, {Row, Col}) ->
- Between = {{Row,Col}, {Row,lineend}},
- Font = dbg_ui_win:font(normal),
- gs:config(Editor, [{vscrollpos, Row-5},
- {font_style, {Between, Font}},
- {fg, {Between, black}}]).
-
-helpwin(Type, GS, {X, Y}) ->
- W = 200, Pad = 10, Wbtn = 50,
-
- Title = case Type of search -> "Search"; gotoline -> "Go To Line" end,
- Win = gs:window(GS, [{title, Title}, {x, X}, {y, Y}, {width, W},
- {destroy, true}]),
-
- Ent = gs:entry(Win, [{x, Pad}, {y, Pad}, {width, W-2*Pad},
- {keypress, true}]),
- Hent = gs:read(Ent, height),
-
- Font = dbg_ui_win:font(normal),
-
- {Ybtn, Lbl} =
- case Type of
- search ->
- Ycb = Pad+Hent,
- gs:checkbutton(Win, [{label, {text, "Case Sensitive"}},
- {font, Font},
- {align, w},
- {x, Pad}, {y, Ycb},
- {width, W-2*Pad}, {height, 15},
- {data, case_sensitive}]),
- Ylbl = Ycb+15,
- {Ylbl+Hent+Pad,
- gs:label(Win, [{x, Pad}, {y, Ylbl},
- {width, W-2*Pad}, {height, Hent}])};
- gotoline -> {Pad+Hent+Pad, null}
- end,
-
- BtnLbl = case Type of search -> "Search"; gotoline -> "Go" end,
- Btn = gs:button(Win, [{label, {text, BtnLbl}}, {font, Font},
- {x, W/2-3/2*Wbtn-Pad}, {y, Ybtn},
- {width, Wbtn}, {height, Hent},
- {data, default}]),
- gs:button(Win, [{label, {text, "Clear"}}, {font, Font},
- {x, W/2-1/2*Wbtn}, {y, Ybtn},
- {width, Wbtn}, {height, Hent}]),
- gs:button(Win, [{label, {text, "Close"}}, {font, Font},
- {x, W/2+1/2*Wbtn+Pad}, {y, Ybtn},
- {width, Wbtn}, {height, Hent}]),
-
- H = Ybtn+Hent+Pad,
- gs:config(Win, [{height, H}, {map, true}]),
- {Ent, Lbl, Btn}.
-
-ent(Win) -> element(1, Win).
-lbl(Win) -> element(2, Win).
-btn(Win) -> element(3, Win).
diff --git a/lib/debugger/src/dbg_ui_view.erl b/lib/debugger/src/dbg_ui_view.erl
deleted file mode 100644
index be998f22ff..0000000000
--- a/lib/debugger/src/dbg_ui_view.erl
+++ /dev/null
@@ -1,255 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2011. 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(dbg_ui_view).
-
-%% External exports
--export([start/2]).
-
--record(state, {gs, % term() Graphics system id
- win, % term() Attach process window data
- coords, % {X,Y} Mouse point position
- mod % atom() Module
- }).
-
-%%====================================================================
-%% External exports
-%%====================================================================
-
-%%--------------------------------------------------------------------
-%% start(GS, Mod)
-%% Mod = atom()
-%%--------------------------------------------------------------------
-start(GS, Mod) ->
- Title = "View Module " ++ atom_to_list(Mod),
- case dbg_ui_winman:is_started(Title) of
- true -> ignore;
- false -> spawn(fun () -> init(GS, Mod, Title) end)
- end.
-
--spec stop() -> no_return().
-stop() ->
- exit(stop).
-
-%%====================================================================
-%% Main loop and message handling
-%%====================================================================
-
-init(GS, Mod, Title) ->
- %% Subscribe to messages from the interpreter
- int:subscribe(),
-
- %% Create attach process window
- Win1 = dbg_ui_trace_win:create_win(GS, Title, ['Code Area'], menus()),
- Window = dbg_ui_trace_win:get_window(Win1),
- dbg_ui_winman:insert(Title, Window),
-
- Win2 = gui_load_module(Win1, Mod),
- Win3 =
- lists:foldl(fun(Break, Win) ->
- dbg_ui_trace_win:add_break(Win, 'Break', Break)
- end,
- Win2,
- int:all_breaks(Mod)),
-
- loop(#state{gs=GS, win=Win3, coords={0,0}, mod=Mod}).
-
-loop(State) ->
- receive
-
- %% From the GUI main window
- GuiEvent when is_tuple(GuiEvent), element(1, GuiEvent)==gs ->
- Cmd = dbg_ui_trace_win:handle_event(GuiEvent, State#state.win),
- State2 = gui_cmd(Cmd, State),
- loop(State2);
-
- %% From the GUI help windows
- {gui, Cmd} ->
- State2 = gui_cmd(Cmd, State),
- loop(State2);
-
- %% From the interpreter
- {int, Cmd} ->
- State2 = int_cmd(Cmd, State),
- loop(State2);
-
- %% From the dbg_ui_winman process (Debugger window manager)
- {dbg_ui_winman, update_windows_menu, Data} ->
- dbg_ui_winman:update_windows_menu(Data),
- loop(State);
- {dbg_ui_winman, destroy} ->
- stop();
-
- %% Help window termination -- ignore
- {'EXIT', _Pid, _Reason} ->
- loop(State)
- end.
-
-%%--Commands from the GUI---------------------------------------------
-
-gui_cmd(ignore, State) ->
- State;
-gui_cmd({win, Win}, State) ->
- State#state{win=Win};
-gui_cmd(stopped, _State) ->
- stop();
-gui_cmd({coords, Coords}, State) ->
- State#state{coords=Coords};
-
-gui_cmd({shortcut, Key}, State) ->
- case shortcut(Key) of
- false -> State;
- Cmd -> gui_cmd(Cmd, State)
- end;
-
-%% File menu
-gui_cmd('Close', _State) ->
- stop();
-
-%% Edit menu
-gui_cmd('Go To Line...', State) ->
- %% Will result in message handled below: {gui, {gotoline, Line}}
- dbg_ui_trace_win:helpwin(gotoline, State#state.win,
- State#state.gs, State#state.coords),
- State;
-gui_cmd({gotoline, Line}, State) ->
- Win = dbg_ui_trace_win:select_line(State#state.win, Line),
- State#state{win=Win};
-gui_cmd('Search...', State) ->
- dbg_ui_trace_win:helpwin(search, State#state.win,
- State#state.gs, State#state.coords),
- State;
-
-%% Break menu
-gui_cmd('Line Break...', State) ->
- add_break(State#state.gs, State#state.coords, line,
- State#state.mod,
- dbg_ui_trace_win:selected_line(State#state.win)),
- State;
-gui_cmd('Conditional Break...', State) ->
- add_break(State#state.gs, State#state.coords, conditional,
- State#state.mod,
- dbg_ui_trace_win:selected_line(State#state.win)),
- State;
-gui_cmd('Function Break...', State) ->
- add_break(State#state.gs, State#state.coords, function,
- State#state.mod, undefined),
- State;
-gui_cmd('Enable All', State) ->
- Breaks = int:all_breaks(),
- ThisMod = State#state.mod,
- lists:foreach(fun ({{Mod, Line}, _Options}) when Mod==ThisMod ->
- int:enable_break(Mod, Line);
- (_Break) ->
- ignore
- end,
- Breaks),
- State;
-gui_cmd('Disable All', State) ->
- Breaks = int:all_breaks(),
- ThisMod = State#state.mod,
- lists:foreach(fun ({{Mod, Line}, _Options}) when Mod==ThisMod ->
- int:disable_break(Mod, Line);
- (_Break) ->
- ignore
- end,
- Breaks),
- State;
-gui_cmd('Delete All', State) ->
- int:no_break(State#state.mod),
- State;
-gui_cmd({break, {Mod, Line}, What}, State) ->
- case What of
- add -> int:break(Mod, Line);
- delete -> int:delete_break(Mod, Line);
- {status, inactive} -> int:disable_break(Mod, Line);
- {status, active} -> int:enable_break(Mod, Line);
- {trigger, Action} -> int:action_at_break(Mod, Line, Action)
- end,
- State;
-
-%% Help menu
-gui_cmd('Debugger', State) ->
- Window = dbg_ui_trace_win:get_window(State#state.win),
- HelpFile = filename:join([code:lib_dir(debugger),
- "doc", "html", "part_frame.html"]),
- tool_utils:open_help(Window, HelpFile),
- State.
-
-add_break(GS, Coords, Type, undefined, _Line) ->
- dbg_ui_break:start(GS, Coords, Type);
-add_break(GS, Coords, Type, Mod, undefined) ->
- dbg_ui_break:start(GS, Coords, Type, Mod);
-add_break(GS, Coords, Type, Mod, Line) ->
- dbg_ui_break:start(GS, Coords, Type, Mod, Line).
-
-%%--Commands from the interpreter-------------------------------------
-
-int_cmd({new_break, {{Mod,_Line},_Options}=Break}, #state{mod=Mod}=State) ->
- Win = dbg_ui_trace_win:add_break(State#state.win, 'Break', Break),
- State#state{win=Win};
-int_cmd({delete_break, {Mod,_Line}=Point}, #state{mod=Mod}=State) ->
- Win = dbg_ui_trace_win:delete_break(State#state.win, Point),
- State#state{win=Win};
-int_cmd({break_options, {{Mod,_Line},_Options}=Break}, #state{mod=Mod}=State) ->
- Win = dbg_ui_trace_win:update_break(State#state.win, Break),
- State#state{win=Win};
-int_cmd(no_break, State) ->
- Win = dbg_ui_trace_win:clear_breaks(State#state.win),
- State#state{win=Win};
-int_cmd({no_break, _Mod}, State) ->
- Win = dbg_ui_trace_win:clear_breaks(State#state.win),
- State#state{win=Win};
-int_cmd(_, State) ->
- State.
-
-
-%%====================================================================
-%% GUI auxiliary functions
-%%====================================================================
-
-menus() ->
- [{'File', [{'Close', 0}]},
- {'Edit', [{'Go To Line...', 0},
- {'Search...', 0}]},
- {'Break', [{'Line Break...', 5},
- {'Conditional Break...', 13},
- {'Function Break...', 0},
- separator,
- {'Enable All', no},
- {'Disable All', no},
- {'Delete All', 0},
- separator]},
- {'Help', [{'Debugger', no}]}].
-
-shortcut(c) -> 'Close';
-shortcut(g) -> 'Go To Line...';
-shortcut(s) -> 'Search...';
-shortcut(b) -> 'Line Break...';
-shortcut(r) -> 'Conditional Break...';
-shortcut(f) -> 'Function Break...';
-shortcut(d) -> 'Delete All';
-
-shortcut(_) -> false.
-
-gui_load_module(Win, Mod) ->
- dbg_ui_trace_win:display({text, "Loading module..."}),
- Contents = int:contents(Mod, any),
- Win2 = dbg_ui_trace_win:show_code(Win, Mod, Contents),
- dbg_ui_trace_win:display({text, ""}),
- Win2.
diff --git a/lib/debugger/src/dbg_ui_win.erl b/lib/debugger/src/dbg_ui_win.erl
deleted file mode 100644
index 1c7a80a1c4..0000000000
--- a/lib/debugger/src/dbg_ui_win.erl
+++ /dev/null
@@ -1,281 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2002-2012. 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(dbg_ui_win).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,menu,2}},
- {nowarn_deprecated_function,{gs,menu,3}},
- {nowarn_deprecated_function,{gs,menubutton,2}},
- {nowarn_deprecated_function,{gs,menuitem,2}},
- {nowarn_deprecated_function,{gs,menuitem,3}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,start,1}}]).
-
-%% External exports
--export([init/0,
- font/1, min_size/3, min_size/4,
- create_menus/2, select/2, selected/1,
- add_break/2, update_break/2, delete_break/1,
- motion/2
- ]).
-
--record(break, {mb, smi, emi, dimi, demi}).
-
-%%====================================================================
-%% External exports
-%%====================================================================
-
-%%--------------------------------------------------------------------
-%% init() -> GS
-%% GS = term()
-%%--------------------------------------------------------------------
-init() ->
- gs:start([{kernel, true}]).
-
-%%--------------------------------------------------------------------
-%% font(Style) -> Font
-%% Style = normal | bold
-%% Select a suitable font. Defaults to {screen,12} and, if it does not
-%% exist, {courier,12}.
-%%--------------------------------------------------------------------
-font(Style) ->
- GS = init(),
- Style2 = if
- Style =:= normal -> [];
- true -> [Style]
- end,
- case gs:read(GS, {choose_font, {screen,Style2,12}}) of
- Font when element(1, Font) =:= screen ->
- Font;
- _ ->
- gs:read(GS, {choose_font, {courier,Style2,12}})
- end.
-
-%%--------------------------------------------------------------------
-%% min_size(Strings, MinW, MinH) -> {W, H}
-%% min_size(Font, Strings, MinW, MinH) -> {W, H}
-%% Font = GS font - defaults to dbg_ui_win:font(normal)
-%% Strings = [string()]
-%% MinW = MinH = int()
-%% W = H = int()
-%%--------------------------------------------------------------------
-min_size(Strings, MinW, MinH) ->
- min_size(font(normal), Strings, MinW, MinH).
-
-min_size(Font, Strings, MinW, MinH) ->
- GS = init(),
- min_size(GS, Font, Strings, MinW, MinH).
-
-min_size(GS, Font, [String|Strings], MinW, MinH) ->
- {W, H} = gs:read(GS, {font_wh, {Font, String}}),
- min_size(GS, Font, Strings, erlang:max(MinW, W), erlang:max(MinH, H));
-min_size(_GS, _Font, [], W, H) ->
- {W, H}.
-
-%%--------------------------------------------------------------------
-%% create_menus(MenuBar, [Menu])
-%% MenuBar = gsobj()
-%% Menu = {Name, [Item]}
-%% Name = atom()
-%% Item = {Name, N} | {Name, N, Type} | {Name, N, cascade, [Item]}
-%% | separator
-%% N = no | integer()
-%% Type = check | radio
-%% Create the specified menus and menuitems.
-%%
-%% Normal menuitems are specified as {Name, N}. Generates the event:
-%% {gs, _Id, click, {menuitem, Name}, _Arg}
-%%
-%% Check and radio menuitems are specified as {Name, N, check|radio}.
-%% They are assumed to be children to a cascade menuitem! (And all children
-%% to one cascade menuitem are assumed to be either check OR radio
-%% menuitems)!
-%% Selecting a check/radio menuitem generates the event:
-%% {gs, _Id, click, {menu, Menu}, _Arg}
-%% where Menu is the name of the parent, the cascade menuitem.
-%% Use selected(Menu) to retrieve which check/radio menuitems are
-%% selected.
-%%--------------------------------------------------------------------
-create_menus(MenuBar, [{Title, Items}|Menus]) ->
- Title2 = " "++(atom_to_list(Title))++" ",
- MenuBtn = gs:menubutton(MenuBar, [{label, {text,Title2}},
- {font, font(normal)}]),
- case Title of
- 'Help' -> gs:config(MenuBtn, {side, right});
- _ -> ignore
- end,
- Menu = gs:menu(Title, MenuBtn, []),
- create_items(Menu, Items, Title),
- create_menus(MenuBar, Menus);
-create_menus(_MenuBar, []) ->
- done.
-
-create_items(Menu, [Item|Items], Group) ->
- create_item(Menu, Item, Group),
- create_items(Menu, Items, Group);
-create_items(_Menu, [], _Group) ->
- done.
-
-create_item(Menu, {Name, _N, cascade, Items}, _Group) ->
- MenuBtn = gs:menuitem(Menu, [{label, {text,Name}},
- {font, font(normal)},
- {itemtype, cascade}]),
- SubMenu = gs:menu(Name, MenuBtn, []),
- create_items(SubMenu, Items, Name);
-create_item(Menu, separator, _Group) ->
- gs:menuitem(Menu, [{itemtype, separator}]);
-create_item(Menu, MenuItem, Group) ->
- Options = case MenuItem of
- {Name, N} ->
- [{data, {menuitem,Name}}];
- {Name, N, check} ->
- [{itemtype, check}, {data, {menu, Group}}];
- {Name, N, radio} ->
- [{itemtype, radio}, {data, {menu, Group}},
- {group, group(Group)}]
- end,
- gs:menuitem(Name, Menu, [{label, {text,Name}},
- {font, font(normal)} | Options]),
- if
- is_integer(N) -> gs:config(Name, {underline, N});
- true -> ignore
- end.
-
-%% When grouping radio buttons, the group id must be an atom unique for
-%% each window.
-group(Group) ->
- list_to_atom(atom_to_list(Group)++pid_to_list(self())).
-
-%%--------------------------------------------------------------------
-%% select(MenuItem, Bool)
-%% MenuItem = atom()
-%% Bool = boolean()
-%%--------------------------------------------------------------------
-select(MenuItem, Bool) ->
- gs:config(MenuItem, {select, Bool}).
-
-%%--------------------------------------------------------------------
-%% selected(Menu) -> [Name]
-%% Menu = Name = atom()
-%%--------------------------------------------------------------------
-selected(Menu) ->
- Children = gs:read(Menu, children),
- Selected = [gs:read(Child, select) || Child <- Children],
- lists:map(fun(Child) ->
- {text, Name} = gs:read(Child, label),
- list_to_atom(Name)
- end,
- Selected).
-
-%%--------------------------------------------------------------------
-%% add_break(Name, Point) -> #break{}
-%% Name = atom()
-%% Point = {Mod, Line}
-%% The break will generate the following events:
-%% {gs, _Id, click, {break, Point, Event}, _Arg}
-%% Event = delete | {trigger, Action} | {status, Status}
-%% Action = enable | disable | delete
-%% Status = active | inactive
-%%--------------------------------------------------------------------
-add_break(Menu, Point) ->
- Font = font(normal),
-
- %% Create a name for the breakpoint
- {Mod, Line} = Point,
- Label = io_lib:format("~w ~5w", [Mod, Line]),
-
- %% Create a menu for the breakpoint
- MenuBtn = gs:menuitem(Menu, [{label, {text,Label}}, {font, Font},
- {itemtype, cascade}]),
- SubMenu = gs:menu(MenuBtn, []),
- SMI = gs:menuitem(SubMenu, [{data, {break,Point,null}}]),
- gs:menuitem(SubMenu, [{label, {text,"Delete"}}, {font, Font},
- {data, {break,Point,delete}}]),
- TriggerMenuBtn = gs:menuitem(SubMenu,
- [{label,{text,"Trigger Action"}},
- {font, Font},
- {itemtype, cascade}]),
- TriggerMenu = gs:menu(TriggerMenuBtn, []),
- Group = element(3, erlang:now()),
- EMI = gs:menuitem(TriggerMenu, [{label, {text,"Enable"}},
- {font, Font},
- {itemtype, radio}, {group, Group},
- {data,
- {break,Point,{trigger,enable}}}]),
- DiMI = gs:menuitem(TriggerMenu, [{label, {text,"Disable"}},
- {font, Font},
- {itemtype, radio}, {group, Group},
- {data,
- {break,Point,{trigger,disable}}}]),
- DeMI = gs:menuitem(TriggerMenu, [{label, {text,"Delete"}},
- {font, Font},
- {itemtype, radio}, {group, Group},
- {data,
- {break,Point,{trigger,delete}}}]),
-
- #break{mb=MenuBtn, smi=SMI, emi=EMI, dimi=DiMI, demi=DeMI}.
-
-%%--------------------------------------------------------------------
-%% update_break(Break, Options)
-%% Break = #break{}
-%% Options = [Status, Action, Mods, Cond]
-%% Status = active | inactive
-%% Action = enable | disable | delete
-%% Mods = null (not used)
-%% Cond = null | {Mod, Func}
-%%--------------------------------------------------------------------
-update_break(Break, Options) ->
- [Status, Trigger|_] = Options,
- {break, Point, _Status} = gs:read(Break#break.smi, data),
-
- {Label, Data} = case Status of
- active ->
- {"Disable", {break,Point,{status,inactive}}};
- inactive ->
- {"Enable", {break,Point,{status,active}}}
- end,
- gs:config(Break#break.smi, [{label, {text,Label}},
- {font, font(normal)},
- {data, Data}]),
-
- TriggerMI = case Trigger of
- enable -> Break#break.emi;
- disable -> Break#break.dimi;
- delete -> Break#break.demi
- end,
- gs:config(TriggerMI, {select, true}).
-
-%%--------------------------------------------------------------------
-%% delete_break(Break)
-%% Break = #break{}
-%%--------------------------------------------------------------------
-delete_break(Break) ->
- gs:destroy(Break#break.mb).
-
-%%--------------------------------------------------------------------
-%% motion(X, Y) -> {X, Y}
-%% X = Y = integer()
-%%--------------------------------------------------------------------
-motion(X, Y) ->
- receive
- {gs, _Id, motion, _Data, [NX,NY]} ->
- motion(NX, NY)
- after 0 ->
- {X, Y}
- end.
diff --git a/lib/debugger/src/dbg_ui_winman.erl b/lib/debugger/src/dbg_ui_winman.erl
deleted file mode 100644
index b5433a202b..0000000000
--- a/lib/debugger/src/dbg_ui_winman.erl
+++ /dev/null
@@ -1,182 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2012. 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(dbg_ui_winman).
--behaviour(gen_server).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,menu,3}},
- {nowarn_deprecated_function,{gs,menubutton,3}},
- {nowarn_deprecated_function,{gs,menuitem,3}}]).
-
-%% External exports
--export([start/0]).
--export([insert/2, is_started/1,
- clear_process/1,
- raise/1,
- windows_menu/1, update_windows_menu/1]).
-
-%% gen_server callbacks
--export([init/1, handle_call/3, handle_cast/2, handle_info/2,
- terminate/2, code_change/3]).
-
--record(win, {owner, % pid()
- title, % string()
- win % gsobj()
- }).
-
--record(state, {wins=[] % [#win{}]
- }).
-
-%%====================================================================
-%% External exports
-%%====================================================================
-
-%%--------------------------------------------------------------------
-%% start()
-%%--------------------------------------------------------------------
-start() ->
- gen_server:start({local,?MODULE}, ?MODULE, [], []).
-
-%%--------------------------------------------------------------------
-%% insert(Title, Win)
-%% Title = string()
-%% Win = gsobj()
-%%--------------------------------------------------------------------
-insert(Title, Win) ->
- gen_server:cast(?MODULE, {insert, self(), Title, Win}).
-
-%%--------------------------------------------------------------------
-%% is_started(Title) -> true | false
-%% Title = string()
-%%--------------------------------------------------------------------
-is_started(Title) ->
- case gen_server:call(?MODULE, {is_started, Title}, infinity) of
- {true, Win} ->
- raise(Win),
- true;
- false ->
- false
- end.
-
-%%--------------------------------------------------------------------
-%% clear_process(Title)
-%% Title = string()
-%%--------------------------------------------------------------------
-clear_process(Title) ->
- gen_server:cast(?MODULE, {clear_process, Title}).
-
-%%--------------------------------------------------------------------
-%% raise(Win)
-%% Win = gsobj()
-%%--------------------------------------------------------------------
-raise(Win) ->
- gs:config(Win, [raise, {iconify, false}, {setfocus, true}]).
-
-%%--------------------------------------------------------------------
-%% windows_menu(MenuBar)
-%% MenuBar = gsobj()
-%%--------------------------------------------------------------------
-windows_menu(MenuBar) ->
- gs:menubutton('WindowsMenuBtn', MenuBar,
- [{label,{text," Windows "}},
- {font, dbg_ui_win:font(normal)}]),
- gs:menu('WindowsMenu', 'WindowsMenuBtn', []).
-
-%%--------------------------------------------------------------------
-%% update_windows_menu(Data)
-%% Data = {New, Old}
-%% New = Old = list()
-%%--------------------------------------------------------------------
-update_windows_menu([MonInfo|Infos]) ->
- gs:destroy('WindowsMenu'),
- gs:menu('WindowsMenu', 'WindowsMenuBtn', []),
- menuitem(MonInfo),
- gs:menuitem(separator, 'WindowsMenu', [{itemtype, separator}]),
- lists:foreach(fun(Info) -> menuitem(Info) end, Infos).
-
-menuitem({Title, Win}) ->
- gs:menuitem(Title, 'WindowsMenu', [{label, {text,Title}},
- {font, dbg_ui_win:font(normal)},
- {data, {dbg_ui_winman,Win}}]).
-
-
-%%====================================================================
-%% gen_server callbacks
-%%====================================================================
-
-init(_Arg) ->
- process_flag(trap_exit, true),
- {ok, #state{}}.
-
-handle_call({is_started, Title}, _From, State) ->
- Reply = case lists:keyfind(Title, #win.title, State#state.wins) of
- false -> false;
- Win -> {true, Win#win.win}
- end,
- {reply, Reply, State}.
-
-handle_cast({insert, Pid, Title, Win}, State) ->
- link(Pid),
- Wins = State#state.wins ++ [#win{owner=Pid, title=Title, win=Win}],
- inform_all(Wins),
- {noreply, State#state{wins=Wins}};
-
-handle_cast({clear_process, Title}, State) ->
- OldWins = State#state.wins,
- Wins = case lists:keyfind(Title, #win.title, OldWins) of
- #win{owner=Pid} ->
- Msg = {dbg_ui_winman, destroy},
- Pid ! Msg,
- lists:keydelete(Title, #win.title, OldWins);
- false ->
- OldWins
- end,
- {noreply, State#state{wins=Wins}}.
-
-handle_info({'EXIT', Pid, _Reason}, State) ->
- [Mon | _Wins] = State#state.wins,
- if
- Pid =:= Mon#win.owner -> {stop, normal, State};
- true ->
- Wins2 = lists:keydelete(Pid, #win.owner, State#state.wins),
- inform_all(Wins2),
- {noreply, State#state{wins=Wins2}}
- end.
-
-terminate(_Reason, State) ->
- delete_all(State#state.wins),
- ok.
-
-code_change(_OldVsn, State, _Extra) ->
- {ok, State}.
-
-
-%%====================================================================
-%% Internal functions
-%%====================================================================
-
-inform_all(Wins) ->
- Infos = lists:map(fun(#win{title=Title, win=Win}) -> {Title, Win} end,
- Wins),
- Msg = {dbg_ui_winman, update_windows_menu, Infos},
- lists:foreach(fun(#win{owner=Pid}) -> Pid ! Msg end, Wins).
-
-delete_all(Wins) ->
- Msg = {dbg_ui_winman, destroy},
- lists:foreach(fun(#win{owner=Pid}) -> Pid ! Msg end, Wins).
diff --git a/lib/debugger/src/dbg_wx_mon_win.erl b/lib/debugger/src/dbg_wx_mon_win.erl
index a617f3e1e7..0071b27027 100644
--- a/lib/debugger/src/dbg_wx_mon_win.erl
+++ b/lib/debugger/src/dbg_wx_mon_win.erl
@@ -43,7 +43,7 @@
-record(moduleInfo, {module, menubtn}).
-record(procInfo, {pid, row}).
-record(breakInfo, {point, status, break}).
--record(break, {mb, smi, emi, dimi, demi}). %% BUGBUG defined in dbg_ui_win
+-record(break, {mb, smi, emi, dimi, demi}).
-record(winInfo, {window, % gsobj()
grid, % gsobj()
row, % int() Last row in grid
@@ -76,13 +76,6 @@
init() ->
dbg_wx_win:init().
-%%--------------------------------------------------------------------
-%% create_win(GS, Title, Menus) -> #winInfo{}
-%% GS = gsobj()
-%% Title = string()
-%% Menus = [menu()] See dbg_ui_win.erl
-%%--------------------------------------------------------------------
-
-define(GRID,1000).
-define(PAD, 5).
diff --git a/lib/debugger/src/dbg_wx_trace.erl b/lib/debugger/src/dbg_wx_trace.erl
index 7108b5a79a..1ac796bb4c 100644
--- a/lib/debugger/src/dbg_wx_trace.erl
+++ b/lib/debugger/src/dbg_wx_trace.erl
@@ -71,21 +71,10 @@ start(Pid, TraceWin, BackTrace) ->
start(Pid, TraceWin, BackTrace, ?STRINGS).
start(Pid, TraceWin, BackTrace, Strings) ->
- case {whereis(dbg_wx_mon), whereis(dbg_ui_mon)} of
- {undefined, undefined} ->
- case which_gui() of
- gs ->
- dbg_ui_trace:start(Pid, TraceWin, BackTrace);
- wx ->
- Parent = wx:new(),
- Env = wx:get_env(),
- start(Pid, Env, Parent, TraceWin, BackTrace, Strings)
- end;
- {undefined, Monitor} when is_pid(Monitor) ->
- dbg_ui_trace:start(Pid, TraceWin, BackTrace);
- {Monitor, _} when is_pid(Monitor) ->
+ case whereis(dbg_wx_mon) of
+ Monitor when is_pid(Monitor) ->
Monitor ! {?MODULE, self(), get_env},
- receive
+ receive
{env, Monitor, Env, Parent} ->
start(Pid, Env, Parent, TraceWin, BackTrace, Strings)
end
@@ -110,15 +99,6 @@ start(Pid, Env, Parent, TraceWin, BackTrace, Strings) ->
ignore
end.
-which_gui() ->
- try
- wx:new(),
- wx:destroy(),
- wx
- catch _:_ ->
- gs
- end.
-
%%--------------------------------------------------------------------
%% title(Pid) -> string()
%% By exporting this function, dbg_wx_mon may check with dbg_wx_winman
diff --git a/lib/debugger/src/debugger.app.src b/lib/debugger/src/debugger.app.src
index 807054c983..84fb98c94e 100644
--- a/lib/debugger/src/debugger.app.src
+++ b/lib/debugger/src/debugger.app.src
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2013. 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
@@ -27,20 +27,6 @@
dbg_iload,
dbg_iserver,
dbg_istk,
- dbg_ui_break,
- dbg_ui_break_win,
- dbg_ui_edit,
- dbg_ui_edit_win,
- dbg_ui_filedialog_win,
- dbg_ui_interpret,
- dbg_ui_mon,
- dbg_ui_mon_win,
- dbg_ui_settings,
- dbg_ui_trace,
- dbg_ui_trace_win,
- dbg_ui_view,
- dbg_ui_win,
- dbg_ui_winman,
dbg_wx_break,
dbg_wx_break_win,
dbg_wx_code,
@@ -59,5 +45,5 @@
i,
int
]},
- {registered, [dbg_iserver, dbg_ui_mon, dbg_ui_winman]},
- {applications, [kernel, stdlib, gs]}]}.
+ {registered, [dbg_iserver, dbg_wx_mon, dbg_wx_winman]},
+ {applications, [kernel, stdlib]}]}.
diff --git a/lib/debugger/src/debugger.erl b/lib/debugger/src/debugger.erl
index b97091ee6b..8a2ac28df5 100644
--- a/lib/debugger/src/debugger.erl
+++ b/lib/debugger/src/debugger.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2013. 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
@@ -32,44 +32,44 @@
%% --------
%% Interface module.
%%
-%% dbg_ui_winman
+%% dbg_wx_winman
%% -------------
%% Window manager, keeping track of open windows and Debugger
%% processes.
%%
-%% dbg_ui_mon, dbg_ui_mon_win
+%% dbg_wx_mon, dbg_wx_mon_win
%% --------------------------
%% Monitor window, main window of Debugger, displaying information
%% about interpreted modules and debugged processes.
%%
-%% dbg_ui_trace, dbg_ui_trace_win
+%% dbg_wx_trace, dbg_wx_trace_win
%% ------------------------------
%% Attach process window, showing the code executed by a debugged
%% process and providing a GUI for stepping, inspecting variables etc.
%%
-%% dbg_ui_break, dbg_ui_break_win
+%% dbg_wx_break, dbg_wx_break_win
%% ------------------------------
%% Help window for creating new breakpoints.
%%
-%% dbg_ui_edit, dbg_ui_edit_win
+%% dbg_wx_edit, dbg_wx_edit_win
%% --------------------------------------
%% Help window for editing terms, used for setting backtrace size
%% (i.e. how many stack frames to display in the attach process window)
%% and changing variable values.
%%
-%% dbg_ui_interpret, dbg_ui_filedialog_win
+%% dbg_wx_interpret, dbg_wx_filedialog_win
%% --------------------------------------
%% Help window for selecting modules to interpret.
%%
-%% dbg_ui_settings, dbg_ui_filedialog_win
+%% dbg_wx_settings, dbg_wx_filedialog_win
%% --------------------------------------
%% Help window for saving and loading Debugger settings.
%%
-%% dbg_ui_view
+%% dbg_wx_view
%% -----------
-%% Help window for viewing interpreted modules (uses dbg_ui_trace_win).
+%% Help window for viewing interpreted modules (uses dbg_wx_trace_win).
%%
-%% dbg_ui_win
+%% dbg_wx_win
%% ----------
%% GUI specific functionality used by more than one window type.
%%
@@ -78,7 +78,7 @@ start() ->
start(global, default, default).
start(Mode) when Mode==local; Mode==global ->
start(Mode, default, default);
-start(Gui) when Gui==gs; Gui==wx ->
+start(Gui) when Gui==wx ->
start(global, default, Gui);
start(SFile) when is_list(SFile), is_integer(hd(SFile)) ->
start(global, SFile, default).
@@ -86,8 +86,6 @@ start(SFile) when is_list(SFile), is_integer(hd(SFile)) ->
start(Mode, SFile) ->
start(Mode, SFile, default).
-start(Mode, SFile, gs) ->
- dbg_ui_mon:start(Mode, SFile);
start(Mode, SFile, wx) ->
dbg_wx_mon:start(Mode, SFile);
start(Mode, SFile, default) ->
@@ -95,7 +93,7 @@ start(Mode, SFile, default) ->
start(Mode, SFile, Gui).
stop() ->
- dbg_ui_mon:stop().
+ dbg_wx_mon:stop().
quick(M, F, A) ->
int:i(M),
@@ -104,15 +102,7 @@ quick(M, F, A) ->
auto_attach(Flags) ->
case which_gui() of
- gs -> int:auto_attach(Flags, {dbg_ui_trace, start, []});
wx -> int:auto_attach(Flags, {dbg_wx_trace, start, []})
end.
-which_gui() ->
- try
- wx:new(),
- wx:destroy(),
- wx
- catch _:_ ->
- gs
- end.
+which_gui() -> wx.
diff --git a/lib/dialyzer/doc/manual.txt b/lib/dialyzer/doc/manual.txt
index d519ac960b..29c9518d84 100644
--- a/lib/dialyzer/doc/manual.txt
+++ b/lib/dialyzer/doc/manual.txt
@@ -125,7 +125,7 @@ The exit status of the command line version is:
Usage: dialyzer [--help] [--version] [--shell] [--quiet] [--verbose]
[-pa dir]* [--plt plt] [--plts plt*] [-Ddefine]*
[-I include_dir]* [--output_plt file] [-Wwarn]*
- [--src] [--gui | --wx] [files_or_dirs] [-r dirs]
+ [--src] [--gui] [files_or_dirs] [-r dirs]
[--apps applications] [-o outfile]
[--build_plt] [--add_to_plt] [--remove_from_plt]
[--check_plt] [--no_check_plt] [--plt_info] [--get_warnings]
@@ -234,9 +234,7 @@ Options:
--fullpath
Display the full path names of files for which warnings are emitted.
--gui
- Use the gs-based GUI.
- --wx
- Use the wx-based GUI.
+ Use the GUI.
Note:
* denotes that multiple occurrences of these options are possible.
diff --git a/lib/dialyzer/doc/src/dialyzer.xml b/lib/dialyzer/doc/src/dialyzer.xml
index 5bac999ac8..2a631c3010 100644
--- a/lib/dialyzer/doc/src/dialyzer.xml
+++ b/lib/dialyzer/doc/src/dialyzer.xml
@@ -67,7 +67,7 @@
dialyzer [--help] [--version] [--shell] [--quiet] [--verbose]
[-pa dir]* [--plt plt] [--plts plt*] [-Ddefine]*
[-I include_dir]* [--output_plt file] [-Wwarn]*
- [--src] [--gui | --wx] [files_or_dirs] [-r dirs]
+ [--src] [--gui] [files_or_dirs] [-r dirs]
[--apps applications] [-o outfile]
[--build_plt] [--add_to_plt] [--remove_from_plt]
[--check_plt] [--no_check_plt] [--plt_info] [--get_warnings]
@@ -204,9 +204,7 @@
<tag><c><![CDATA[--fullpath]]></c></tag>
<item>Display the full path names of files for which warnings are emitted.</item>
<tag><c><![CDATA[--gui]]></c></tag>
- <item>Use the gs-based GUI.</item>
- <tag><c><![CDATA[--wx]]></c></tag>
- <item>Use the wx-based GUI.</item>
+ <item>Use the GUI.</item>
</taglist>
<note>
<p>* denotes that multiple occurrences of these options are possible.</p>
diff --git a/lib/dialyzer/src/Makefile b/lib/dialyzer/src/Makefile
index bb2edd419a..d7265ba31a 100644
--- a/lib/dialyzer/src/Makefile
+++ b/lib/dialyzer/src/Makefile
@@ -57,7 +57,6 @@ MODULES = \
dialyzer_dataflow \
dialyzer_dep \
dialyzer_explanation \
- dialyzer_gui \
dialyzer_gui_wx \
dialyzer_options \
dialyzer_plt \
@@ -113,9 +112,6 @@ $(EBIN)/dialyzer_cl_parse.$(EMULATOR): dialyzer_cl_parse.erl ../vsn.mk
$(EBIN)/dialyzer_plt.$(EMULATOR): dialyzer_plt.erl ../vsn.mk
$(erlc_verbose)erlc -W $(ERL_COMPILE_FLAGS) -DVSN="\"v$(VSN)\"" -o$(EBIN) dialyzer_plt.erl
-$(EBIN)/dialyzer_gui.$(EMULATOR): dialyzer_gui.erl ../vsn.mk
- $(erlc_verbose)erlc -W $(ERL_COMPILE_FLAGS) -DVSN="\"v$(VSN)\"" -o$(EBIN) dialyzer_gui.erl
-
$(EBIN)/dialyzer_gui_wx.$(EMULATOR): dialyzer_gui_wx.erl ../vsn.mk
$(erlc_verbose)erlc -W $(ERL_COMPILE_FLAGS) -DVSN="\"v$(VSN)\"" -o$(EBIN) dialyzer_gui_wx.erl
@@ -140,7 +136,6 @@ $(EBIN)/dialyzer_contracts.beam: dialyzer.hrl
$(EBIN)/dialyzer_dataflow.beam: dialyzer.hrl
$(EBIN)/dialyzer_dep.beam: dialyzer.hrl
$(EBIN)/dialyzer_explanation.beam: dialyzer.hrl
-$(EBIN)/dialyzer_gui.beam: dialyzer.hrl
$(EBIN)/dialyzer_gui_wx.beam: dialyzer.hrl dialyzer_gui_wx.hrl
$(EBIN)/dialyzer_options.beam: dialyzer.hrl
$(EBIN)/dialyzer_plt.beam: dialyzer.hrl
diff --git a/lib/dialyzer/src/dialyzer.erl b/lib/dialyzer/src/dialyzer.erl
index 822aa0826a..35156afff2 100644
--- a/lib/dialyzer/src/dialyzer.erl
+++ b/lib/dialyzer/src/dialyzer.erl
@@ -62,18 +62,18 @@ plain_cl() ->
cl_halt(cl_check_init(Opts), Opts);
{plt_info, Opts} ->
cl_halt(cl_print_plt_info(Opts), Opts);
- {{gui, Type}, Opts} ->
+ {gui, Opts} ->
try check_gui_options(Opts)
catch throw:{dialyzer_error, Msg} -> cl_error(Msg)
end,
case Opts#options.check_plt of
true ->
case cl_check_init(Opts#options{get_warnings = false}) of
- {ok, _} -> gui_halt(internal_gui(Type, Opts), Opts);
+ {ok, _} -> gui_halt(internal_gui(Opts), Opts);
{error, _} = Error -> cl_halt(Error, Opts)
end;
false ->
- gui_halt(internal_gui(Type, Opts), Opts)
+ gui_halt(internal_gui(Opts), Opts)
end;
{cl, Opts} ->
case Opts#options.check_plt of
@@ -179,12 +179,9 @@ run(Opts) ->
erlang:error({dialyzer_error, lists:flatten(ErrorMsg)})
end.
-internal_gui(Type, OptsRecord) ->
+internal_gui(OptsRecord) ->
F = fun() ->
- case Type of
- gs -> dialyzer_gui:start(OptsRecord);
- wx -> dialyzer_gui_wx:start(OptsRecord)
- end,
+ dialyzer_gui_wx:start(OptsRecord),
?RET_NOTHING_SUSPICIOUS
end,
doit(F).
@@ -205,7 +202,7 @@ gui(Opts) ->
case cl_check_init(OptsRecord) of
{ok, ?RET_NOTHING_SUSPICIOUS} ->
F = fun() ->
- dialyzer_gui:start(OptsRecord)
+ dialyzer_gui_wx:start(OptsRecord)
end,
case doit(F) of
{ok, _} -> ok;
diff --git a/lib/dialyzer/src/dialyzer_cl_parse.erl b/lib/dialyzer/src/dialyzer_cl_parse.erl
index 2ea3d3af5a..db27b2037d 100644
--- a/lib/dialyzer/src/dialyzer_cl_parse.erl
+++ b/lib/dialyzer/src/dialyzer_cl_parse.erl
@@ -2,7 +2,7 @@
%%-----------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2013. 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
@@ -30,7 +30,7 @@
-type dial_cl_parse_ret() :: {'check_init', #options{}}
| {'plt_info', #options{}}
| {'cl', #options{}}
- | {{'gui', 'gs' | 'wx'}, #options{}}
+ | {'gui', #options{}}
| {'error', string()}.
-type deep_string() :: string() | [deep_string()].
@@ -193,12 +193,9 @@ cl(["--dump_callgraph", File|T]) ->
put(dialyzer_callgraph_file, File),
cl(T);
cl(["--gui"|T]) ->
- put(dialyzer_options_mode, {gui, gs}),
+ put(dialyzer_options_mode, gui),
cl(T);
-cl(["--wx"|T]) ->
- put(dialyzer_options_mode, {gui, wx}),
- cl(T);
-cl(["--solver",Solver|T]) -> % not documented
+cl(["--solver", Solver|T]) -> % not documented
append_var(dialyzer_solvers, [list_to_atom(Solver)]),
cl(T);
cl([H|_] = L) ->
@@ -217,7 +214,7 @@ cl([]) ->
{plt_info, cl_options()};
false ->
case get(dialyzer_options_mode) of
- {gui, _} = GUI -> {GUI, common_options()};
+ gui -> {gui, common_options()};
cl ->
case get(dialyzer_options_analysis_type) =:= plt_check of
true -> {check_init, cl_options()};
@@ -361,7 +358,7 @@ help_message() ->
S = "Usage: dialyzer [--help] [--version] [--shell] [--quiet] [--verbose]
[-pa dir]* [--plt plt] [--plts plt*] [-Ddefine]*
[-I include_dir]* [--output_plt file] [-Wwarn]*
- [--src] [--gui | --wx] [files_or_dirs] [-r dirs]
+ [--src] [--gui] [files_or_dirs] [-r dirs]
[--apps applications] [-o outfile]
[--build_plt] [--add_to_plt] [--remove_from_plt]
[--check_plt] [--no_check_plt] [--plt_info] [--get_warnings]
@@ -473,9 +470,7 @@ Options:
--fullpath
Display the full path names of files for which warnings are emitted.
--gui
- Use the gs-based GUI.
- --wx
- Use the wx-based GUI.
+ Use the GUI.
Note:
* denotes that multiple occurrences of these options are possible.
diff --git a/lib/dialyzer/src/dialyzer_gui.erl b/lib/dialyzer/src/dialyzer_gui.erl
deleted file mode 100644
index 97e5752577..0000000000
--- a/lib/dialyzer/src/dialyzer_gui.erl
+++ /dev/null
@@ -1,1381 +0,0 @@
-%% -*- erlang-indent-level: 2 -*-
-%%------------------------------------------------------------------------
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2006-2013. 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%
-%%
-
-%%%-----------------------------------------------------------------------
-%%% File : dialyzer_gui.erl
-%%% Authors : Tobias Lindahl <[email protected]>
-%%% Kostis Sagonas <[email protected]>
-%%% Description : The graphical user interface for the Dialyzer tool.
-%%%
-%%% Created : 27 Apr 2004 by Tobias Lindahl <[email protected]>
-%%%-----------------------------------------------------------------------
-
--module(dialyzer_gui).
--compile([{nowarn_deprecated_function,{gs,button,2}},
- {nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,editor,2}},
- {nowarn_deprecated_function,{gs,entry,2}},
- {nowarn_deprecated_function,{gs,frame,2}},
- {nowarn_deprecated_function,{gs,label,2}},
- {nowarn_deprecated_function,{gs,listbox,2}},
- {nowarn_deprecated_function,{gs,menu,2}},
- {nowarn_deprecated_function,{gs,menubar,2}},
- {nowarn_deprecated_function,{gs,menubutton,2}},
- {nowarn_deprecated_function,{gs,menuitem,2}},
- {nowarn_deprecated_function,{gs,radiobutton,2}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,start,0}},
- {nowarn_deprecated_function,{gs,stop,0}},
- {nowarn_deprecated_function,{gs,window,2}}]).
-
--export([start/1]).
-
--include("dialyzer.hrl").
-
-%%------------------------------------------------------------------------
-
--define(DIALYZER_ERROR_TITLE, "Dialyzer Error").
--define(DIALYZER_MESSAGE_TITLE, "Dialyzer Message").
-
-%%------------------------------------------------------------------------
-
--type gs_object() :: any(). %% XXX: should be imported from gs
-
--record(mode, {start_byte_code :: gs_object(),
- start_src_code :: gs_object()}).
-
--record(menu, {file_save_log :: gs_object(),
- file_save_warn :: gs_object(),
- file_quit :: gs_object(),
- help_about :: gs_object(),
- help_manual :: gs_object(),
- help_warnings :: gs_object(),
- opts_macros :: gs_object(),
- opts_includes :: gs_object(),
- plt_empty :: gs_object(),
- plt_search_doc :: gs_object(),
- plt_show_doc :: gs_object(),
- warnings :: gs_object()}).
-
--record(gui_state, {add_all :: gs_object(),
- add_file :: gs_object(),
- add_rec :: gs_object(),
- chosen_box :: gs_object(),
- analysis_pid :: pid(),
- del_file :: gs_object(),
- doc_plt :: dialyzer_plt:plt(),
- clear_chosen :: gs_object(),
- clear_log :: gs_object(),
- clear_warn :: gs_object(),
- init_plt :: dialyzer_plt:plt(),
- dir_entry :: gs_object(),
- file_box :: gs_object(),
- file_wd :: gs_object(),
- gs :: gs_object(),
- log :: gs_object(),
- menu :: #menu{},
- mode :: #mode{},
- options :: #options{},
- packer :: gs_object(),
- run :: gs_object(),
- stop :: gs_object(),
- top :: gs_object(),
- warnings_box :: gs_object(),
- backend_pid :: pid()}).
-
-%%------------------------------------------------------------------------
-
--spec start(#options{}) -> ?RET_NOTHING_SUSPICIOUS.
-
-start(#options{from = From, init_plts = InitPltFiles,
- legal_warnings = LegalWarnings} = DialyzerOptions) ->
- process_flag(trap_exit, true),
-
- GS = gs:start(),
- code:add_pathsa(["."]),
- WH = [{width, 1000}, {height, 550}],
- EmptySpace = {stretch, 1},
-
- {ok, Host} = inet:gethostname(),
- %% --------- Top Window --------------
- TopWin = gs:window(GS, [{title, "Dialyzer " ++ ?VSN ++ " @ " ++ Host},
- {configure, true},
- {default, listbox, {bg, white}},
- {default, editor, {bg, white}},
- {default, entry, {bg, white}},
- {default, button, {font, {helvetica, bold, 12}}},
- {default, label, {font, {helvetica, bold, 12}}}
- |WH]),
- Packer = gs:frame(TopWin, [{packer_x, [{stretch, 3},{fixed, 200},
- {stretch, 7}]},
- {packer_y, [{fixed, 25}, {fixed, 20},
- {stretch, 1, 50},
- {fixed, 25}, {fixed, 20},
- {stretch, 1, 50},
- {fixed, 25}]}]),
-
- %% --------- Chosen box --------------
- gs:label(Packer, [{label, {text, "Directories or modules to analyze"}},
- {height, 20}, {pack_xy, {1, 2}}]),
- ChosenBox = gs:listbox(Packer, [{pack_xy, {1, 3}}, {vscroll, right},
- {selectmode, multiple}]),
-
- %% --------- File box --------------
- gs:label(Packer, [{label, {text, "File"}}, {height, 20}, {pack_xy, {1,5}}]),
- FilePacker = gs:frame(Packer, [{packer_x, [{fixed, 30}, {stretch, 1, 100}]},
- {packer_y, [{fixed, 25}, {stretch, 1, 25}]},
- {pack_xy, {1, 6}}]),
- gs:label(FilePacker, [{label, {text, "Dir:"}}, {pack_xy, {1, 1}}]),
- DirEntry = gs:entry(FilePacker, [{height, 30}, {pack_xy, {2, 1}},
- {keypress, true}]),
- File = gs:listbox(FilePacker, [{pack_x, {1,2}}, {pack_y, 2},
- {selectmode, multiple}, {doubleclick, true},
- {vscroll, right}]),
-
- %% --------- Options --------------
- gs:label(Packer, [{label, {text, "Analysis Options"}},
- {height, 20}, {pack_xy, {2, 2}}]),
- ModePacker = gs:frame(Packer, [{packer_x, [{fixed, 75}, {fixed, 120}]},
- {packer_y, [{fixed, 20}, {fixed, 20},
- {fixed, 20},
- %% EmptySpace,
- {fixed, 20}, {fixed, 20},
- {fixed, 20}, EmptySpace]},
- {bw, 10}, {relief, flat},
- {default, {radiobutton, {align, w}}},
- {default, {label, {align, w}}},
- {pack_xy, {2, 3}}]),
-
- %% Bytecode vs. Source code
- gs:label(ModePacker, [{label, {text, "File Type:"}},
- {height, 20}, {pack_xy, {1,1}}]),
- {ByteSel, SrcSel} = case From of
- byte_code -> {[{select, true}], []};
- src_code -> {[], [{select, true}]}
- end,
- ModeByteCode = gs:radiobutton(ModePacker,
- ByteSel ++ [{group, start_from},
- {label, {text,"BeamFiles"}},
- {pack_xy, {2,1}}]),
- ModeSrcCode = gs:radiobutton(ModePacker,
- SrcSel ++ [{group, start_from},
- {label, {text,"SourceFiles"}},
- {pack_xy, {2,2}}]),
- Mode = #mode{start_byte_code = ModeByteCode,
- start_src_code = ModeSrcCode},
-
- %% --------- Log box --------------
- gs:label(Packer, [{label, {text, "Log"}}, {height, 20}, {pack_xy, {3,2}}]),
- Log = gs:editor(Packer, [{pack_x, 3}, {pack_y, 3}, {enable, false},
- {font, {courier, 12}}, {vscroll, right},
- {wrap, word}]),
-
- %% --------- Warnings box --------------
- gs:label(Packer, [{label, {text, "Warnings"}},{height, 20},{pack_xy, {3,5}}]),
- WarningsBox = gs:editor(Packer, [{pack_x, {2,3}}, {pack_y, 6},
- {enable, false},
- {font, {courier, 12}}, {vscroll, right},
- {wrap, word}]),
-
- %% --------- Buttons --------------
- ButtonPackerHighLeft =
- gs:frame(Packer, [{packer_x, [{fixed, 50}, {fixed, 65}, EmptySpace]},
- {pack_xy, {1,4}}]),
- ButtonPackerHighRight =
- gs:frame(Packer, [{packer_x, [{fixed, 70}, {fixed, 70}, EmptySpace]},
- {pack_xy, {3,4}}]),
- ButtonPackerLowLeft =
- gs:frame(Packer, [{packer_x, [{fixed, 50},
- {fixed, 60},
- {fixed, 110},
- EmptySpace]},
- {pack_xy, {1,7}}]),
- ButtonPackerLowRight =
- gs:frame(Packer, [{packer_x, [{fixed, 100},
- {fixed, 70},
- EmptySpace,
- {fixed, 70},
- {fixed, 70}]},
- {pack_x, {2,3}}, {pack_y, 7}]),
-
- WHButton = [{width, 60}, {height, 20}],
- AddFile = gs:button(ButtonPackerLowLeft, [{pack_xy, {1, 1}},
- {label, {text,"Add"}}|WHButton]),
- AddAll = gs:button(ButtonPackerLowLeft, [{pack_xy, {2, 1}},
- {label, {text,"Add All"}}|WHButton]),
- AddRec = gs:button(ButtonPackerLowLeft, [{pack_xy, {3, 1}},
- {label, {text,"Add Recursively"}}
- |WHButton]),
- DelFile = gs:button(ButtonPackerHighLeft, [{pack_xy, {1, 1}},
- {label, {text,"Delete"}}|WHButton]),
- ClearChosen = gs:button(ButtonPackerHighLeft, [{pack_xy, {2, 1}},
- {label, {text,"Delete All"}}
- |WHButton]),
- ClearLog = gs:button(ButtonPackerHighRight, [{pack_xy, {1, 1}},
- {label, {text,"Clear Log"}}
- |WHButton]),
- ClearWarn = gs:button(ButtonPackerLowRight, [{pack_xy, {1, 1}},
- {label, {text,"Clear Warnings"}}
- |WHButton]),
-
- Run = gs:button(ButtonPackerLowRight, [{pack_xy, {4, 1}},
- {label, {text,"Run"}}|WHButton]),
- Stop = gs:button(ButtonPackerLowRight, [{pack_xy, {5, 1}}, {enable, false},
- {label, {text,"Stop"}}|WHButton]),
-
- %% --------- Menu --------------
- MenuBar = gs:menubar(TopWin, []),
-
- %% File Menu
- MenuBarFile = gs:menubutton(MenuBar, [{label, {text, "File"}}]),
- MenuFile = gs:menu(MenuBarFile, []),
- MenuFileSaveWarn = gs:menuitem(MenuFile, [{label, {text, "Save Warnings"}}]),
- MenuFileSaveLog = gs:menuitem(MenuFile, [{label, {text, "Save Log"}}]),
- MenuFileQuit = gs:menuitem(MenuFile, [{label, {text, "Quit"}}]),
-
- %% Warnings Menu
- MenuBarWarn = gs:menubutton(MenuBar, [{label, {text, "Warnings"}}]),
- MenuWarn = gs:menu(MenuBarWarn, []),
- MenuWarnMatch = gs:menuitem(MenuWarn, [{label, {text, "Match failures"}},
- {itemtype, check}, {select, true}]),
- MenuWarnFailingCall = gs:menuitem(MenuWarn,
- [{label, {text, "Failing function calls"}},
- {itemtype, check}, {select, true}]),
- MenuWarnFunApp = gs:menuitem(MenuWarn, [{label,
- {text, "Bad fun applications"}},
- {itemtype, check}, {select, true}]),
- MenuWarnOpaque = gs:menuitem(MenuWarn, [{label,
- {text, "Opaqueness violations"}},
- {itemtype, check}, {select, true}]),
- MenuWarnLists = gs:menuitem(MenuWarn,
- [{label, {text, "Improper list constructions"}},
- {itemtype, check}, {select, true}]),
- MenuWarnNotCalled = gs:menuitem(MenuWarn,
- [{label, {text, "Unused functions"}},
- {itemtype, check}, {select, true}]),
- MenuWarnReturnOnlyExit = gs:menuitem(MenuWarn,
- [{label,
- {text, "Error handling functions"}},
- {itemtype, check}, {select, false}]),
- MenuWarnReturnNoReturn = gs:menuitem(MenuWarn,
- [{label,
- {text, "Functions of no return"}},
- {itemtype, check}, {select, true}]),
- MenuWarnCallNonExported = gs:menuitem(MenuWarn,
- [{label,
- {text, "Call to unexported function"}},
- {itemtype, check}, {select, true}]),
- MenuWarnRaceCondition = gs:menuitem(MenuWarn,
- [{label,
- {text,"Possible race conditions"}},
- {itemtype, check}, {select, false}]),
- MenuWarnContractTypes = gs:menuitem(MenuWarn,
- [{label, {text, "Wrong contracts"}},
- {itemtype, check}, {select, true}]),
- MenuWarnContractSyntax = gs:menuitem(MenuWarn,
- [{label,
- {text, "Wrong contract syntax"}},
- {itemtype, check}, {select, true}]),
-
- %% PLT Menu
- MenuBarPLT = gs:menubutton(MenuBar, [{label, {text,"PLT"}}]),
- MenuPLT = gs:menu(MenuBarPLT, []),
- MenuPLTEmpty = gs:menuitem(MenuPLT, [{label, {text, "Init with empty PLT"}},
- {itemtype, check}, {select, false}]),
- MenuPLTShow = gs:menuitem(MenuPLT, [{label, {text, "Show contents"}}]),
- MenuPLTSearch = gs:menuitem(MenuPLT, [{label, {text, "Search contents"}}]),
-
- %% Options Menu
- MenuBarOpts = gs:menubutton(MenuBar, [{label,{text,"Options"}}]),
- MenuOpts = gs:menu(MenuBarOpts, []),
- MenuOptsMacros = gs:menuitem(MenuOpts,
- [{label, {text, "Manage Macro Definitions"}}]),
- MenuOptsIncludes = gs:menuitem(MenuOpts,
- [{label, {text, "Manage Include Directories"}}]),
-
- %% Help
- MenuBarHelp = gs:menubutton(MenuBar, [{label, {text, "Help"}}, {side, right}]),
- MenuHelp = gs:menu(MenuBarHelp, []),
- MenuHelpManual = gs:menuitem(MenuHelp, [{label, {text, "Manual"}}]),
- MenuHelpWarnings = gs:menuitem(MenuHelp, [{label, {text, "Warning Options"}}]),
- MenuHelpAbout = gs:menuitem(MenuHelp, [{label, {text, "About"}}]),
-
- Warnings = [{?WARN_RETURN_NO_RETURN, MenuWarnReturnNoReturn},
- {?WARN_RETURN_ONLY_EXIT, MenuWarnReturnOnlyExit},
- {?WARN_NOT_CALLED, MenuWarnNotCalled},
- {?WARN_NON_PROPER_LIST, MenuWarnLists},
- {?WARN_FUN_APP, MenuWarnFunApp},
- {?WARN_MATCHING, MenuWarnMatch},
- {?WARN_OPAQUE, MenuWarnOpaque},
- {?WARN_FAILING_CALL, MenuWarnFailingCall},
- {?WARN_CALLGRAPH, MenuWarnCallNonExported},
- {?WARN_RACE_CONDITION, MenuWarnRaceCondition},
- %% For contracts.
- {?WARN_CONTRACT_TYPES, MenuWarnContractTypes},
- {?WARN_CONTRACT_SYNTAX, MenuWarnContractSyntax}
- ],
-
- init_warnings(Warnings, LegalWarnings),
-
- Menu = #menu{file_quit = MenuFileQuit,
- plt_empty = MenuPLTEmpty,
- help_manual = MenuHelpManual,
- help_about = MenuHelpAbout,
- help_warnings = MenuHelpWarnings,
- opts_macros = MenuOptsMacros,
- opts_includes = MenuOptsIncludes,
- plt_search_doc = MenuPLTSearch,
- plt_show_doc = MenuPLTShow,
- file_save_log = MenuFileSaveLog,
- file_save_warn = MenuFileSaveWarn,
- warnings = Warnings},
-
- %% --------- Init --------------
- gs:config(TopWin, [{map, true}]),
- gs:config(Packer, WH),
- {ok, CWD} = file:get_cwd(),
-
- InitPlt =
- case InitPltFiles of
- [] -> dialyzer_plt:new();
- _ ->
- Plts = [dialyzer_plt:from_file(F) || F <- InitPltFiles],
- dialyzer_plt:merge_plts_or_report_conflicts(InitPltFiles, Plts)
- end,
-
- State = #gui_state{add_all = AddAll,
- add_file = AddFile,
- add_rec = AddRec,
- chosen_box = ChosenBox,
- clear_chosen = ClearChosen,
- clear_log = ClearLog,
- clear_warn = ClearWarn,
- del_file = DelFile,
- doc_plt = dialyzer_plt:new(),
- dir_entry = DirEntry,
- file_box = File,
- file_wd = CWD,
- gs = GS,
- init_plt = InitPlt,
- log = Log,
- menu = Menu,
- mode = Mode,
- options = DialyzerOptions,
- packer = Packer,
- run = Run,
- stop = Stop,
- top = TopWin,
- warnings_box = WarningsBox},
- NewState = change_dir_or_add_file(State, "."),
- gui_loop(NewState).
-
-%% ----------------------------------------------------------------
-%%
-%% Main GUI Loop
-%%
-
--spec gui_loop(#gui_state{}) -> ?RET_NOTHING_SUSPICIOUS.
-
-gui_loop(#gui_state{add_all = AddAll, add_file = AddFile, add_rec = AddRec,
- backend_pid = BackendPid, chosen_box = ChosenBox,
- clear_chosen = ClearChosen, clear_log = ClearLog,
- clear_warn = ClearWarn, del_file = DelFile,
- dir_entry = DirEntry, file_box = File, log = Log,
- menu = Menu, packer = Packer, run = Run, stop = Stop,
- top = TopWin, warnings_box = Warn} = State) ->
- %% --- Menu ---
- Quit = Menu#menu.file_quit,
- Manual = Menu#menu.help_manual,
- Warnings = Menu#menu.help_warnings,
- About = Menu#menu.help_about,
- SaveLog = Menu#menu.file_save_log,
- SaveWarn = Menu#menu.file_save_warn,
- SearchPlt = Menu#menu.plt_search_doc,
- ShowPlt = Menu#menu.plt_show_doc,
- Macros = Menu#menu.opts_macros,
- Includes = Menu#menu.opts_includes,
-
- receive
- {gs, TopWin, configure, _Data, [W, H|_]} ->
- gs:config(Packer, [{width, W}, {height, H}]),
- gui_loop(State);
- {gs, TopWin, destroy, _Data, _Args} ->
- ?RET_NOTHING_SUSPICIOUS;
- {gs, File, doubleclick, _, [_Id, Text|_]} ->
- NewState = change_dir_or_add_file(State, Text),
- gui_loop(NewState);
- {gs, DirEntry, keypress, _, ['Return'|_]} ->
- gs:config(TopWin, [{setfocus, true}]),
- NewState = change_dir_absolute(State, gs:read(DirEntry, text)),
- gui_loop(NewState);
- {gs, DirEntry, keypress, _, _} ->
- gui_loop(State);
- %% ----- Buttons -----
- {gs, AddFile, click, _, _} ->
- handle_add_files(State),
- gui_loop(State);
- {gs, AddAll, click, _, _} ->
- handle_add_all_click(State),
- gui_loop(State);
- {gs, AddRec, click, _, _} ->
- handle_add_rec_click(State),
- gui_loop(State);
- {gs, DelFile, click, _, _} ->
- handle_file_delete(State),
- gui_loop(State);
- {gs, ClearChosen, click, _, _} ->
- gs:config(ChosenBox, [clear]),
- gui_loop(State);
- {gs, ClearLog, click, _, _} ->
- Log = State#gui_state.log,
- gs:config(Log, [{enable, true}]),
- gs:config(Log, [clear]),
- gs:config(Log, [{enable, false}]),
- gui_loop(State);
- {gs, ClearWarn, click, _, _} ->
- Warn = State#gui_state.warnings_box,
- gs:config(Warn, [{enable, true}]),
- gs:config(Warn, [clear]),
- gs:config(Warn, [{enable, false}]),
- gui_loop(State);
- {gs, Run, click, _, _} ->
- NewState = start_analysis(State),
- gui_loop(NewState);
- {gs, Stop, click, _, _} ->
- config_gui_stop(State),
- BackendPid ! {self(), stop},
- update_editor(Log, "\n***** Analysis stopped ****\n"),
- gui_loop(State);
- %% ----- Menu -----
- {gs, Quit, click, _, _} ->
- case maybe_quit(State) of
- true -> ?RET_NOTHING_SUSPICIOUS;
- false -> gui_loop(State)
- end;
- {gs, Manual, click, _, _} ->
- spawn_link(fun() -> manual(State) end),
- gui_loop(State);
- {gs, Warnings, click, _, _} ->
- spawn_link(fun() -> warnings(State) end),
- gui_loop(State);
- {gs, About, click, _, _} ->
- spawn_link(fun() -> about(State) end),
- gui_loop(State);
- {gs, SaveLog, click, _, _} ->
- save_log(State),
- gui_loop(State);
- {gs, SaveWarn, click, _, _} ->
- save_warn(State),
- gui_loop(State);
- {gs, SearchPlt, click, _, _} ->
- spawn_link(fun() -> search_doc_plt(State) end),
- gui_loop(State);
- {gs, ShowPlt, click, _, _} ->
- spawn_link(fun() -> show_doc_plt(State) end),
- gui_loop(State);
- {gs, Macros, click, _, _} ->
- Self = self(),
- spawn_link(fun() -> macro_dialog(State, Self) end),
- gui_loop(State);
- {gs, Includes, click, _, _} ->
- Self = self(),
- spawn_link(fun() -> include_dialog(State, Self) end),
- gui_loop(State);
- {new_options, NewOptions} ->
- NewState = State#gui_state{options = NewOptions},
- gui_loop(NewState);
- %% ----- Analysis -----
- {BackendPid, ext_calls, ExtCalls} ->
- Msg = io_lib:format("The following functions are called "
- "but type information about them is not available.\n"
- "The analysis might get more precise by including "
- "the modules containing these functions:\n\n\t~p\n",
- [ExtCalls]),
- free_editor(State, "Analysis done", Msg),
- gui_loop(State);
- {BackendPid, ext_types, ExtTypes} ->
- Map = fun({M,F,A}) -> io_lib:format("~p:~p/~p",[M,F,A]) end,
- ExtTypeString = string:join(lists:map(Map, ExtTypes), "\n"),
- Msg = io_lib:format("The following remote types are being used "
- "but information about them is not available.\n"
- "The analysis might get more precise by including "
- "the modules containing these types and making sure "
- "that they are exported:\n~s\n", [ExtTypeString]),
- free_editor(State, "Analysis done", Msg),
- gui_loop(State);
- {BackendPid, log, LogMsg} ->
- update_editor(Log, LogMsg),
- gui_loop(State);
- {BackendPid, warnings, Warns} ->
- SortedWarns = lists:keysort(2, Warns), %% Sort on file/line
- WarnList = [dialyzer:format_warning(W) || W <- SortedWarns],
- update_editor(Warn, lists:flatten(WarnList)),
- gui_loop(State);
- {BackendPid, done, _NewPlt, NewDocPlt} ->
- message(State, "Analysis done"),
- config_gui_stop(State),
- gui_loop(State#gui_state{doc_plt = NewDocPlt});
- {'EXIT', BackendPid, {error, Reason}} ->
- free_editor(State, ?DIALYZER_ERROR_TITLE, Reason),
- config_gui_stop(State),
- gui_loop(State);
- {'EXIT', BackendPid, Reason} when Reason =/= 'normal' ->
- free_editor(State, ?DIALYZER_ERROR_TITLE, io_lib:format("~p", [Reason])),
- config_gui_stop(State),
- gui_loop(State);
- _Other ->
- %% io:format("Received ~p\n", [Other]),
- gui_loop(State)
- end.
-
-%% ----------------------------------------------------------------
-%%
-%% Main window actions
-%%
-
-%% ---- Adding and deleting files ----
-
-handle_add_all_click(#gui_state{chosen_box = ChosenBox, file_box = File,
- file_wd = FWD, mode = Mode}) ->
- case gs:read(File, items) of
- [] ->
- ok;
- Add0 ->
- gs:config(File, [{selection, clear}]),
- Add1 = ordsets:subtract(Add0, [".."]),
- Add = ordsets:from_list([filename:join(FWD, X) || X <- Add1]),
- case gs:read(Mode#mode.start_byte_code, select) of
- true ->
- add_files(filter_mods(Add, ".beam"), ChosenBox, byte_code);
- false ->
- add_files(filter_mods(Add, ".erl"), ChosenBox, src_code)
- end
- end.
-
-all_subdirs(Dirs) ->
- all_subdirs(Dirs, []).
-
-all_subdirs([Dir|T], Acc) ->
- {ok, Files} = file:list_dir(Dir),
- SubDirs = lists:zf(fun(F) ->
- SubDir = filename:join(Dir, F),
- case filelib:is_dir(SubDir) of
- true -> {true, SubDir};
- false -> false
- end
- end, Files),
- NewAcc = ordsets:union(ordsets:from_list(SubDirs), Acc),
- all_subdirs(T ++ SubDirs, NewAcc);
-all_subdirs([], Acc) ->
- Acc.
-
-handle_add_rec_click(#gui_state{chosen_box = ChosenBox, file_box = File,
- file_wd = FWD, mode = Mode}) ->
- case gs:read(File, selection) of
- [] ->
- ok;
- List ->
- gs:config(File, [{selection, clear}]),
- Dirs1 = [gs:read(File, {get, X}) || X <- List],
- Dirs2 = ordsets:from_list([filename:join(FWD, X) || X <- Dirs1]),
- Dirs3 = ordsets:filter(fun(X) -> filelib:is_dir(X) end, Dirs2),
- TargetDirs = ordsets:union(Dirs3, all_subdirs(Dirs3)),
- {Code, Ext} = case gs:read(Mode#mode.start_byte_code, select) of
- true -> {byte_code, ".beam"};
- false -> {src_code, ".erl"}
- end,
- add_files(filter_mods(TargetDirs, Ext), ChosenBox, Code)
- end.
-
-handle_add_files(#gui_state{chosen_box = ChosenBox, file_box = File,
- file_wd = FWD, mode = Mode}) ->
- case gs:read(File, selection) of
- [] ->
- ok;
- List ->
- gs:config(File, [{selection, clear}]),
- Add0 = [gs:read(File, {get, X}) || X <- List],
- Add = ordsets:from_list([filename:join(FWD, X) || X <- Add0]),
- case gs:read(Mode#mode.start_byte_code, select) of
- true ->
- add_files(filter_mods(Add, ".beam"), ChosenBox, byte_code);
- false ->
- add_files(filter_mods(Add, ".erl"), ChosenBox, src_code)
- end
- end.
-
-filter_mods(Mods, Extension) ->
- Fun = fun(X) ->
- filename:extension(X) =:= Extension
- orelse
- (filelib:is_dir(X) andalso
- contains_files(X, Extension))
- end,
- ordsets:filter(Fun, Mods).
-
-contains_files(Dir, Extension) ->
- {ok, Files} = file:list_dir(Dir),
- lists:any(fun(X) -> filename:extension(X) =:= Extension end, Files).
-
-add_files(Add, ChosenBox, Type) ->
- Set = gs:read(ChosenBox, items),
- Set1 =
- case Type of
- byte_code -> filter_mods(Set, ".beam");
- src_code -> filter_mods(Set, ".erl")
- end,
- Files = ordsets:union(Add, Set1),
- gs:config(ChosenBox, [{items, Files}]),
- ok.
-
-handle_file_delete(#gui_state{chosen_box = ChosenBox}) ->
- List = gs:read(ChosenBox, selection),
- lists:foreach(fun(X) -> gs:config(ChosenBox, [{del, X}]) end,
- lists:reverse(lists:sort(List))).
-
-%% ---- Other ----
-
-change_dir_or_add_file(#gui_state{file_wd = FWD, mode = Mode, dir_entry = Dir,
- chosen_box = CBox, file_box = File} = State,
- Text) ->
- NewWDorFile =
- case Text of
- ".." -> filename:join(butlast(filename:split(FWD)));
- "." -> FWD;
- _ -> filename:join(FWD, Text)
- end,
- case filelib:is_dir(NewWDorFile) of
- true ->
- gs:config(Dir, [{text, NewWDorFile}]),
- {ok, List} = file:list_dir(NewWDorFile),
- gs:config(File, [{items, [".."|lists:sort(List)]}]),
- State#gui_state{file_wd = NewWDorFile};
- false ->
- case gs:read(Mode#mode.start_byte_code, select) of
- true ->
- case filter_mods([NewWDorFile], ".beam") of
- [] -> ok;
- RealFiles -> add_files(RealFiles, CBox, byte_code)
- end;
- false ->
- case filter_mods([NewWDorFile], ".erl") of
- [] -> ok;
- RealFiles -> add_files(RealFiles, CBox, src_code)
- end
- end,
- State
- end.
-
-butlast([H1, H2 | T]) ->
- [H1 | butlast([H2|T])];
-butlast([_]) ->
- [];
-butlast([]) ->
- ["/"].
-
-change_dir_absolute(#gui_state{file_wd = FWD, dir_entry = Dir,
- file_box = File} = State,
- Text) ->
- case filelib:is_dir(Text) of
- true ->
- WD = filename:join(FWD, Text),
- gs:config(Dir, [{text, WD}]),
- {ok, List} = file:list_dir(WD),
- gs:config(File, [{items, [".."|lists:sort(List)]}]),
- State#gui_state{file_wd = WD};
- false ->
- State
- end.
-
-init_warnings([{Tag, GSItem}|Left], LegalWarnings) ->
- Select = ordsets:is_element(Tag, LegalWarnings),
- gs:config(GSItem, [{select, Select}]),
- init_warnings(Left, LegalWarnings);
-init_warnings([], _LegalWarnings) ->
- ok.
-
-config_gui_start(State) ->
- Enabled = [{enable, true}],
- Disabled = [{enable, false}],
- gs:config(State#gui_state.stop, Enabled),
- gs:config(State#gui_state.run, Disabled),
- gs:config(State#gui_state.del_file, Disabled),
- gs:config(State#gui_state.clear_chosen, Disabled),
- gs:config(State#gui_state.add_file, Disabled),
- gs:config(State#gui_state.add_all, Disabled),
- gs:config(State#gui_state.add_rec, Disabled),
- gs:config(State#gui_state.clear_warn, Disabled),
- gs:config(State#gui_state.clear_log, Disabled),
- Menu = State#gui_state.menu,
- gs:config(Menu#menu.file_save_warn, Disabled),
- gs:config(Menu#menu.file_save_log, Disabled),
- gs:config(Menu#menu.opts_macros, Disabled),
- gs:config(Menu#menu.opts_includes, Disabled),
- gs:config(Menu#menu.plt_empty, Disabled),
- gs:config(Menu#menu.plt_search_doc, Disabled),
- gs:config(Menu#menu.plt_show_doc, Disabled),
- Mode = State#gui_state.mode,
- gs:config(Mode#mode.start_byte_code, Disabled),
- gs:config(Mode#mode.start_src_code, Disabled).
-
-config_gui_stop(State) ->
- Enabled = [{enable, true}],
- Disabled = [{enable, false}],
- gs:config(State#gui_state.stop, Disabled),
- gs:config(State#gui_state.run, Enabled),
- gs:config(State#gui_state.del_file, Enabled),
- gs:config(State#gui_state.clear_chosen, Enabled),
- gs:config(State#gui_state.add_file, Enabled),
- gs:config(State#gui_state.add_all, Enabled),
- gs:config(State#gui_state.add_rec, Enabled),
- gs:config(State#gui_state.clear_warn, Enabled),
- gs:config(State#gui_state.clear_log, Enabled),
- Menu = State#gui_state.menu,
- gs:config(Menu#menu.file_save_warn, Enabled),
- gs:config(Menu#menu.file_save_log, Enabled),
- gs:config(Menu#menu.opts_macros, Enabled),
- gs:config(Menu#menu.opts_includes, Enabled),
- gs:config(Menu#menu.plt_empty, Enabled),
- gs:config(Menu#menu.plt_search_doc, Enabled),
- gs:config(Menu#menu.plt_show_doc, Enabled),
- Mode = State#gui_state.mode,
- gs:config(Mode#mode.start_byte_code, Enabled),
- gs:config(Mode#mode.start_src_code, Enabled).
-
-%% ----------------------------------------------------------------
-%%
-%% Messages
-%%
-
-message(State, Message) ->
- output_sms(State, ?DIALYZER_MESSAGE_TITLE, Message).
-
-error_sms(State, Message) ->
- output_sms(State, ?DIALYZER_ERROR_TITLE, Message).
-
-%%
-%% This function is to be used *only* for small messages because lines
-%% are not wrapped and the created window has a limited area for text.
-%% For bigger messages, the function free_editor/3 is to be used.
-%%
-output_sms(#gui_state{gs = GS, top = TopWin}, Title, Message) ->
- %% Lines = string:words(Message, $\n),
- %% io:format("The message has ~w lines\n", [Lines]),
- WH = [{width, 400}, {height, 100}],
- MessageWin = gs:window(GS, [{title, Title},
- {default, button, {font, {helvetica, bold, 12}}}
- |WH]),
- MessagePacker = gs:frame(MessageWin, [{packer_y, [{fixed, 75}, {fixed, 25}]},
- {packer_x, [{fixed, 175},{fixed, 50},
- {fixed, 175}]}]),
- gs:label(MessagePacker, [{pack_x, {1, 3}}, {pack_y, 1},
- {label, {text, Message}}]),
- OK = gs:button(MessagePacker, [{label, {text, "OK"}}, {pack_xy, {2, 2}}]),
- gs:config(MessageWin, [{map, true}]),
- gs:config(MessagePacker, WH),
- message_loop(OK, MessageWin, TopWin).
-
-message_loop(Ok, Win, TopWin) ->
- receive
- {gs, Ok, click, _, _} ->
- gs:destroy(Win);
- {gs, Win, destroy, _, _} ->
- ok;
- {gs, TopWin, destroy, _, _} ->
- exit(normal);
- {gs, _, _, _, _} ->
- message_loop(Ok, Win, TopWin)
- end.
-
-dialog(#gui_state{gs = GS, top = TopWin}, Message, OkLabel, CancelLabel) ->
- WH = [{width, 400}, {height, 100}],
- WHButton = [{width, 70}, {height, 20}],
- DialogWin = gs:window(GS, [{title, "Dialyzer Message"},
- {default, button, {font, {helvetica, bold, 12}}}
- |WH]),
- DialogPacker = gs:frame(DialogWin, [{packer_y, [{fixed, 75}, {fixed, 25}]},
- {packer_x, [{fixed, 150}, {fixed, 50},
- {fixed, 50}, {fixed, 150}]}]),
- gs:label(DialogPacker, [{pack_x, {1,4}}, {pack_y, 1},
- {label, {text, Message}}]),
- Ok = gs:button(DialogPacker, [{label, {text, OkLabel}},
- {pack_xy, {2,2}}|WHButton]),
- Cancel = gs:button(DialogPacker, [{label, {text, CancelLabel}},
- {pack_xy, {3,2}}|WHButton]),
- gs:config(DialogWin, [{map, true}]),
- gs:config(DialogPacker, WH),
- dialog_loop(Ok, Cancel, DialogWin, TopWin).
-
-dialog_loop(Ok, Cancel, Win, TopWin) ->
- receive
- {gs, Ok, click, _, _} ->
- gs:destroy(Win),
- true;
- {gs, Cancel, click, _, _} ->
- gs:destroy(Win),
- false;
- {gs, Win, destroy, _, _} ->
- false;
- {gs, TopWin, destroy, _, _} ->
- exit(normal);
- {gs, _, _, _, _} ->
- dialog_loop(Ok, Cancel, Win, TopWin)
- end.
-
-maybe_quit(#gui_state{top = TopWin} = State) ->
- case dialog(State, "Do you really want to quit?", "Yes", "No") of
- true ->
- flush(),
- gs:destroy(TopWin),
- gs:stop(),
- true;
- false ->
- false
- end.
-
-
-%% ----------------------------------------------------------------
-%%
-%% Menu actions
-%%
-
-%% ---- Help Menu ----
-
-manual(State) ->
- help_menu_common(State, "Dialyzer Manual", 500, "manual.txt", white).
-
-warnings(State) ->
- help_menu_common(State, "Dialyzer Warnings", 500, "warnings.txt", white).
-
-about(State) ->
- help_menu_common(State, "About Dialyzer", 160, "about.txt", yellow).
-
-help_menu_common(#gui_state{gs = GS, top = TopWin} = State,
- Title, Height, TxtFileName, BackGroundColor) ->
- WH = [{width, 600}, {height, Height}],
- Win = gs:window(GS, [{title, Title}, {configure, true},
- {default, editor, {bg, BackGroundColor}} | WH]),
- EmptySpace = {stretch, 1},
- Frame = gs:frame(Win, [{packer_x, [EmptySpace, {fixed, 60}, EmptySpace]},
- {packer_y, [EmptySpace, {fixed, 30}]} | WH]),
- Editor = gs:editor(Frame, [{pack_x, {1, 3}}, {pack_y, 1},
- {font, {courier, 12}}, {vscroll, right},
- {wrap, word}]),
- Button = gs:button(Frame, [{label, {text, "Ok"}}, {pack_xy, {2, 2}}]),
- gs:config(Win, [{map, true}]),
- gs:config(Frame, WH),
- AboutFile = filename:join([code:lib_dir(dialyzer), "doc", TxtFileName]),
- case gs:config(Editor, {load, AboutFile}) of
- {error, Reason} ->
- gs:destroy(Win),
- error_sms(State,
- io_lib:format("Could not find doc/~s file!\n\n ~p",
- [TxtFileName, Reason]));
- ok ->
- gs:config(Editor, [{enable, false}]),
- show_info_loop(TopWin, Win, Frame, Button)
- end.
-
-%% ---- File Menu ----
-
-save_log(#gui_state{file_wd = CWD, log = Log} = State) ->
- {Win, Entry, OkButton, CancelButton} = file_box(State, "Save Log", CWD),
- save_loop(State, OkButton, CancelButton, Entry, Win, Log).
-
-save_warn(#gui_state{file_wd = CWD, warnings_box = WBox} = State) ->
- {Win, Entry, OkButton, CancelButton} = file_box(State, "Save Warnings", CWD),
- save_loop(State, OkButton, CancelButton, Entry, Win, WBox).
-
-file_box(#gui_state{gs = GS}, Title, Default) ->
- WH = [{width, 400}, {height, 75}],
- Win = gs:window(GS, [{title, Title}|WH]),
- Fix25 = {fixed, 27}, Fix75 = {fixed, 75},
- WinPacker = gs:frame(Win, [{packer_y, [Fix25, Fix25, Fix25]},
- {packer_x, [Fix75, Fix75, Fix75, {fixed, 175}]}]),
- gs:label(WinPacker, [{pack_xy, {1,2}}, {label, {text, "Enter file:"}}]),
- Entry = gs:entry(WinPacker, [{pack_x, {2,4}}, {pack_y, 2}, {keypress, true}]),
- OkButton = gs:button(WinPacker, [{label, {text, "Ok"}}, {pack_xy, {2,3}}]),
- CancelButton = gs:button(WinPacker, [{label, {text, "Cancel"}},
- {pack_xy, {3,3}}]),
- gs:config(Entry, [{text, Default}]),
- gs:config(Win, [{map, true}]),
- gs:config(WinPacker, WH),
- {Win, Entry, OkButton, CancelButton}.
-
-save_loop(#gui_state{top = TopWin} = State,
- OkButton, CancelButton, Entry, Save, Editor) ->
- receive
- {gs, OkButton, click, _, _} ->
- File = gs:read(Entry, text),
- case gs:config(Editor, [{save, File}]) of
- {error, _} ->
- error_sms(State, "Could not write to file:\n" ++ File),
- save_loop(State, OkButton, CancelButton, Entry, Save, Editor);
- _ ->
- gs:destroy(Save)
- end;
- {gs, Entry, keypress, _, ['Return'|_]} ->
- File = gs:read(Entry, text),
- case gs:config(Editor, [{save, File}]) of
- {error, _} ->
- error_sms(State, "Could not write to file:\n" ++ File),
- save_loop(State, OkButton, CancelButton, Entry, Save, Editor);
- _ ->
- gs:destroy(Save)
- end;
- {gs, Entry, keypress, _, _} ->
- save_loop(State, OkButton, CancelButton, Entry, Save, Editor);
- {gs, CancelButton, click, _, _} ->
- gs:destroy(Save);
- {gs, TopWin, destroy, _, _} ->
- exit(normal);
- {gs, Save, destroy, _, _} ->
- ok;
- {gs, _, _, _, _} ->
- save_loop(State, OkButton, CancelButton, Entry, Save, Editor)
- end.
-
-%% ---- Plt Menu ----
-
-search_doc_plt(#gui_state{gs = GS, top = TopWin} = State) ->
- WH = [{width, 400}, {height, 100}],
- WHB = [{width, 120}, {height, 30}],
- Title = io_lib:format("Search the PLT", []),
- Win = gs:window(GS, [{title, Title}, {configure, true},
- {default, editor, {bg, white}} | WH]),
- EmptySpace = {stretch, 1},
- Frame = gs:frame(Win, [{packer_x, [EmptySpace, EmptySpace, EmptySpace]},
- {packer_y, [{fixed, 30}, {fixed, 30},
- EmptySpace, {fixed, 30}]} | WH]),
- gs:label(Frame, [{pack_xy, {1,1}}, {label, {text, "Module"}}]),
- ModEntry = gs:entry(Frame, [{pack_xy, {1,2}}]),
- gs:label(Frame, [{pack_xy, {2,1}}, {label, {text, "Function"}}]),
- FunEntry = gs:entry(Frame, [{pack_xy, {2,2}}]),
- gs:label(Frame, [{pack_xy, {3,1}}, {label, {text, "Arity"}}]),
- ArityEntry = gs:entry(Frame, [{pack_xy, {3,2}}]),
- ButtonPacker = gs:frame(Frame, [{pack_xy, {2,4}},
- {packer_x, [{fixed, 60}, {fixed, 60}]},
- {packer_y, {fixed, 30}}]),
- SearchButton = gs:button(ButtonPacker, [{label, {text, "Search"}},
- {pack_xy, {1,1}}]),
- CancelButton = gs:button(ButtonPacker, [{label, {text, "Cancel"}},
- {pack_xy, {2,1}}]),
- gs:config(Win, [{map, true}]),
- gs:config(Frame, WH),
- gs:config(ButtonPacker, WHB),
- search_doc_plt_loop(State, CancelButton, SearchButton, ModEntry,
- FunEntry, ArityEntry, Win, TopWin).
-
-search_doc_plt_loop(State, CancelButton, SearchButton, ModEntry,
- FunEntry, ArityEntry, Win, TopWin) ->
- receive
- {gs, CancelButton, click, _, _} ->
- gs:destroy(Win),
- ok;
- {gs, TopWin, destroy, _, _} ->
- exit(normal);
- {gs, SearchButton, click, _, _} ->
- M = format_search(gs:read(ModEntry, text)),
- F = format_search(gs:read(FunEntry, text)),
- A = format_search(gs:read(ArityEntry, text)),
- case dialyzer_plt:get_specs(State#gui_state.doc_plt, M, F, A) of
- "" ->
- error_sms(State, "No such function"),
- search_doc_plt_loop(State, CancelButton, SearchButton, ModEntry,
- FunEntry, ArityEntry, Win, TopWin);
- NonEmptyString ->
- gs:destroy(Win),
- free_editor(State, "Content of PLT", NonEmptyString)
- end
- end.
-
-format_search([]) ->
- '_';
-format_search(String) ->
- try list_to_integer(String)
- catch error:_ -> list_to_atom(String)
- end.
-
-show_doc_plt(#gui_state{doc_plt = DocPLT} = State) ->
- case dialyzer_plt:get_specs(DocPLT) of
- "" -> error_sms(State, "No analysis has been made yet!\n");
- NonEmptyString -> free_editor(State, "Content of PLT", NonEmptyString)
- end.
-
-free_editor(#gui_state{gs = GS, top = TopWin}, Title, Contents0) ->
- Contents = lists:flatten(Contents0),
- Tokens = string:tokens(Contents, "\n"),
- NofLines = length(Tokens),
- LongestLine = lists:max([length(X) || X <- Tokens]),
- Height0 = NofLines * 25 + 80,
- Height = if Height0 > 500 -> 500; true -> Height0 end,
- Width0 = LongestLine * 7 + 60,
- Width = if Width0 > 800 -> 800; true -> Width0 end,
- WH = [{width, Width}, {height, Height}],
- Win = gs:window(GS, [{title, Title}, {configure, true},
- {default, editor, {bg, white}} | WH]),
- EmptySpace = {stretch, 1},
- Frame = gs:frame(Win, [{packer_x, [EmptySpace, {fixed, 60}, EmptySpace]},
- {packer_y, [EmptySpace, {fixed, 30}]}
- | WH]),
- Editor = gs:editor(Frame, [{pack_x, {1,3}}, {pack_y, 1},
- {font, {courier, 12}}, {vscroll, right},
- {wrap, word}, {enable, true}]),
- Button = gs:button(Frame, [{label, {text, "Ok"}}, {pack_xy, {2,2}}]),
- gs:config(Editor, [{insert, {insert, Contents}}]),
- gs:config(Editor, [{enable, false}]),
- gs:config(Win, [{map, true}]),
- gs:config(Frame, WH),
- show_info_loop(TopWin, Win, Frame, Button).
-
-%% ---- Common ----
-
-show_info_loop(TopWin, Win, Frame, Button) ->
- receive
- {gs, Button, click, _, _} ->
- gs:destroy(Win);
- {gs, TopWin, destroy, _, _} ->
- exit(normal);
- {gs, Win, destroy, _, _} ->
- ok;
- {gs, Win, configure, _Data, [W, H|_]} ->
- gs:config(Frame, [{width, W}, {height, H}]),
- show_info_loop(TopWin, Win, Frame, Button)
- end.
-
-include_dialog(#gui_state{gs = GS, options = Options}, Parent) ->
- WH = [{width, 300}, {height, 400}],
- Title = io_lib:format("Include Directories", []),
- Win = gs:window(GS, [{title, Title}, {configure, true},
- {default, entry, {bg, white}}| WH]),
- EmptySpace = {stretch, 1},
- Frame = gs:frame(Win, [{packer_x, [EmptySpace]},
- {packer_y, [{fixed, 30}, {fixed, 30}, {fixed, 30},
- EmptySpace, {fixed, 30}, {fixed, 30}]}
- | WH]),
- gs:label(Frame, [{pack_xy, {1,1}}, {label, {text, "Directory"}}]),
- DirEntry = gs:entry(Frame, [{pack_xy, {1,2}}]),
- ButtonPacker1 = gs:frame(Frame, [{pack_xy, {1,3}},
- {packer_x, [{fixed, 70}, {fixed, 70},
- EmptySpace]},
- {packer_y, {fixed, 30}}]),
- AddButton = gs:button(ButtonPacker1, [{label, {text, "Add"}},
- {pack_xy, {1,1}}]),
- Dirs = [io_lib:format("~s", [X]) || X <- Options#options.include_dirs],
- DirBox = gs:listbox(Frame, [{pack_xy, {1,4}}, {vscroll, right},
- {bg, white}, {configure, true},
- {selectmode, multiple}, {items, Dirs}]),
- ButtonPacker2 = gs:frame(Frame, [{pack_xy, {1,5}},
- {packer_x, [{fixed, 60}, {fixed, 70},
- EmptySpace]},
- {packer_y, {fixed, 30}}]),
- DeleteButton = gs:button(ButtonPacker2, [{label, {text, "Delete"}},
- {pack_xy, {1,1}}]),
- DeleteAllButton = gs:button(ButtonPacker2, [{label, {text, "Delete All"}},
- {pack_xy, {2,1}}]),
- ButtonPacker3 = gs:frame(Frame, [{pack_xy, {1,6}},
- {packer_x, [EmptySpace,
- {fixed, 60}, {fixed, 60}]},
- {packer_y, {fixed, 30}}]),
- OkButton = gs:button(ButtonPacker3, [{label, {text, "Ok"}},
- {pack_xy, {2,1}}]),
- CancelButton = gs:button(ButtonPacker3, [{label, {text, "Cancel"}},
- {pack_xy, {3,1}}]),
- gs:config(Win, [{map, true}]),
- gs:config(Frame, WH),
- include_loop(Parent, Options, Frame, AddButton, DeleteAllButton, DeleteButton,
- DirBox, DirEntry, OkButton, CancelButton, Win).
-
-include_loop(Parent, Options, Frame, AddButton, DeleteAllButton, DeleteButton,
- DirBox, DirEntry, OkButton, CancelButton, Win) ->
- receive
- {gs, CancelButton, click, _, _} ->
- gs:destroy(Win),
- ok;
- {gs, OkButton, click, _, _} ->
- gs:destroy(Win),
- Parent ! {new_options, Options},
- ok;
- {gs, Win, configure, _Data, [W, H|_]} ->
- gs:config(Frame, [{width, W}, {height, H}]),
- include_loop(Parent, Options, Frame, AddButton, DeleteAllButton,
- DeleteButton, DirBox, DirEntry, OkButton, CancelButton, Win);
- {gs, AddButton, click, _, _} ->
- Dirs = Options#options.include_dirs,
- NewDirs =
- case gs:read(DirEntry, text) of
- [] -> Dirs;
- Add -> [Add|Dirs]
- end,
- NewOptions = Options#options{include_dirs = NewDirs},
- gs:config(DirBox, [{items, NewDirs}]),
- include_loop(Parent, NewOptions, Frame, AddButton, DeleteAllButton,
- DeleteButton, DirBox, DirEntry, OkButton, CancelButton, Win);
- {gs, DeleteAllButton, click, _, _} ->
- gs:config(DirBox, [clear]),
- NewOptions = Options#options{include_dirs = []},
- include_loop(Parent, NewOptions, Frame, AddButton, DeleteAllButton,
- DeleteButton, DirBox, DirEntry, OkButton, CancelButton, Win);
- {gs, DeleteButton, click, _, _} ->
- NewOptions =
- case gs:read(DirBox, selection) of
- [] ->
- Options;
- List ->
- lists:foreach(fun(X) -> gs:config(DirBox, [{del, X}]) end,
- lists:sort(List)),
- NewDirs = gs:read(DirBox, items),
- Options#options{include_dirs = NewDirs}
- end,
- include_loop(Parent, NewOptions, Frame, AddButton, DeleteAllButton,
- DeleteButton, DirBox, DirEntry, OkButton, CancelButton, Win);
- {gs, Win, destroy, _, _} ->
- ok
- end.
-
-macro_dialog(#gui_state{gs = GS, options = Options}, Parent) ->
- WH = [{width, 300}, {height, 400}],
- Title = io_lib:format("Macro Definitions", []),
- Win = gs:window(GS, [{title, Title}, {configure, true},
- {default, entry, {bg, white}}| WH]),
- EmptySpace = {stretch, 1},
- Frame = gs:frame(Win, [{packer_x, [EmptySpace, EmptySpace]},
- {packer_y, [{fixed, 30}, {fixed, 30}, {fixed, 30},
- EmptySpace, {fixed, 30}, {fixed, 30}]}
- | WH]),
- gs:label(Frame, [{pack_xy, {1,1}}, {label, {text, "Macro"}}]),
- MacroEntry = gs:entry(Frame, [{pack_xy, {1,2}}]),
- gs:label(Frame, [{pack_xy, {2,1}}, {label, {text, "Term"}}]),
- TermEntry = gs:entry(Frame, [{pack_xy, {2,2}}]),
- ButtonPacker1 = gs:frame(Frame, [{pack_x, {1,2}}, {pack_y, 3},
- {packer_x, [{fixed, 70},{fixed, 70},
- EmptySpace]},
- {packer_y, {fixed, 30}}]),
- AddButton = gs:button(ButtonPacker1, [{label, {text, "Add"}},
- {pack_xy, {1,1}}]),
- Macros = [io_lib:format("~p = ~p",[X,Y]) || {X,Y} <- Options#options.defines],
- MacroBox = gs:listbox(Frame, [{pack_x, {1,2}}, {pack_y, 4}, {vscroll, right},
- {bg, white}, {configure, true},
- {selectmode, multiple},
- {items, Macros}]),
- ButtonPacker2 = gs:frame(Frame, [{pack_x, {1,2}}, {pack_y, 5},
- {packer_x, [{fixed, 60}, {fixed, 70},
- EmptySpace]},
- {packer_y, {fixed, 30}}]),
- DeleteButton = gs:button(ButtonPacker2, [{label, {text, "Delete"}},
- {pack_xy, {1,1}}]),
- DeleteAllButton = gs:button(ButtonPacker2, [{label, {text, "Delete All"}},
- {pack_xy, {2,1}}]),
- ButtonPacker3 = gs:frame(Frame, [{pack_x, {1,2}}, {pack_y, 6},
- {packer_x, [EmptySpace,
- {fixed, 60}, {fixed, 60}]},
- {packer_y, {fixed, 30}}]),
- OkButton = gs:button(ButtonPacker3, [{label, {text, "Ok"}},
- {pack_xy, {2,1}}]),
- CancelButton = gs:button(ButtonPacker3, [{label, {text, "Cancel"}},
- {pack_xy, {3,1}}]),
- gs:config(Win, [{map, true}]),
- gs:config(Frame, WH),
- macro_loop(Parent, Options, Frame, AddButton, DeleteAllButton, DeleteButton,
- MacroBox, MacroEntry, TermEntry, OkButton, CancelButton, Win).
-
-macro_loop(Parent, Options, Frame, AddButton, DeleteAllButton, DeleteButton,
- MacroBox, MacroEntry, TermEntry, OkButton, CancelButton, Win) ->
- receive
- {gs, CancelButton, click, _, _} ->
- gs:destroy(Win),
- ok;
- {gs, OkButton, click, _, _} ->
- gs:destroy(Win),
- Parent ! {new_options, Options},
- ok;
- {gs, Win, configure, _Data, [W, H|_]} ->
- gs:config(Frame, [{width, W}, {height, H}]),
- macro_loop(Parent, Options, Frame, AddButton, DeleteAllButton,
- DeleteButton, MacroBox, MacroEntry, TermEntry, OkButton,
- CancelButton, Win);
- {gs, AddButton, click, _, _} ->
- Defines = Options#options.defines,
- NewDefines =
- case gs:read(MacroEntry, text) of
- "" -> Defines;
- Macro ->
- Empty = [{text, ""}],
- case gs:read(TermEntry, text) of
- "" ->
- gs:config(MacroEntry, Empty),
- orddict:store(list_to_atom(Macro), true, Defines);
- String ->
- case parse(String) of
- {ok, Term} ->
- gs:config(MacroEntry, Empty),
- gs:config(TermEntry, Empty),
- orddict:store(list_to_atom(Macro), Term, Defines);
- {error, _Reason} ->
- Defines
- end
- end
- end,
- NewOptions = Options#options{defines = NewDefines},
- NewEntries = [io_lib:format("~p = ~p", [X, Y]) || {X, Y} <- NewDefines],
- gs:config(MacroBox, [{items, NewEntries}]),
- macro_loop(Parent, NewOptions, Frame, AddButton, DeleteAllButton,
- DeleteButton, MacroBox, MacroEntry, TermEntry, OkButton,
- CancelButton, Win);
- {gs, DeleteAllButton, click, _, _} ->
- gs:config(MacroBox, [clear]),
- NewOptions = Options#options{defines = []},
- macro_loop(Parent, NewOptions, Frame, AddButton, DeleteAllButton,
- DeleteButton, MacroBox, MacroEntry, TermEntry, OkButton,
- CancelButton, Win);
- {gs, DeleteButton, click, _, _} ->
- NewOptions =
- case gs:read(MacroBox, selection) of
- [] ->
- Options;
- List ->
- gs:config(MacroBox, [{selection, clear}]),
- Fun =
- fun(X) ->
- Val = gs:read(MacroBox, {get, X}),
- [MacroName|_] = re:split(Val, " ", [{return, list}]),
- list_to_atom(MacroName)
- end,
- Delete = [Fun(X) || X <- List],
- lists:foreach(fun(X) -> gs:config(MacroBox, [{del, X}]) end,
- lists:reverse(lists:sort(List))),
- Defines = Options#options.defines,
- NewDefines = lists:foldl(fun(X, Acc) ->
- orddict:erase(X, Acc)
- end,
- Defines, Delete),
- Options#options{defines = NewDefines}
- end,
- macro_loop(Parent, NewOptions, Frame, AddButton, DeleteAllButton,
- DeleteButton, MacroBox, MacroEntry, TermEntry, OkButton,
- CancelButton, Win);
- {gs, Win, destroy, _, _} ->
- ok
- end.
-
-parse(String) ->
- case erl_scan:string(String ++ ".", 1) of
- {ok, Ts, _} ->
- case erl_parse:parse_exprs(Ts) of
- {ok, [Expr]} ->
- try erl_parse:normalise(Expr)
- catch error:Reason -> {error, Reason}
- end;
- {error, E} ->
- parse_error(E)
- end;
- {error, E, _} ->
- parse_error(E)
- end.
-
-parse_error(E) ->
- S = io_lib:fwrite("Error parsing expression: ~P.", [E,15]),
- {error, S}.
-
-%% ----------------------------------------------------------------
-%%
-%% Run the analysis
-%%
-
-start_analysis(State) ->
- Analysis = build_analysis_record(State),
- case get_anal_files(State, Analysis#analysis.start_from) of
- error ->
- Msg = "You must choose one or more files or dirs\n"
- "before starting the analysis!",
- error_sms(State, Msg),
- config_gui_stop(State),
- State;
- {ok, Files} ->
- Msg = "\n========== Starting Analysis ==========\n\n",
- update_editor(State#gui_state.log, Msg),
- NewAnalysis = Analysis#analysis{files = Files},
- run_analysis(State, NewAnalysis)
- end.
-
-build_analysis_record(#gui_state{mode = Mode, menu = Menu, options = Options,
- init_plt = InitPlt0}) ->
- StartFrom =
- case gs:read(Mode#mode.start_byte_code, select) of
- true -> byte_code;
- false -> src_code
- end,
- InitPlt =
- case gs:read(Menu#menu.plt_empty, select) of
- true -> dialyzer_plt:new();
- false -> InitPlt0
- end,
- #analysis{defines = Options#options.defines,
- include_dirs = Options#options.include_dirs,
- plt = InitPlt,
- start_from = StartFrom,
- solvers = Options#options.solvers}.
-
-get_anal_files(#gui_state{chosen_box = ChosenBox}, StartFrom) ->
- Files = gs:read(ChosenBox, items),
- FilteredMods =
- case StartFrom of
- src_code -> filter_mods(Files, ".erl");
- byte_code -> filter_mods(Files, ".beam")
- end,
- FilteredDirs = [X || X <- Files, filelib:is_dir(X)],
- case ordsets:union(FilteredMods, FilteredDirs) of
- [] -> error;
- Set -> {ok, Set}
- end.
-
-run_analysis(State, Analysis) ->
- config_gui_start(State),
- Self = self(),
- NewAnalysis = Analysis#analysis{doc_plt = dialyzer_plt:new()},
- LegalWarnings = find_legal_warnings(State),
- Fun =
- fun() ->
- dialyzer_analysis_callgraph:start(Self, LegalWarnings, NewAnalysis)
- end,
- BackendPid = spawn_link(Fun),
- State#gui_state{backend_pid = BackendPid}.
-
-find_legal_warnings(#gui_state{menu = #menu{warnings = Warnings}}) ->
- ordsets:from_list([Tag || {Tag, GSItem} <- Warnings,
- gs:read(GSItem, select) =:= true]).
-
-flush() ->
- receive
- _ -> flush()
- after
- 0 -> ok
- end.
-
-update_editor(Editor, Msg) ->
- gs:config(Editor, [{enable, true}]),
- NofRows = gs:read(Editor, size),
- gs:config(Editor, [{insertpos, 'end'}]),
- gs:config(Editor, [{insert, {insert, Msg}}]),
- NewNofRows = gs:read(Editor, size),
- ScrollPos = gs:read(Editor, vscrollpos),
- gs:config(Editor, [{vscrollpos, ScrollPos + NewNofRows - NofRows}]),
- gs:config(Editor, [{enable, false}]).
diff --git a/lib/et/src/Makefile b/lib/et/src/Makefile
index 386169fe95..377e593712 100644
--- a/lib/et/src/Makefile
+++ b/lib/et/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2000-2012. All Rights Reserved.
+# Copyright Ericsson AB 2000-2013. 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
@@ -127,15 +127,12 @@ $(EBIN)/et_selector.$(EMULATOR): et_selector.erl ../include/et.hrl
$(EBIN)/et_contents_viewer.$(EMULATOR): et_contents_viewer.erl ../include/et.hrl et_internal.hrl
-$(EBIN)/et_gs_contents_viewer.$(EMULATOR): et_gs_contents_viewer.erl ../include/et.hrl et_internal.hrl
$(EBIN)/et_wx_contents_viewer.$(EMULATOR): et_wx_contents_viewer.erl ../include/et.hrl et_internal.hrl
$(EBIN)/et_collector.$(EMULATOR): et_collector.erl ../include/et.hrl et_internal.hrl
$(EBIN)/et_viewer.$(EMULATOR): et_viewer.erl ../include/et.hrl et_internal.hrl
-$(EBIN)/et_gs_viewer.$(EMULATOR): et_gs_viewer.erl ../include/et.hrl et_internal.hrl
-
$(EBIN)/et_wx_viewer.$(EMULATOR): et_wx_viewer.erl ../include/et.hrl et_internal.hrl
diff --git a/lib/et/src/et.app.src b/lib/et/src/et.app.src
index fd203e3e44..f7189a4197 100644
--- a/lib/et/src/et.app.src
+++ b/lib/et/src/et.app.src
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2013. 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
@@ -24,8 +24,6 @@
[
et,
et_collector,
- et_gs_contents_viewer,
- et_gs_viewer,
et_selector,
et_viewer,
et_wx_contents_viewer,
diff --git a/lib/et/src/et_collector.erl b/lib/et/src/et_collector.erl
index a78b30c419..e05c67be60 100644
--- a/lib/et/src/et_collector.erl
+++ b/lib/et/src/et_collector.erl
@@ -409,8 +409,6 @@ report(TH, TraceOrEvent) when is_record(TH, table_handle) ->
report(TH#table_handle.collector_pid, TraceOrEvent)
end
end;
-report(TH, end_of_trace) when is_record(TH, table_handle) ->
- {ok, TH};
report(_, Bad) ->
exit({bad_event, Bad}).
diff --git a/lib/et/src/et_gs_contents_viewer.erl b/lib/et/src/et_gs_contents_viewer.erl
deleted file mode 100644
index 2d414f10b4..0000000000
--- a/lib/et/src/et_gs_contents_viewer.erl
+++ /dev/null
@@ -1,602 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2000-2012. 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%
-%%
-%%----------------------------------------------------------------------
-%% Purpose: Displays details of a trace event
-%%----------------------------------------------------------------------
-
--module(et_gs_contents_viewer).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,editor,2}},
- {nowarn_deprecated_function,{gs,frame,2}},
- {nowarn_deprecated_function,{gs,menu,2}},
- {nowarn_deprecated_function,{gs,menubar,2}},
- {nowarn_deprecated_function,{gs,menubutton,2}},
- {nowarn_deprecated_function,{gs,menuitem,2}},
- {nowarn_deprecated_function,{gs,menuitem,3}},
- {nowarn_deprecated_function,{gs,start,0}},
- {nowarn_deprecated_function,{gs,window,2}}]).
-
--behaviour(gen_server).
-
-%% External exports
--export([start_link/1,
- stop/1]).
-
-%% gen_server callbacks
--export([init/1, terminate/2, code_change/3,
- handle_call/3, handle_cast/2, handle_info/2]).
-
--include("../include/et.hrl").
--include("et_internal.hrl").
-
--record(state, {parent_pid, % Pid of parent process
- viewer_pid, % Pid of viewer process
- event_order, % Field to be used as primary key
- event, % The original event
- filtered_event, % Event processed by active filter
- active_filter, % Name of the active filter
- filters, % List of possible filters
- win, % GUI: Window object
- packer, % GUI: Packer object
- width, % GUI: Window width
- height}). % GUI: Window height
-
-%%%----------------------------------------------------------------------
-%%% Client side
-%%%----------------------------------------------------------------------
-
-%%----------------------------------------------------------------------
-%% start_link(Options) -> {ok, ContentsPid} | {error, Reason}
-%%
-%% Start an viewer for the event contents as window in GS
-%%
-%% Options = [option()]
-%%
-%% option() =
-%%
-%% {parent_pid, pid()} | % Pid of parent process
-%% {viewer_pid, pid()} | % Pid of viewer process
-%% {event_order, event_order()} | % Field to be used as primary key
-%% {active_filter, atom()} | % Name of the active filter
-%% {filter, atom(), fun()} % A named filter fun
-%%
-%% event_order() = 'trace_ts' | 'event_ts'
-%% ContentsPid = pid()
-%% Reason = term()
-%%----------------------------------------------------------------------
-
-start_link(Options) ->
- case parse_opt(Options, default_state()) of
- {ok, S} ->
- case gen_server:start_link(?MODULE, [S], []) of
- {ok, ContentsPid} when S#state.parent_pid =/= self() ->
- unlink(ContentsPid),
- {ok, ContentsPid};
- Other ->
- Other
- end;
- {error, Reason} ->
- {error, Reason}
- end.
-
-default_state() ->
- #state{parent_pid = self(),
- viewer_pid = undefined,
- active_filter = ?DEFAULT_FILTER_NAME,
- filters = [?DEFAULT_FILTER],
- width = 600,
- height = 300}.
-
-parse_opt([], S) ->
- Name = S#state.active_filter,
- Filters = S#state.filters,
- if
- S#state.event =:= undefined ->
- {error, {badarg, no_event}};
- is_atom(Name) ->
- case lists:keysearch(Name, #filter.name, Filters) of
- {value, F} when is_record(F, filter) ->
- {ok, S#state{active_filter = Name}};
- false ->
- {error, {badarg, {no_such_filter, Name, Filters}}}
- end
- end;
-parse_opt([H | T], S) ->
- case H of
- {parent_pid, ParentPid} when is_pid(ParentPid) ->
- parse_opt(T, S#state{parent_pid = ParentPid});
- {viewer_pid, ViewerPid} when is_pid(ViewerPid) ->
- parse_opt(T, S#state{viewer_pid = ViewerPid});
- {event_order, trace_ts} ->
- parse_opt(T, S#state{event_order = trace_ts});
- {event_order, event_ts} ->
- parse_opt(T, S#state{event_order = event_ts});
- {event, Event} when is_record(Event, event) ->
- parse_opt(T, S#state{event = Event});
- {active_filter, Name} when is_atom(Name) ->
- parse_opt(T, S#state{active_filter = Name});
- F when is_record(F, filter),
- is_atom(F#filter.name),
- is_function(F#filter.function) ->
- Filters = lists:keydelete(F#filter.name, #filter.name, S#state.filters),
- Filters2 = lists:keysort(#filter.name, [F | Filters]),
- parse_opt(T, S#state{filters = Filters2});
- {width, Width} when is_integer(Width), Width > 0 ->
- parse_opt(T, S#state{width = Width});
- {height, Height} when is_integer(Height), Height > 0 ->
- parse_opt(T, S#state{height = Height});
- Bad ->
- {error, {bad_option, Bad}}
- end;
-parse_opt(BadList, _S) ->
- {error, {bad_option_list, BadList}}.
-
-%%----------------------------------------------------------------------
-%% stop(ContentsPid) -> ok
-%%
-%% Stops a contents viewer process
-%%
-%% ContentsPid = pid()
-%%----------------------------------------------------------------------
-
-stop(ContentsPid) ->
- unlink(ContentsPid),
- call(ContentsPid, stop).
-
-call(ContentsPid, Request) ->
- gen_server:call(ContentsPid, Request, infinity).
-
-%%%----------------------------------------------------------------------
-%%% Callback functions from gen_server
-%%%----------------------------------------------------------------------
-
-%%----------------------------------------------------------------------
-%% Func: init/1
-%% Returns: {ok, State} |
-%% {ok, State, Timeout} |
-%% ignore |
-%% {stop, Reason}
-%%----------------------------------------------------------------------
-
-init([S]) when is_record(S, state) ->
- process_flag(trap_exit, true),
- S2 = create_window(S),
- {ok, S2}.
-
-%%----------------------------------------------------------------------
-%% Func: handle_call/3
-%% Returns: {reply, Reply, State} |
-%% {reply, Reply, State, Timeout} |
-%% {noreply, State} |
-%% {noreply, State, Timeout} |
-%% {stop, Reason, Reply, State} | (terminate/2 is called)
-%% {stop, Reason, State} (terminate/2 is called)
-%%----------------------------------------------------------------------
-
-handle_call(stop, _From, S) ->
- unlink(S#state.parent_pid),
- {stop, shutdown, ok, S};
-handle_call(Request, From, S) ->
- ok = error_logger:format("~p(~p): handle_call(~p, ~p, ~p)~n",
- [?MODULE, self(), Request, From, S]),
- Reply = {error, {bad_request, Request}},
- {reply, Reply, S}.
-
-%%----------------------------------------------------------------------
-%% Func: handle_cast/2
-%% Returns: {noreply, State} |
-%% {noreply, State, Timeout} |
-%% {stop, Reason, State} (terminate/2 is called)
-%%----------------------------------------------------------------------
-
-handle_cast(Msg, S) ->
- ok = error_logger:format("~p(~p): handle_cast(~p, ~p)~n",
- [?MODULE, self(), Msg, S]),
- {noreply, S}.
-
-%%----------------------------------------------------------------------
-%% Func: handle_info/2
-%% Returns: {noreply, State} |
-%% {noreply, State, Timeout} |
-%% {stop, Reason, State} (terminate/2 is called)
-%%----------------------------------------------------------------------
-
-handle_info({gs, Button, click, Data, _Other}, S) ->
- case Button of
- close ->
- gs:destroy(S#state.win),
- {stop, normal, S};
- save ->
- Event = S#state.event,
- Bin = list_to_binary(event_to_string(Event, S#state.event_order)),
- TimeStamp =
- case S#state.event_order of
- trace_ts -> Event#event.trace_ts;
- event_ts -> Event#event.event_ts
- end,
- FileName = ["et_contents_viewer_", now_to_string(TimeStamp), ".save"],
- file:write_file(lists:flatten(FileName), Bin),
- {noreply, S};
- _PopupMenuItem when is_record(Data, filter) ->
- F = Data,
- ChildState= S#state{active_filter = F#filter.name},
- case gen_server:start_link(?MODULE, [ChildState], []) of
- {ok, Pid} when S#state.parent_pid =/= self() ->
- unlink(Pid),
- {noreply, S};
- _ ->
- {noreply, S}
- end;
- {hide, Actors} ->
- send_viewer_event(S, {delete_actors, Actors}),
- {noreply, S};
- {show, Actors} ->
- send_viewer_event(S, {insert_actors, Actors}),
- {noreply, S};
- {mode, Mode} ->
- send_viewer_event(S, {mode, Mode}),
- {noreply, S};
- Nyi ->
- ok = error_logger:format("~p: click ~p ignored (nyi)~n",
- [?MODULE, Nyi]),
- {noreply, S}
- end;
-handle_info({gs, _Obj, destroy,_, _}, S) ->
- unlink(S#state.parent_pid),
- gs:destroy(S#state.win),
- {stop, normal, S};
-handle_info({gs, _Obj, keypress, _, [KeySym, _Keycode, _Shift, _Control | _]}, S) ->
- case KeySym of
- 'c' ->
- gs:destroy(S#state.win),
- {stop, normal, S};
-
- 'f' ->
- E = S#state.filtered_event,
- From = E#event.from,
- send_viewer_event(S, {delete_actors, [From]}),
- {noreply, S};
- 't' ->
- E = S#state.filtered_event,
- To = E#event.to,
- send_viewer_event(S, {delete_actors, [To]}),
- {noreply, S};
- 'b' ->
- E = S#state.filtered_event,
- From = E#event.from,
- To = E#event.to,
- send_viewer_event(S, {delete_actors, [From, To]}),
- {noreply, S};
-
- 'F' ->
- E = S#state.filtered_event,
- From = E#event.from,
- send_viewer_event(S, {insert_actors, [From]}),
- {noreply, S};
- 'T' ->
- E = S#state.filtered_event,
- To = E#event.to,
- send_viewer_event(S, {insert_actors, [To]}),
- {noreply, S};
- 'B' ->
- E = S#state.filtered_event,
- From = E#event.from,
- To = E#event.to,
- send_viewer_event(S, {insert_actors, [From, To]}),
- {noreply, S};
-
- 's' ->
- E = S#state.filtered_event,
- From = E#event.from,
- To = E#event.to,
- First = et_collector:make_key(S#state.event_order, E),
- Mode = {search_actors, forward, First, [From, To]},
- send_viewer_event(S, {mode, Mode}),
- {noreply, S};
- 'r' ->
- E = S#state.filtered_event,
- From = E#event.from,
- To = E#event.to,
- First = et_collector:make_key(S#state.event_order, E),
- Mode = {search_actors, reverse, First, [From, To]},
- send_viewer_event(S, {mode, Mode}),
- {noreply, S};
- 'a' ->
- send_viewer_event(S, {mode, all}),
- {noreply, S};
-
- 0 ->
- case lists:keysearch(?DEFAULT_FILTER_NAME, #filter.name, S#state.filters) of
- {value, F} when is_record(F, filter) ->
- ChildState= S#state{active_filter = F#filter.name},
- case gen_server:start_link(?MODULE, [ChildState], []) of
- {ok, Pid} when S#state.parent_pid =/= self() ->
- unlink(Pid);
- _ ->
- ignore
- end;
- false ->
- ignore
- end,
- {noreply, S};
- Int when is_integer(Int), Int > 0, Int =< 9 ->
- case catch lists:nth(Int, S#state.filters) of
- F when is_record(F, filter) ->
- ChildState= S#state{active_filter = F#filter.name},
- case gen_server:start_link(?MODULE, [ChildState], []) of
- {ok, Pid} when S#state.parent_pid =/= self() ->
- unlink(Pid);
- _ ->
- ignore
- end;
- {'EXIT', _} ->
- ignore
- end,
- {noreply, S};
-
- 'Shift_L' ->
- {noreply, S};
- 'Shift_R' ->
- {noreply, S};
- 'Caps_Lock' ->
- {noreply, S};
- _ ->
- io:format("~p: ignored: ~p~n", [?MODULE, KeySym]),
- {noreply, S}
- end;
-handle_info({gs, _Obj, configure, [], [W, H | _]}, S) ->
- gs:config(S#state.packer, [{width, W},{height, H}]),
- S2 = S#state{width = W, height = H},
- {noreply, S2};
-handle_info({'EXIT', Pid, Reason}, S) ->
- if
- Pid =:= S#state.parent_pid ->
- unlink(Pid),
- {stop, Reason, S};
- true ->
- {noreply, S}
- end;
-handle_info(Info, S) ->
- ok = error_logger:format("~p(~p): handle_info(~p, ~p)~n",
- [?MODULE, self(), Info, S]),
- {noreply, S}.
-
-%%----------------------------------------------------------------------
-%% Func: terminate/2
-%% Purpose: Shutdown the server
-%% Returns: any (ignored by gen_server)
-%%----------------------------------------------------------------------
-
-terminate(_Reason, _S) ->
- ignore.
-
-%%----------------------------------------------------------------------
-%% Func: code_change/3
-%% Purpose: Convert process state when code is changed
-%% Returns: {ok, NewState}
-%%----------------------------------------------------------------------
-
-code_change(_OldVsn, S, _Extra) ->
- {ok, S}.
-
-%%%----------------------------------------------------------------------
-%%% Handle graphics
-%%%----------------------------------------------------------------------
-
-create_window(S) ->
- H = S#state.height,
- W = S#state.width,
- Name = S#state.active_filter,
- Title = lists:concat([?MODULE, " (filter: ", Name, ")"]),
- WinOpt = [{title, Title}, {configure, true},
- {width, W}, {height, H}],
- GS = gs:start(),
- Win = gs:window(GS, WinOpt),
- Bar = gs:menubar(Win, []),
- create_file_menu(Bar),
- PackerOpt = [{packer_x, [{stretch, 1}]},
- {packer_y, [{stretch, 1}, {fixed, 25}]},
- {x, 0}, {y, 25}],
- Packer = gs:frame(Win, PackerOpt),
- EditorOpt = [{pack_xy, {1, 1}}, {vscroll, right}, {hscroll, bottom},
- {wrap, none},
- {bg, lightblue}, {font, {courier, 12}}],
- Editor = gs:editor(Packer, EditorOpt),
- FilteredEvent = config_editor(Editor, S),
- S2 = S#state{win = Win, packer = Packer, filtered_event = FilteredEvent},
- create_hide_menu(Bar, S2),
- create_search_menu(Bar, S2),
- create_filter_menu(Bar, S#state.filters),
- gs:config(Packer, [{width, W}, {height, H}]),
- gs:config(Win, [{map,true}, {keypress, true}]),
- S2.
-
-create_file_menu(Bar) ->
- Button = gs:menubutton(Bar, [{label, {text, "File"}}]),
- Menu = gs:menu(Button, []),
- gs:menuitem(close, Menu, [{label, {text,"Close (c)"}}]),
- gs:menuitem(save, Menu, [{label, {text,"Save"}}]).
-
-create_filter_menu(Bar, Filters) ->
- Button = gs:menubutton(Bar, [{label, {text, "Filters"}}]),
- Menu = gs:menu(Button, []),
- gs:menuitem(Menu, [{label, {text, "Select Filter"}}, {bg, lightblue}, {enable, false}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
- Item = fun(F, N) when F#filter.name =:= ?DEFAULT_FILTER_NAME->
- Label = lists:concat([pad_string(F#filter.name, 20), "(0)"]),
- gs:menuitem(Menu, [{label, {text, Label}}, {data, F}]),
- N + 1;
- (F, N) ->
- Name = F#filter.name,
- Label = lists:concat([pad_string(Name, 20), "(", N, ")"]),
- gs:menuitem(Menu, [{label, {text, Label}}, {data, F}]),
- N + 1
- end,
- Filters2 = lists:keysort(#filter.name, Filters),
- lists:foldl(Item, 1, Filters2),
- Menu.
-
-create_hide_menu(Bar, S) ->
- Button = gs:menubutton(Bar, [{label, {text, "Hide"}}]),
- Menu = gs:menu(Button, []),
- E = S#state.filtered_event,
- From = E#event.from,
- To = E#event.to,
- if
- S#state.viewer_pid =:= undefined ->
- ignore;
- From =:= To ->
- gs:menuitem(Menu, [{label, {text, "Hide actor in Viewer "}}, {bg, lightblue}, {enable, false}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
- gs:menuitem({hide, [From]}, Menu, [{label, {text,"From=To (f|t|b)"}}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
- gs:menuitem(Menu, [{label, {text, "Show actor in Viewer "}}, {bg, lightblue}, {enable, false}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
- gs:menuitem({show, [From]}, Menu, [{label, {text,"From=To (F|T|B)"}}]);
- true ->
- gs:menuitem(Menu, [{label, {text, "Hide actor in Viewer "}}, {bg, lightblue}, {enable, false}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
- gs:menuitem({hide, [From]}, Menu, [{label, {text,"From (f)"}}]),
- gs:menuitem({hide, [To]}, Menu, [{label, {text,"To (t)"}}]),
- gs:menuitem({hide, [From, To]}, Menu, [{label, {text,"Both (b)"}}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
- gs:menuitem(Menu, [{label, {text, "Show actor in Viewer "}}, {bg, lightblue}, {enable, false}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
- gs:menuitem({show, [From]}, Menu, [{label, {text,"From (F)"}}]),
- gs:menuitem({show, [To]}, Menu, [{label, {text,"To (T)"}}]),
- gs:menuitem({show, [From, To]}, Menu, [{label, {text,"Both (B)"}}])
- end.
-
-create_search_menu(Bar, S) ->
- Button = gs:menubutton(Bar, [{label, {text, "Search"}}]),
- Menu = gs:menu(Button, []),
- E = S#state.filtered_event,
- From = E#event.from,
- To = E#event.to,
- gs:menuitem(Menu, [{label, {text, "Search in Viewer "}},
- {bg, lightblue}, {enable, false}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
- if
- S#state.viewer_pid =:= undefined ->
- S;
- From =:= To ->
- Key = et_collector:make_key(S#state.event_order, E),
- ModeS = {search_actors, forward, Key, [From]},
- ModeR = {search_actors, reverse, Key, [From]},
- gs:menuitem({mode, ModeS}, Menu, [{label, {text,"Forward from this event (s)"}}]),
- gs:menuitem({mode, ModeR}, Menu, [{label, {text,"Reverse from this event (r)"}}]);
- true ->
- Key = et_collector:make_key(S#state.event_order, E),
- ModeS = {search_actors, forward, Key, [From, To]},
- ModeR = {search_actors, reverse, Key, [From, To]},
- gs:menuitem({mode, ModeS}, Menu, [{label, {text,"Forward from this event (s)"}}]),
- gs:menuitem({mode, ModeR}, Menu, [{label, {text,"Reverse from this event (r)"}}])
- end,
- gs:menuitem({mode, all}, Menu, [{label, {text,"Abort search. Display all (a)"}}]).
-
-config_editor(Editor, S) ->
- Event = S#state.event,
- Name = S#state.active_filter,
- {value, F} = lists:keysearch(Name, #filter.name, S#state.filters),
- FilterFun = F#filter.function,
- case catch FilterFun(Event) of
- true ->
- do_config_editor(Editor, Event, lightblue, S#state.event_order);
- {true, Event2} when is_record(Event2, event) ->
- do_config_editor(Editor, Event2, lightblue, S#state.event_order);
- false ->
- do_config_editor(Editor, Event, red, S#state.event_order);
- Bad ->
- Contents = {bad_filter, Name, Bad},
- BadEvent = Event#event{contents = Contents},
- do_config_editor(Editor, BadEvent, red, S#state.event_order)
- end.
-
-do_config_editor(Editor, Event, Colour, TsKey) ->
- String = event_to_string(Event, TsKey),
- gs:config(Editor, {insert, {'end', String}}),
- gs:config(Editor, {enable, false}),
- gs:config(Editor, {bg, Colour}),
- Event.
-
-%%%----------------------------------------------------------------------
-%%% String handling
-%%%----------------------------------------------------------------------
-
-term_to_string(Term) ->
- case catch io_lib:format("~s", [Term]) of
- {'EXIT', _} -> io_lib:format("~p", [Term]);
- GoodString -> GoodString
- end.
-
-now_to_string({Mega, Sec, Micro} = Now)
- when is_integer(Mega), is_integer(Sec), is_integer(Micro) ->
- {{Y, Mo, D}, {H, Mi, S}} = calendar:now_to_universal_time(Now),
- lists:concat([Y, "-", Mo, "-", D, " ", H, ".", Mi, ".", S, ".", Micro]);
-now_to_string(Other) ->
- term_to_string(Other).
-
-event_to_string(Event, TsKey) ->
- ReportedTs = Event#event.trace_ts,
- ParsedTs = Event#event.event_ts,
- Deep =
- ["DETAIL LEVEL: ", term_to_string(Event#event.detail_level),
- "\nLABEL: ", term_to_string(Event#event.label),
- case Event#event.from =:= Event#event.to of
- true ->
- ["\nACTOR: ", term_to_string(Event#event.from)];
- false ->
- ["\nFROM: ", term_to_string(Event#event.from),
- "\nTO: ", term_to_string(Event#event.to)]
- end,
- case ReportedTs =:= ParsedTs of
- true ->
- ["\nPARSED: ", now_to_string(ParsedTs)];
- false ->
- case TsKey of
- trace_ts ->
- ["\nTRACE_TS: ", now_to_string(ReportedTs),
- "\nEVENT_TS: ", now_to_string(ParsedTs)];
- event_ts ->
- ["\nEVENT_TS: ", now_to_string(ParsedTs),
- "\nTRACE_TS: ", now_to_string(ReportedTs)]
- end
- end,
- "\nCONTENTS:\n\n", term_to_string(Event#event.contents)],
- lists:flatten(Deep).
-
-pad_string(Atom, MinLen) when is_atom(Atom) ->
- pad_string(atom_to_list(Atom), MinLen);
-pad_string(String, MinLen) when is_integer(MinLen), MinLen >= 0 ->
- Len = length(String),
- case Len >= MinLen of
- true ->
- String;
- false ->
- String ++ lists:duplicate(MinLen - Len, $ )
- end.
-
-send_viewer_event(S, Event) ->
- case S#state.viewer_pid of
- ViewerPid when is_pid(ViewerPid) ->
- ViewerPid ! {et, Event};
- undefined ->
- ignore
- end.
diff --git a/lib/et/src/et_gs_viewer.erl b/lib/et/src/et_gs_viewer.erl
deleted file mode 100644
index ce8634d09f..0000000000
--- a/lib/et/src/et_gs_viewer.erl
+++ /dev/null
@@ -1,1498 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2009-2012. 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%
-%%
-%%----------------------------------------------------------------------
-%% Purpose: Displays a sequence chart for trace events (messages/actions)
-%%----------------------------------------------------------------------
-
--module(et_gs_viewer).
--compile([{nowarn_deprecated_function,{gs,canvas,2}},
- {nowarn_deprecated_function,{gs,checkbutton,3}},
- {nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,frame,2}},
- {nowarn_deprecated_function,{gs,line,2}},
- {nowarn_deprecated_function,{gs,menu,2}},
- {nowarn_deprecated_function,{gs,menu,3}},
- {nowarn_deprecated_function,{gs,menubar,2}},
- {nowarn_deprecated_function,{gs,menubutton,2}},
- {nowarn_deprecated_function,{gs,menubutton,3}},
- {nowarn_deprecated_function,{gs,menuitem,2}},
- {nowarn_deprecated_function,{gs,menuitem,3}},
- {nowarn_deprecated_function,{gs,scale,2}},
- {nowarn_deprecated_function,{gs,start,0}},
- {nowarn_deprecated_function,{gs,text,2}},
- {nowarn_deprecated_function,{gs,window,2}}]).
-
--behaviour(gen_server).
-
-%% External exports
--export([start_link/1]).
-
-%% gen_server callbacks
--export([init/1, terminate/2, code_change/3,
- handle_call/3, handle_cast/2, handle_info/2]).
-
--include("../include/et.hrl").
--include("et_internal.hrl").
-
--define(unknown, "UNKNOWN").
-
--record(state,
- {parent_pid, % Pid of parent process
- collector_pid, % Pid of collector process
- event_order, % Field to be used as primary key
- trace_pattern, % Collector trace pattern
- active_filter, % Name of the active filter
- filters, % List of possible filters
- selected_actor, % Actor selected by user
- first_event, % Key of first event (regardless of visibility)
- last_event, % Key of last event (regardless of visibility)
- max_events, % Maximum number of shown events
- events, % Queue containg all event keys (regardless of visibility)
- max_actors, % Maximum number of shown actors
- actors, % List of known actors
- refresh_needed, % Refresh is needed in order to show all actors
- display_mode, % Display all or only matching actors
- detail_level, % Show only events with lesser detail level
- hide_actions, % Hide/show events where to == from actor (bool)
- hide_unknown, % Hide/show events with unknown actor (bool)
- is_suspended, % Suspend viewer updates (bool)
- title, % GUI: Window title
- win, % GUI: Window object
- menubar, % GUI: Menu bar object
- packer, % GUI: Packer object
- width, % GUI: Window width
- height, % GUI: Window height
- scale, % GUI: Scaling factor on canvas
- font, % GUI: Font to be used on text labels
- canvas_width, % GUI: Canvas width
- canvas_height, % GUI: Canvas height
- canvas, % GUI: Canvas object
- y_pos}). % GUI: Current y position on canvas
-
--record(actor, {name, string}).
-
--define(initial_x, 10).
--define(incr_x, 60).
--define(initial_y, 15).
--define(incr_y, 15).
-
-%%%----------------------------------------------------------------------
-%%% Client side
-%%%----------------------------------------------------------------------
-
-start_link(Options) ->
- case parse_opt(Options, default_state(), []) of
- {ok, S, CollectorOpt} ->
- case S#state.collector_pid of
- CollectorPid when is_pid(CollectorPid) ->
- case gen_server:start_link(?MODULE, [S], []) of
- {ok, Pid} when S#state.parent_pid =/= self() ->
- unlink(Pid),
- {ok, Pid};
- Other ->
- Other
- end;
- undefined ->
- case et_collector:start_link(CollectorOpt) of
- {ok, CollectorPid} ->
- S2 = S#state{collector_pid = CollectorPid},
- case gen_server:start_link(?MODULE, [S2], []) of
- {ok, Pid} when S#state.parent_pid =/= self() ->
- unlink(Pid),
- {ok, Pid};
- Other ->
- Other
- end;
- {error, Reason} ->
- {error, {et_collector, Reason}}
- end
- end;
- {error, Reason} ->
- {error, Reason}
- end.
-
-default_state() ->
- #state{parent_pid = self(),
- collector_pid = undefined,
- detail_level = ?detail_level_max,
- active_filter = ?DEFAULT_FILTER_NAME,
- filters = [?DEFAULT_FILTER],
- event_order = trace_ts,
- is_suspended = false,
- max_events = 100,
- first_event = first,
- last_event = first,
- events = queue_new(),
- max_actors = 5,
- actors = [create_actor(?unknown)],
- selected_actor = ?unknown,
- hide_actions = false,
- hide_unknown = false,
- refresh_needed = false,
- display_mode = all,
- scale = 2,
- canvas_height = 0,
- canvas_width = 0,
- width = 800,
- height = 600}.
-
-parse_opt([], S, CollectorOpt) ->
- {ok, S, [{parent_pid, S#state.parent_pid} | CollectorOpt]};
-parse_opt([H | T], S, CollectorOpt) ->
- case H of
- {parent_pid, Parent} when Parent =:= undefined ->
- CollectorOpt2 = [H | CollectorOpt],
- parse_opt(T, S#state{parent_pid = Parent}, CollectorOpt2);
- {parent_pid, Parent} when is_pid(Parent) ->
- CollectorOpt2 = [H | CollectorOpt],
- parse_opt(T, S#state{parent_pid = Parent}, CollectorOpt2);
- {title, Title} ->
- parse_opt(T, S#state{title = name_to_string(Title)}, CollectorOpt);
- {detail_level, Level} when is_integer(Level),
- Level >= ?detail_level_min,
- Level =< ?detail_level_max ->
- parse_opt(T, S#state{detail_level = Level}, CollectorOpt);
- {detail_level, max} ->
- parse_opt(T, S#state{detail_level = ?detail_level_max}, CollectorOpt);
- {detail_level, min} ->
- parse_opt(T, S#state{detail_level = ?detail_level_min}, CollectorOpt);
- {is_suspended, true} ->
- parse_opt(T, S#state{is_suspended = true}, CollectorOpt);
- {is_suspended, false} ->
- parse_opt(T, S#state{is_suspended = false}, CollectorOpt);
- {scale, Scale} when is_integer(Scale), Scale > 0 ->
- parse_opt(T, S#state{scale = Scale}, CollectorOpt);
- {width, W} when is_integer(W), W > 0 ->
- parse_opt(T, S#state{width = W, canvas_width = W}, CollectorOpt);
- {height, WH} when is_integer(WH), WH > 0 ->
- parse_opt(T, S#state{height = WH, canvas_height = WH}, CollectorOpt);
- {collector_pid, Pid} when is_pid(Pid) ->
- parse_opt(T, S#state{collector_pid = Pid}, CollectorOpt);
- {collector_pid, undefined} ->
- parse_opt(T, S#state{collector_pid = undefined}, CollectorOpt);
- {active_filter, Name} when is_atom(Name) ->
- parse_opt(T, S#state{active_filter = Name}, CollectorOpt);
- {event_order, trace_ts} -> %% BUGBUG: Verify event_order with collector
- CollectorOpt2 = [H | CollectorOpt],
- parse_opt(T, S#state{event_order = trace_ts}, CollectorOpt2);
- {event_order, event_ts} -> %% BUGBUG: Verify event_order with collector
- CollectorOpt2 = [H | CollectorOpt],
- parse_opt(T, S#state{event_order = event_ts}, CollectorOpt2);
- {trace_port, _Port} ->
- CollectorOpt2 = [H | CollectorOpt],
- parse_opt(T, S, CollectorOpt2);
- {trace_max_queue, _Queue} ->
- CollectorOpt2 = [H | CollectorOpt],
- parse_opt(T, S, CollectorOpt2);
- {trace_pattern, _Pattern} ->
- CollectorOpt2 = [H | CollectorOpt],
- parse_opt(T, S, CollectorOpt2);
- {trace_global, _Boolean} ->
- CollectorOpt2 = [H | CollectorOpt],
- parse_opt(T, S, CollectorOpt2);
- {trace_client, _Client} ->
- CollectorOpt2 = [H | CollectorOpt],
- parse_opt(T, S, CollectorOpt2);
- {dict_insert, {filter, Name}, Fun} ->
- if
- is_atom(Name), is_function(Fun) ->
- F = #filter{name = Name, function = Fun},
- Filters = lists:keydelete(Name, #filter.name, S#state.filters),
- CollectorOpt2 = [H | CollectorOpt],
- parse_opt(T, S#state{filters = Filters ++ [F]}, CollectorOpt2);
- true ->
- {error, {bad_option, H}}
- end;
- {dict_insert, {subscriber, Pid}, _Val} ->
- if
- is_pid(Pid) ->
- CollectorOpt2 = [H | CollectorOpt],
- parse_opt(T, S, CollectorOpt2);
- true ->
- {error, {bad_option, H}}
- end;
- {dict_insert, _Key, _Val} ->
- CollectorOpt2 = [H | CollectorOpt],
- parse_opt(T, S, CollectorOpt2);
- {dict_delete, {filter, Name}} ->
- Filters = lists:keydelete(Name, #filter.name, S#state.filters),
- CollectorOpt2 = [H | CollectorOpt],
- parse_opt(T, S#state{filters = Filters}, CollectorOpt2);
- {dict_delete, _Key} ->
- CollectorOpt2 = [H | CollectorOpt],
- parse_opt(T, S, CollectorOpt2);
- {max_events, Max} when is_integer(Max), Max > 0->
- parse_opt(T, S#state{max_events = Max}, CollectorOpt);
- {max_events, Max} when Max =:= infinity ->
- parse_opt(T, S#state{max_events = Max}, CollectorOpt);
- {max_actors, Max} when is_integer(Max), Max >= 0->
- parse_opt(T, S#state{max_actors = Max}, CollectorOpt);
- {max_actors, Max} when Max =:= infinity ->
- parse_opt(T, S#state{max_actors = Max}, CollectorOpt);
- {actors, ActorNames} when is_list(ActorNames) ->
- ActorNames2 =
- case lists:member(?unknown, ActorNames) of
- false -> [?unknown | ActorNames];
- true -> ActorNames
- end,
- Actors = [create_actor(Name) || Name <- ActorNames2],
- parse_opt(T, S#state{actors = Actors}, CollectorOpt);
- {first_event, First} ->
- parse_opt(T, S#state{first_event = First}, CollectorOpt);
- {hide_unknown, Bool} when Bool =:= false ->
- parse_opt(T, S#state{hide_unknown = Bool}, CollectorOpt);
- {hide_unknown, Bool} when Bool =:= true ->
- parse_opt(T, S#state{hide_unknown = Bool}, CollectorOpt);
- {hide_actions, Bool} when Bool =:= false ->
- parse_opt(T, S#state{hide_actions = Bool}, CollectorOpt);
- {hide_actions, Bool} when Bool =:= true ->
- parse_opt(T, S#state{hide_actions = Bool}, CollectorOpt);
- {display_mode, Mode = all} ->
- parse_opt(T, S#state{display_mode = Mode}, CollectorOpt);
- {display_mode, Mode = {search_actors, Dir, _Key, Actors}} when is_list(Actors), Dir =:= forward ->
- parse_opt(T, S#state{display_mode = Mode}, CollectorOpt);
- {display_mode, Mode = {search_actors, Dir, _Key, Actors}} when is_list(Actors), Dir =:= reverse ->
- parse_opt(T, S#state{display_mode = Mode}, CollectorOpt);
-
- Bad ->
- {error, {bad_option, Bad}}
- end;
-parse_opt(BadList, _S, _CollectorOpt) ->
- {error, {bad_option_list, BadList}}.
-
-do_dict_insert({filter, Name}, Fun, S) when is_atom(Name), is_function(Fun) ->
- F = #filter{name = Name, function = Fun},
- Filters = lists:keydelete(Name, #filter.name, S#state.filters),
- Filters2 = lists:keysort(#filter.name, [F | Filters]),
- gs:destroy(filter_menu),
- create_filter_menu(S#state.active_filter, Filters2),
- S#state{filters = Filters2};
-do_dict_insert(_Key, _Val, S) ->
- %% ok = error_logger:format("~p(~p): handle_info({et, {dict_insert, ~p, ~p}})~n",
- %% [?MODULE, self(), Key, Val]),
- S.
-
-do_dict_delete({filter, Name}, S) when is_atom(Name), Name =/= S#state.active_filter ->
- Filters = lists:keydelete(Name, #filter.name, S#state.filters),
- gs:destroy(filter_menu),
- create_filter_menu(S#state.active_filter, Filters),
- S#state{filters = Filters};
-do_dict_delete(_Key, S) ->
- %% ok = error_logger:format("~p(~p): handle_info({et, {dict_delete, ~p}})~n",
- %% [?MODULE, self(), Key]),
- S.
-
-%%%----------------------------------------------------------------------
-%%% Callback functions from gen_server
-%%%----------------------------------------------------------------------
-
-%%----------------------------------------------------------------------
-%% Func: init/1
-%% Returns: {ok, State} |
-%% {ok, State, Timeout} |
-%% ignore |
-%% {stop, Reason}
-%%----------------------------------------------------------------------
-
-init([S]) when is_record(S, state) ->
- process_flag(trap_exit, true),
- InitialTimeout = 0,
- case S#state.parent_pid of
- undefined ->
- ignore;
- Pid when is_pid(Pid) ->
- link(Pid)
- end,
- et_collector:dict_insert(S#state.collector_pid,
- {subscriber, self()},
- ?MODULE),
- {ok, create_main_window(S), InitialTimeout}.
-
-%%----------------------------------------------------------------------
-%% Func: handle_call/3
-%% Returns: {reply, Reply, State} |
-%% {reply, Reply, State, Timeout} |
-%% {noreply, State} |
-%% {noreply, State, Timeout} |
-%% {stop, Reason, Reply, State} | (terminate/2 is called)
-%% {stop, Reason, State} (terminate/2 is called)
-%%----------------------------------------------------------------------
-
-handle_call(get_collector_pid, _From, S) ->
- Reply = S#state.collector_pid,
- reply(Reply, S);
-handle_call(stop, _From, S) ->
- gs:destroy(S#state.win),
- {stop, shutdown, ok, S};
-handle_call(Request, From, S) ->
- ok = error_logger:format("~p(~p): handle_call(~p, ~p, ~p)~n",
- [?MODULE, self(), Request, From, S]),
- Reply = {error, {bad_request, Request}},
- reply(Reply, S).
-
-%%----------------------------------------------------------------------
-%% Func: handle_cast/2
-%% Returns: {noreply, State} |
-%% {noreply, State, Timeout} |
-%% {stop, Reason, State} (terminate/2 is called)
-%%----------------------------------------------------------------------
-
-handle_cast(Msg, S) ->
- ok = error_logger:format("~p(~p): handle_cast(~p, ~p)~n",
- [?MODULE, self(), Msg, S]),
- noreply(S).
-
-%%----------------------------------------------------------------------
-%% Func: handle_info/2
-%% Returns: {noreply, State} |
-%% {noreply, State, Timeout} |
-%% {stop, Reason, State} (terminate/2 is called)
-%%----------------------------------------------------------------------
-
-handle_info({et, {more_events, _Size}}, S) ->
- noreply(S);
-handle_info({et, {insert_actors, ActorNames}}, S) when is_list(ActorNames) ->
- Fun = fun(N, Actors) ->
- case lists:keymember(N, #actor.name, Actors) of
- true -> Actors;
- false -> Actors ++ [create_actor(N)]
- end
- end,
- Actors = lists:foldl(Fun, S#state.actors, ActorNames),
- S2 = refresh_main_window(S#state{actors = Actors}),
- noreply(S2);
-handle_info({et, {delete_actors, ActorNames}}, S) when is_list(ActorNames)->
- Fun = fun(N, Actors) when N =:= ?unknown ->
- Actors;
- (N, Actors) ->
- lists:keydelete(N, #actor.name, Actors)
- end,
- New = lists:foldl(Fun, S#state.actors, ActorNames),
- S2 = refresh_main_window(S#state{actors = New}),
- noreply(S2);
-handle_info({et, {dict_insert, Key, Val}}, S) ->
- S2 = do_dict_insert(Key, Val, S),
- noreply(S2);
-handle_info({et, {dict_delete, Key}}, S) ->
- S2 = do_dict_delete(Key, S),
- noreply(S2);
-handle_info({et, first}, S) ->
- S2 = scroll_first(S),
- noreply(S2);
-handle_info({et, prev}, S) ->
- S2 = scroll_prev(S),
- noreply(S2);
-handle_info({et, next}, S) ->
- S2 = scroll_next(S),
- noreply(S2);
-handle_info({et, last}, S) ->
- S2 = scroll_last(S),
- noreply(S2);
-handle_info({et, refresh}, S) ->
- S2 = refresh_main_window(S),
- noreply(S2);
-handle_info({et, {display_mode, Mode}}, S) ->
- S2 = change_display_mode(Mode, S),
- noreply(S2);
-handle_info({et, close}, S) ->
- gs:destroy(S#state.win),
- {stop, shutdown, S};
-handle_info({gs, Button, click, Data, Other} = Click, S) ->
- CollectorPid = S#state.collector_pid,
- case Button of
- close ->
- gs:destroy(S#state.win),
- {stop, shutdown, S};
- suspended ->
- case Other of
- [_Text, _Group, Bool | _] when Bool =:= true ->
- S2 = do_suspend(S),
- noreply(S2);
- [_Text, _Group, Bool | _] when Bool =:= false ->
- S2 = do_resume(S),
- noreply(S2);
- _ ->
- click_error(Click, S),
- noreply(S)
- end;
- hide_actions ->
- case Other of
- [_Text, _Group, Bool | _] when Bool =:= true ->
- S2 = refresh_main_window(S#state{hide_actions = Bool}),
- noreply(S2);
- [_Text, _Group, Bool | _] when Bool =:= false ->
- S2 = refresh_main_window(S#state{hide_actions = Bool}),
- noreply(S2);
- _ ->
- click_error(Click, S),
- noreply(S)
- end;
- hide_unknown ->
- case Other of
- [_Text, _Group, Bool | _] when Bool =:= true ->
- S2 = refresh_main_window(S#state{hide_unknown = Bool}),
- noreply(S2);
- [_Text, _Group, Bool | _] when Bool =:= false ->
- S2 = refresh_main_window(S#state{hide_unknown = Bool}),
- noreply(S2);
- _ ->
- click_error(Click, S),
- noreply(S)
- end;
- up ->
- S2 = scroll_up(S),
- noreply(S2);
- down ->
- S2 = scroll_down(S),
- noreply(S2);
- first ->
- S2 = scroll_first(S),
- noreply(S2);
- prev ->
- S2 = scroll_prev(S),
- noreply(S2);
- next ->
- S2 = scroll_next(S),
- noreply(S2);
- last ->
- S2 = scroll_last(S),
- noreply(S2);
- refresh ->
- S2 = refresh_main_window(S),
- noreply(S2);
- {display_mode, Mode} ->
- S2 = change_display_mode(Mode, S),
- noreply(S2);
- close_all ->
- close_all(S);
- close_all_others ->
- close_all_others(S);
- first_all ->
- et_collector:multicast(CollectorPid, first),
- noreply(S);
- prev_all ->
- et_collector:multicast(CollectorPid, prev),
- noreply(S);
- next_all ->
- et_collector:multicast(CollectorPid, next),
- noreply(S);
- last_all ->
- et_collector:multicast(CollectorPid, last),
- noreply(S);
- refresh_all ->
- et_collector:multicast(CollectorPid, refresh),
- noreply(S);
- clear_all ->
- et_collector:clear_table(CollectorPid),
- et_collector:multicast(CollectorPid, refresh),
- noreply(S);
- load_all ->
- et_collector:start_trace_client(CollectorPid, event_file, "et_viewer.log"),
- noreply(S);
- save_all ->
- et_collector:save_event_file(CollectorPid,
- "et_viewer.log",
- [existing, write, keep]),
- noreply(S);
- {open_viewer, Scale} ->
- Actors = [A#actor.name || A <- S#state.actors],
- open_viewer(Scale, S#state.active_filter, Actors, S),
- noreply(S);
- _Level when Data =:= detail_level, is_integer(hd(Other)),
- hd(Other) >= ?detail_level_min,
- hd(Other) =< ?detail_level_max ->
- S2 = S#state{detail_level = hd(Other)},
- noreply(S2);
- _PopupMenuItem when is_record(Data, filter) ->
- open_viewer(S#state.scale, Data#filter.name, [?unknown], S),
- noreply(S);
- _ ->
- click_error(Click, S),
- noreply(S)
- end;
-handle_info({gs, _Obj, destroy,_, _}, S) ->
- gs:destroy(S#state.win),
- {stop, shutdown, S};
-handle_info({gs, _Obj, buttonpress, _, [_Button, X, Y | _]}, S) ->
- S3 =
- case y_to_n(Y, S) of
- actor ->
- %% Actor click
- case S#state.actors of
- [] ->
- S;
- _ ->
- N = x_to_n(X, S),
- A = lists:nth(N, S#state.actors),
- S#state{selected_actor = A}
- end;
- {event, N} ->
- %% Event click
- List = queue_to_list(S#state.events),
- S2 = S#state{events = list_to_queue(List)},
-
- Key = lists:nth(N, List),
- Pid = S#state.collector_pid,
- Fun = fun create_contents_window/2,
- case et_collector:iterate(Pid, Key, -1) of
- Prev when Prev =:= Key ->
- et_collector:iterate(Pid, first, 1, Fun, S2);
- Prev ->
- et_collector:iterate(Pid, Prev, 1, Fun, S2)
- end
- end,
- noreply(S3);
-handle_info({gs, _Obj, buttonrelease, _, [_Button, X, Y | _]}, S) ->
- S2 =
- case y_to_n(Y, S) of
- actor ->
- %% Actor click
- case S#state.actors of
- [] ->
- S;
- Actors ->
- N = x_to_n(X, S),
- New = lists:nth(N, S#state.actors),
- Old = S#state.selected_actor,
- case New#actor.name =:= Old#actor.name of
- true ->
- A = S#state.selected_actor,
- toggle_search_for_actor(A#actor.name, S);
- false ->
- move_actor(Old, New, Actors, S)
- end
- end;
- {event, _N} ->
- %% Event click ignored
- S
- end,
- noreply(S2);
-handle_info({gs, _Obj, keypress, _, [KeySym, _Keycode, _Shift, _Control | _]} = Key, S) ->
- case KeySym of
- 'c' ->
- close_all_others(S);
- 'C' ->
- close_all(S);
- 'Up' ->
- S2 = scroll_up(S),
- noreply(S2);
- 'Down' ->
- S2 = scroll_down(S),
- noreply(S2);
- 'f' ->
- S2 = scroll_first(S),
- noreply(S2);
- 'p' ->
- S2 = scroll_prev(S),
- noreply(S2);
- 'Prior' ->
- S2 = scroll_prev(S),
- noreply(S2);
- 'n' ->
- S2 = scroll_next(S),
- noreply(S2);
- 'Next' ->
- S2 = scroll_next(S),
- noreply(S2);
- 'l' ->
- S2 = scroll_last(S),
- noreply(S2);
- 'r' ->
- S2 = refresh_main_window(S),
- noreply(S2);
- 'F' ->
- et_collector:multicast(S#state.collector_pid, first),
- noreply(S);
- 'P' ->
- et_collector:multicast(S#state.collector_pid, prev),
- noreply(S);
- 'N' ->
- et_collector:multicast(S#state.collector_pid, next),
- noreply(S);
- 'L' ->
- et_collector:multicast(S#state.collector_pid, last),
- noreply(S);
- 'R' ->
- et_collector:multicast(S#state.collector_pid, refresh),
- noreply(S);
-
- 'a' ->
- S2 = S#state{display_mode = all},
- S3 = refresh_main_window(S2),
- noreply(S3);
-
- 'equal' ->
- Scale = S#state.scale,
- Actors = [A#actor.name || A <- S#state.actors],
- open_viewer(Scale, S#state.active_filter, Actors, S),
- noreply(S);
- 'plus' ->
- Scale = S#state.scale + 1,
- Actors = [A#actor.name || A <- S#state.actors],
- open_viewer(Scale, S#state.active_filter, Actors, S),
- noreply(S);
- 'minus' ->
- case S#state.scale of
- 1 ->
- gs:config(S#state.canvas, beep);
- Scale ->
- Actors = [A#actor.name || A <- S#state.actors],
- open_viewer(Scale - 1, S#state.active_filter, Actors, S)
- end,
- noreply(S);
- 0 ->
- case lists:keysearch(?DEFAULT_FILTER_NAME, #filter.name, S#state.filters) of
- {value, F} when is_record(F, filter) ->
- open_viewer(S#state.scale, F#filter.name, [?unknown], S);
- false ->
- gs:config(S#state.canvas, beep)
- end,
- noreply(S);
- Int when is_integer(Int), Int > 0, Int =< 9 ->
- case catch lists:nth(Int, S#state.filters) of
- F when is_record(F, filter) ->
- open_viewer(S#state.scale, F#filter.name, [?unknown], S);
- {'EXIT', _} ->
- gs:config(S#state.canvas, beep)
- end,
- noreply(S);
-
- 'Shift_L' ->
- noreply(S);
- 'Shift_R' ->
- noreply(S);
- 'Caps_Lock' ->
- noreply(S);
-
- _ ->
- click_error(Key, S),
- noreply(S)
- end;
-handle_info({gs, _Obj,configure, [], [W, H | _]}, S) ->
- gs:config(S#state.packer, [{width, W}, {height, H}]),
- S2 = S#state{width = W, height = H},
- noreply(S2);
-handle_info(timeout, S) ->
- Try =
- case S#state.display_mode of
- {search_actors, reverse, _, _} ->
- -10;
- _ ->
- 10
- end,
- if
- S#state.is_suspended =:= true ->
- {noreply, S, infinity};
- S#state.max_events =:= infinity ->
- display_more_events(Try, S);
- true ->
- Needed = S#state.max_events - queue_length(S#state.events),
- if
- Needed =< 0 -> {noreply, S, infinity};
- Needed > 10 -> display_more_events(Try, S);
- Needed =< 10 -> display_more_events(Needed, S)
- end
- end;
-
-handle_info({'EXIT', Pid, Reason}, S) ->
- if
- Pid =:= S#state.collector_pid ->
- unlink(Pid),
- gs:destroy(S#state.win),
- {stop, Reason, S};
- Pid =:= S#state.parent_pid ->
- unlink(Pid),
- gs:destroy(S#state.win),
- {stop, Reason, S};
- true ->
- noreply(S)
- end;
-handle_info(Info, S) ->
- ok = error_logger:format("~p(~p): handle_info(~p, ~p)~n",
- [?MODULE, self(), Info, S]),
- noreply(S).
-
-%%----------------------------------------------------------------------
-%% Func: terminate/2
-%% Purpose: Shutdown the server
-%% Returns: any (ignored by gen_server)
-%%----------------------------------------------------------------------
-
-terminate(_Reason, _S) ->
- ignore.
-
-%%----------------------------------------------------------------------
-%% Func: code_change/3
-%% Purpose: Convert process state when code is changed
-%% Returns: {ok, NewState}
-%%----------------------------------------------------------------------
-
-code_change(_OldVsn, S, _Extra) ->
- {ok, S}.
-
-%%%----------------------------------------------------------------------
-%%% Handle suspend/resume
-%%%----------------------------------------------------------------------
-
-reply(Reply, S) ->
- case queue_length(S#state.events) of
- _ when S#state.is_suspended =:= true ->
- {reply, Reply, S, infinity};
- _ when S#state.max_events =:= infinity ->
- {reply, Reply, S, 500};
- N when N >= S#state.max_events ->
- {reply, Reply, S, infinity};
- _ ->
- {reply, Reply, S, 0}
- end.
-
-noreply(S) ->
- case queue_length(S#state.events) of
- _ when S#state.is_suspended =:= true ->
- {noreply, S, infinity};
- _ when S#state.max_events =:= infinity ->
- {noreply, S, 500};
- N when N >= S#state.max_events ->
- {noreply, S, infinity};
- _ ->
- {noreply, S, 0}
- end.
-
-do_suspend(S) ->
- config_suspend(S#state{is_suspended = true}).
-
-do_resume(S) ->
- config_suspend(S#state{is_suspended = false}).
-
-config_suspend(S) ->
- Suspended = S#state.is_suspended,
- gs:config(refresh, [{enable, not Suspended}]),
- gs:config(refresh_all, [{enable, not Suspended}]),
- gs:config(clear_all, [{enable, not Suspended}]),
- S.
-
-refresh_main_window(S) ->
- Pid = S#state.collector_pid,
- Key = S#state.first_event,
- case et_collector:iterate(Pid, Key, -1) of
- Prev when Prev =:= Key ->
- scroll_first(S);
- _Prev ->
- S2 = S#state{last_event = S#state.first_event},
- clear_canvas(S2)
- end.
-
-scroll_first(S) ->
- S2 = S#state{first_event = first, last_event = first},
- clear_canvas(S2).
-
-scroll_prev(S) ->
- Try =
- case S#state.max_events of
- infinity -> -10;
- Max -> -Max
- end,
- Key = et_collector:iterate(S#state.collector_pid, S#state.first_event, Try),
- S2 = S#state{first_event = Key, last_event = Key},
- clear_canvas(S2).
-
-scroll_next(S) ->
- S2 = S#state{first_event = S#state.last_event},
- clear_canvas(S2).
-
-scroll_up(S) ->
- Key = et_collector:iterate(S#state.collector_pid, S#state.first_event, -5),
- S2 = S#state{first_event = Key, last_event = Key},
- clear_canvas(S2).
-
-scroll_down(S) ->
- Key = et_collector:iterate(S#state.collector_pid, S#state.first_event, 5),
- S2 = S#state{first_event = Key, last_event = Key},
- clear_canvas(S2).
-
-scroll_last(S) ->
- S2 = S#state{first_event = last, last_event = last},
- clear_canvas(S2).
-
-change_display_mode(Mode, S) ->
- case Mode of
- all ->
- S2 = S#state{display_mode = Mode},
- refresh_main_window(S2);
- {search_actors, _Dir, _Key, []} ->
- S2 = S#state{display_mode = all},
- refresh_main_window(S2);
- {search_actors, _Dir, Key, Actors} when is_list(Actors) ->
- Pid = S#state.collector_pid,
- Prev = et_collector:iterate(Pid, Key, -1),
- S2 = S#state{first_event = Prev,
- last_event = Prev,
- display_mode = Mode},
- clear_canvas(S2)
- end.
-
-close_all(S) ->
- et_collector:multicast(S#state.collector_pid, close),
- timer:sleep(timer:seconds(1)),
- spawn(et_collector, stop, [S#state.collector_pid]),
- gs:destroy(S#state.win),
- {stop, shutdown, S}.
-
-close_all_others(S) ->
- Fun =
- fun({{subscriber, Pid}, _}) ->
- if
- Pid =:= self() ->
- ignore;
- true ->
- unlink(Pid),
- Pid ! {et, close}
- end
- end,
- All = et_collector:dict_match(S#state.collector_pid,
- {{subscriber, '_'}, '_'}),
- lists:foreach(Fun, All),
- noreply(S).
-
-click_error(Click, S) ->
- gs:config(S#state.canvas, beep),
- io:format("~p: ignored: ~p~n", [?MODULE, Click]).
-
-%%%----------------------------------------------------------------------
-%%% Clone viewer
-%%%----------------------------------------------------------------------
-
-open_viewer(Scale, FilterName, Actors, S) ->
- Filters = [{dict_insert, {filter, F#filter.name}, F#filter.function}
- || F <- S#state.filters],
- Options =
- [{parent_pid, S#state.parent_pid},
- {title, S#state.title},
- {collector_pid, S#state.collector_pid},
- {is_suspended, S#state.is_suspended},
- {detail_level, S#state.detail_level},
- {active_filter, FilterName},
- {event_order, S#state.event_order},
- {first_event, S#state.first_event},
- {max_events, S#state.max_events},
- {max_actors, S#state.max_actors},
- {hide_actions, S#state.hide_actions},
- {hide_unknown, S#state.hide_unknown},
- {is_suspended, S#state.is_suspended},
- {actors, Actors},
- {scale, Scale},
- {width, S#state.width},
- {height, S#state.height} | Filters],
- case start_link(Options) of
- {ok, ViewerPid} ->
- unlink(ViewerPid),
- ok;
- {error, Reason} ->
- ok = error_logger:format("~p: Failed to start a new window: ~p~n",
- [?MODULE, Reason])
- end.
-
-%%%----------------------------------------------------------------------
-%%% Handle graphics
-%%%----------------------------------------------------------------------
-
-create_main_window(S) ->
- Font = select_font(S#state.scale),
- GS = gs:start(),
- Name = name_to_string(S#state.active_filter),
- Title = case S#state.title of
- undefined -> atom_to_list(?MODULE);
- Explicit -> name_to_string(Explicit)
- end,
- WinOpt = [{title, Title ++ " (filter: " ++ Name ++ ")"},
- {configure, true},
- {width, S#state.width},
- {height, S#state.height}],
- Win = gs:window(GS, WinOpt),
- Bar = gs:menubar(Win, []),
-
- create_file_menu(Bar),
- create_viewer_menu(Bar),
- create_collector_menu(Bar),
- gs:menubutton(filter_button, Bar, [{label, {text, "Filter"}}]),
- create_filter_menu(S#state.active_filter, S#state.filters),
- create_help_menu(Bar),
-
- config_suspend(S),
-
- PackerOpt = [{packer_x, [{fixed, 5}, {fixed, 40}, {fixed, 40},
- {stretch, 1}, {fixed, 5}]},
- {packer_y, [{fixed, 30}, {fixed, 30},
- {stretch, 1}, {fixed, 30}]},
- {x, 0}, {y, 30}],
- Packer = gs:frame(Win, PackerOpt),
- gs:checkbutton(suspended, Packer, [{label,{text,"Freeze"}},
- {x, 10}, {y, 0},
- {width, 120}, {align, w},
- {select, S#state.is_suspended}]),
- gs:checkbutton(hide_actions, Packer, [{label,{text,"Hide From=To"}},
- {x, 10}, {y, 20},
- {width, 120}, {align, w},
- {select, S#state.hide_actions}]),
- gs:checkbutton(hide_unknown, Packer, [{label,{text,"Hide Unknown"}},
- {x, 10}, {y, 40},
- {width, 120}, {align, w},
- {select, S#state.hide_unknown}]),
- gs:scale(Packer, [{text,"Detail Level"},
- {range, {?detail_level_min, ?detail_level_max}},
- {orient, horizontal},
- {x, 150}, {y, 0}, {height, 65}, {width, 200},
- {pos, S#state.detail_level}, {data, detail_level}]),
- CanvasW = calc_canvas_width(S),
- CanvasH = calc_canvas_height(S),
- CanOpt = [{pack_xy, {{2, 4}, 3}}, {vscroll, right}, {hscroll, bottom},
- {scrollregion, {2, 2, CanvasW, CanvasH}}],
- Canvas = gs:canvas(Packer, CanOpt),
- gs:config(Canvas, [{buttonpress, true}, {buttonrelease, true}]),
- gs:config(Packer, [{width, S#state.width}, {height, S#state.height}]),
- gs:config(Win, [{map, true}, {keypress, true}]),
- S2 = S#state{title = Title,
- win = Win, font = Font, packer = Packer,
- canvas_width = CanvasW, canvas_height = CanvasH,
- canvas = Canvas,
- y_pos = ?initial_y * S#state.scale},
- draw_all_actors(S2).
-
-select_font(Scale) when is_integer(Scale) ->
- case Scale of
- 1 -> {courier, 7};
- 2 -> {courier, 10};
- 3 -> {courier, 12};
- 4 -> {courier, 14};
- S -> {courier, S * 4}
- end.
-
-create_file_menu(Bar) ->
- Button = gs:menubutton(Bar, [{label, {text, "File"}}]),
- Menu = gs:menu(Button, []),
- gs:menuitem(close_all, Menu, [{label, {text, "Close Collector and all Viewers (C) "}}]),
- gs:menuitem(close_all_others, Menu, [{label, {text, "Close other Viewers, but keep Collector (c)"}}]),
- gs:menuitem(close, Menu, [{label, {text, "Close this Viewer, but keep Collector"}}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
-
- gs:menuitem(clear_all, Menu, [{label, {text, "Clear Collector"}}]),
- gs:menuitem(load_all, Menu, [{label, {text, "Load Collector from the file \"et_viewer.log\""}}]),
- gs:menuitem(save_all, Menu, [{label, {text, "Save Collector to the file \"et_viewer.log\""}}]).
-
-create_viewer_menu(Bar) ->
- Button = gs:menubutton(Bar, [{label, {text, "Viewer"}}]),
- Menu = gs:menu(Button, []),
- gs:menuitem(Menu, [{label, {text, "Scroll this Viewer"}}, {bg, lightblue}, {enable,false}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
- gs:menuitem(first, Menu, [{label, {text, "First (f)"}}]),
- gs:menuitem(prev, Menu, [{label, {text, "Prev (p)"}}]),
- gs:menuitem(next, Menu, [{label, {text, "Next (n)"}}]),
- gs:menuitem(last, Menu, [{label, {text, "Last (l)"}}]),
- gs:menuitem(refresh, Menu, [{label, {text, "Refresh (r)"}}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
- gs:menuitem(up, Menu, [{label, {text, "Up 5 (Up)"}}]),
- gs:menuitem(down, Menu, [{label, {text, "Down 5 (Down)"}}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
- gs:menuitem(Menu, [{label, {text, "Search in this Viewer"}}, {bg, lightblue}, {enable,false}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
- gs:menuitem({mode, all}, Menu, [{label, {text, "Abort search. Display all (a)"}}]).
-
-create_collector_menu(Bar) ->
- Button = gs:menubutton(Bar, [{label, {text, "Collector"}}]),
- Menu = gs:menu(Button, []),
- gs:menuitem(Menu, [{label, {text, "Scroll all Viewers"}}, {bg, lightblue}, {enable,false}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
- gs:menuitem(first_all, Menu, [{label, {text, "First (F)"}}]),
- gs:menuitem(prev_all, Menu, [{label, {text, "Prev (P)"}}]),
- gs:menuitem(next_all, Menu, [{label, {text, "Next (N)"}}]),
- gs:menuitem(last_all, Menu, [{label, {text, "Last (L)"}}]),
- gs:menuitem(refresh_all, Menu, [{label, {text, "Refresh (R)"}}]).
-
-create_filter_menu(ActiveFilterName, Filters) ->
- Menu = gs:menu(filter_menu, filter_button, []),
- Item = fun(F, N) when F#filter.name =:= collector ->
- Label = lists:concat([pad_string(F#filter.name, 20), "(0)"]),
- gs:menuitem(Menu, [{label, {text, Label}}, {data, F}]),
- N + 1;
- (F, N) ->
- Label = lists:concat([pad_string(F#filter.name, 20), "(", N, ")"]),
- gs:menuitem(Menu, [{label, {text, Label}}, {data, F}]),
- N + 1
- end,
- gs:menuitem(Menu, [{label, {text, "Same Filter New Scale"}}, {bg, lightblue}, {enable,false}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
- {value, Filter} = lists:keysearch(ActiveFilterName, #filter.name, Filters),
- Same = lists:concat([pad_string(ActiveFilterName, 20), "(=)"]),
- Larger = lists:concat([pad_string(ActiveFilterName, 20), "(+)"]),
- Smaller = lists:concat([pad_string(ActiveFilterName, 20), "(-)"]),
- gs:menuitem(Menu, [{label, {text, Same}}, {data, Filter}]),
- gs:menuitem(Menu, [{label, {text, Smaller}}, {data, Filter}]),
- gs:menuitem(Menu, [{label, {text, Larger}}, {data, Filter}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
- gs:menuitem(Menu, [{label, {text, "New Filter Same Scale"}}, {bg, lightblue}, {enable,false}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
- lists:foldl(Item, 1, Filters).
-
-create_help_menu(Bar) ->
- Button = gs:menubutton(Bar, [{label, {text, "Help"}}]),
- Menu = gs:menu(Button, []),
- gs:menuitem(Menu, [{label, {text, "Display details of an event"}},
- {bg, lightblue}, {enable,false}]),
- gs:menuitem(Menu, [{label, {text, " Single click on the name tag or the arrow (Mouse-1)"}},
- {enable,false}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
- gs:menuitem(Menu, [{label, {text, "Toggle actor search"}},
- {bg, lightblue}, {enable,false}]),
- gs:menuitem(Menu, [{label, {text, " Single click on the name tag (Mouse-1)"}},
- {enable,false}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
- gs:menuitem(Menu, [{label, {text, "Move actor"}},
- {bg, lightblue}, {enable,false}]),
- gs:menuitem(Menu, [{label, {text, " se drag and drop on name tag (Mouse-1)"}},
- {enable,false}]).
-
-clear_canvas(S) ->
- gs:destroy(S#state.canvas),
- CanvasW = calc_canvas_width(S),
- CanvasH = calc_canvas_height(S),
- CanOpt = [{pack_xy, {{2, 4}, 3}}, {vscroll, right}, {hscroll, bottom},
- {scrollregion, {2, 2, CanvasW, CanvasH}}],
- Canvas = gs:canvas(S#state.packer, CanOpt),
- gs:config(S#state.packer, [{width, S#state.width}, {height, S#state.height}]),
- gs:config(Canvas, [{buttonpress, true}, {buttonrelease, true}]),
- S2 = S#state{refresh_needed = false,
- y_pos = ?initial_y * S#state.scale,
- canvas = Canvas,
- canvas_width = CanvasW,
- canvas_height = CanvasH,
- events = queue_new()},
- draw_all_actors(S2).
-
-calc_canvas_width(S) ->
- Min = calc_min_actors(S),
- CanvasW = ((2 * ?initial_x) + (Min * ?incr_x)) * S#state.scale,
- lists:max([CanvasW, S#state.width - (15 * S#state.scale), S#state.canvas_width]).
-
-calc_canvas_height(S) ->
- Min = calc_min_events(S),
- CanvasH = ((2 * ?initial_y) + (Min * ?incr_y)) * S#state.scale,
- lists:max([CanvasH, S#state.height - (4 * 30), S#state.canvas_height]).
-
-calc_min_actors(S) ->
- Max = S#state.max_actors,
- N = length(S#state.actors),
- if
- Max =:= infinity ->
- N * 2;
- Max < N ->
- N;
- true ->
- Max
- end.
-
-calc_min_events(S) ->
- Max = S#state.max_events,
- N = queue_length(S#state.events),
- if
- Max =:= infinity ->
- N * 2;
- Max < N ->
- N;
- true ->
- Max
- end.
-
-display_more_events(Try, S) ->
- Name = S#state.active_filter,
- {value, F} = lists:keysearch(Name, #filter.name, S#state.filters),
- FilterFun = F#filter.function,
- Fun = fun(Event, State) ->
- case catch FilterFun(Event) of
- true ->
- State2 = ensure_key(Event, State),
- opt_display_event(Event, State2);
- {true, Event2} ->
- State2 = ensure_key(Event2, State),
- opt_display_event(Event2, State2);
- false ->
- ensure_key(Event, State);
- Bad ->
- Contents = {bad_filter, Name, Bad, Event},
- Event2 = Event#event{contents = Contents,
- from = bad_filter,
- to = bad_filter},
- State2 = ensure_key(Event2, State),
- opt_display_event(Event2, State2)
- end
- end,
- Pid = S#state.collector_pid,
- S2 = et_collector:iterate(Pid, S#state.last_event, Try, Fun, S),
- case queue_length(S2#state.events) - queue_length(S#state.events) of
- Diff when Diff =:= Try ->
- %% Got as much as requested, look for more
- %% io:format("Done: ~p~n", [{Try, Diff}]),
- {noreply, S2, 0};
- _Diff when S2#state.first_event =:= S#state.first_event,
- S2#state.last_event =:= S#state.last_event ->
- %% Got lesser than requested, wait a while before looking for more
- %% io:format("More: ~p~n", [{Try, Diff}]),
- {noreply, S2, 500};
- _Diff ->
- %% Got lesser than requested, look for more
- %% io:format("More2: ~p~n", [{Try, Diff}]),
- {noreply, S2, 0}
- end.
-
-ensure_key(E, S) when is_record(E, event), is_record(S, state) ->
- Key = et_collector:make_key(S#state.event_order, E),
- case S#state.first_event of
- first ->
- S#state{first_event = Key, last_event = Key};
- last ->
- S#state{first_event = Key, last_event = Key};
- _ ->
- S#state{last_event = Key}
- end.
-
-opt_display_event(E, S) ->
- case S#state.display_mode of
- all ->
- display_event(E, S);
- {search_actors, _Dir, _FirstKey, Actors} ->
- %% Key = S#state.last_event,
- From = select_actor_name(E#event.from, S),
- case lists:member(From, Actors) of
- true ->
- display_event(E, S);
- false ->
- To = select_actor_name(E#event.to, S),
- case lists:member(To, Actors) of
- true ->
- display_event(E, S);
- false ->
- S
- end
- end
- end.
-
-select_actor_name(Name, S) ->
- case lists:keymember(Name, #actor.name, S#state.actors) of
- true -> Name;
- false -> ?unknown
- end.
-
-display_event(E, S) when E#event.detail_level < S#state.detail_level ->
- {FromRefresh, From} = ensure_actor(E#event.from, S),
- {FromName, FromPos, S2} = From,
- {ToRefresh, To} = ensure_actor(E#event.to, S2),
- {ToName, ToPos, S3} = To,
- if
- FromRefresh =/= false, ToRefresh =/= false ->
- Key = S#state.last_event,
- refresh_beep(S),
- S3#state{refresh_needed = true,
- events = queue_in(Key, S3#state.events)};
- FromName =:= ToName ->
- case S#state.hide_actions of
- true ->
- S3;
- false ->
- Label = name_to_string(E#event.label),
- draw_named_arrow(Label, FromName, FromPos, ToName, ToPos, S3)
- end;
- true ->
- Label = name_to_string(E#event.label),
- draw_named_arrow(Label, FromName, FromPos, ToName, ToPos, S3)
- end;
-display_event(_, S) ->
- S.
-
-draw_named_arrow(Label, FromName, FromPos, ToName, ToPos, S) ->
- Key = S#state.last_event,
- case S#state.y_pos + (?incr_y * S#state.scale) of
- _ when S#state.hide_unknown =:= true, FromName =:= ?unknown ->
- S;
- _ when S#state.hide_unknown =:= true, ToName =:= ?unknown ->
- S;
- Y when Y > S#state.canvas_height ->
- refresh_beep(S),
- S#state{refresh_needed = true,
- events = queue_in(Key, S#state.events)};
- Y ->
- S2 = S#state{y_pos = Y, events = queue_in(Key, S#state.events)},
- S3 = draw_arrow(FromPos, ToPos, S2),
- draw_label(Label, FromName, ToName, FromPos, ToPos, S3)
- end.
-
-refresh_beep(S) ->
- case S#state.refresh_needed of
- false ->
- gs:config(S#state.canvas, beep),
- gs:config(S#state.canvas, beep),
- gs:config(S#state.canvas, beep);
- true ->
- ignore
- end.
-
-draw_arrow(Pos, Pos, S) ->
- S;
-draw_arrow(FromPos, ToPos, S) ->
- Y = S#state.y_pos,
- CanOpts = [{coords, [{FromPos , Y}, {ToPos, Y}]},
- {arrow, last},{width, 1}, {fg, black}],
- gs:line(S#state.canvas, CanOpts),
- S.
-
-draw_label(Label, FromName, ToName, FromPos, ToPos, S) ->
- Colour =
- if
- FromName =:= ?unknown,
- ToName =:= ?unknown -> blue; %turquoise;
- FromName =:= ?unknown -> orange;
- ToName =:= ?unknown -> orange;
- FromPos =:= ToPos -> blue;
- true -> red
- end,
- Scale = S#state.scale,
- X = lists:min([FromPos, ToPos]) + (6 * Scale),
- Y = S#state.y_pos,
- write_text(Label, X, Y, Colour, S),
- S.
-
-draw_all_actors(State) ->
- Scale = State#state.scale,
- Fun = fun(A, X) ->
- draw_actor(A, X, State),
- X + (?incr_x * Scale)
- end,
- lists:foldl(Fun, ?initial_x * Scale, State#state.actors),
- State.
-
-%% Returns: {NeedsRefreshBool, {ActorPos, NewsS, NewActors}}
-ensure_actor(Name, S) ->
- do_ensure_actor(Name, S, S#state.actors, 0).
-
-do_ensure_actor(Name, S, [H | _], N) when H#actor.name =:= Name ->
- Pos = (?initial_x + (N * ?incr_x)) * S#state.scale,
- {false, {Name, Pos, S}};
-do_ensure_actor(Name, S, [_ | T], N) ->
- do_ensure_actor(Name, S, T, N + 1);
-do_ensure_actor(Name, S, [], N) ->
- %% A brand new actor, let's see if it does fit
- Pos = (?initial_x + (N * ?incr_x)) * S#state.scale,
- MaxActors = S#state.max_actors,
- if
- is_integer(MaxActors), N > MaxActors ->
- %% Failed on max_actors limit, put into unknown
- %% Assume that unknown always is in actor list
- ensure_actor(?unknown, S);
- Pos > (S#state.canvas_width - ((?initial_x - 15) * S#state.scale)) ->
- %% New actor does not fit in canvas, refresh needed
- A = create_actor(Name),
- draw_actor(A, Pos, S),
- {true, {Name, Pos, S#state{actors = S#state.actors ++ [A]}}};
- true ->
- %% New actor fits in canvas. Draw the new actor.
- A = create_actor(Name),
- draw_actor(A, Pos, S),
- {false, {Name, Pos, S#state{actors = S#state.actors ++ [A]}}}
- end.
-
-draw_actor(A, LineX, S) ->
- Scale = S#state.scale,
- TextX = LineX - (5 * Scale),
- TextY = ?initial_y * Scale,
- LineTopY = TextY + ((?incr_y / 2) * Scale),
- LineBotY = S#state.canvas_height - ((?incr_y / 2) * Scale),
- Colour = case A#actor.name of
- ?unknown -> orange;
- _ -> red
- end,
- write_text(A#actor.string, TextX, TextY, Colour, S),
- LineOpt = [{coords, [{LineX, LineTopY}, {LineX, LineBotY}]},
- {width, 1}, {fg, Colour}],
- gs:line(S#state.canvas, LineOpt).
-
-toggle_search_for_actor(ActorName,S) ->
- case S#state.display_mode of
- all ->
- io:format("~p: search for: ~p ++ ~p~n", [?MODULE, [], [ActorName]]),
- %% Search for this actor
- Key = S#state.first_event,
- Actors = [ActorName],
- Mode = {search_actors, forward, Key, Actors},
- change_display_mode(Mode, S);
- {search_actors, Dir, Key, Actors}->
- Actors2 =
- case lists:member(ActorName, Actors) of
- true ->
- io:format("~p: search for: ~p -- ~p~n", [?MODULE, Actors, [ActorName]]),
- %% Remove actor from search list
- Actors -- [ActorName];
- false ->
- io:format("~p: search for: ~p ++ ~p~n", [?MODULE, Actors, [ActorName]]),
- %% Add actor from search list
- [ActorName | Actors]
- end,
- Mode2 = {search_actors, Dir, Key, Actors2},
- change_display_mode(Mode2, S)
- end.
-
-move_actor(From, To, Actors, S) ->
- Pos = #actor.name,
- ToName = To#actor.name,
- FromName = From#actor.name,
- ToIx = actor_index(ToName, Pos, Actors),
- FromIx = actor_index(FromName, Pos, Actors),
- if
- FromIx =/= 0, ToIx =/= 0, ToIx > FromIx ->
- Actors2 = lists:keydelete(FromName, Pos, Actors),
- Actors3 = insert_actor_after(From, To, Actors2),
- S2 = S#state{actors = Actors3},
- refresh_main_window(S2);
- FromIx =/= 0, ToIx =/= 0 ->
- Actors2 = lists:keydelete(FromName, Pos, Actors),
- Actors3 = insert_actor_before(From, To, Actors2),
- S2 = S#state{actors = Actors3},
- refresh_main_window(S2);
- true ->
- %% Ignore
- S
- end.
-
-insert_actor_after(From, To, [H | T]) ->
- case To#actor.name =:= H#actor.name of
- true -> [H, From | T];
- false -> [H | insert_actor_after(From, To, T)]
- end;
-insert_actor_after(_From, _To, []) ->
- [].
-
-insert_actor_before(From, To, [H | T]) ->
- case To#actor.name =:= H#actor.name of
- true -> [From, H | T];
- false -> [H | insert_actor_before(From, To, T)]
- end;
-insert_actor_before(_From, _To, []) ->
- [].
-
-actor_index(_Key, _Pos, []) ->
- 0;
-actor_index(Key, Pos, [H | T]) ->
- case Key =:= element(Pos, H) of
- false -> actor_index(Key, Pos, T) + 1;
- true -> 1
- end.
-
-y_to_n(Y, S) ->
- Y2 = ((Y / S#state.scale) - ?initial_y + (?incr_y / 2)),
- N = round(Y2 / ?incr_y - 0.2),
- MaxN = queue_length(S#state.events),
- if
- N =< 0 -> actor;
- N > MaxN -> actor;
- true -> {event, N}
- end.
-
-x_to_n(X, S) ->
- Scale = S#state.scale,
- Len = length(S#state.actors),
- X2 = X - (?initial_x * Scale),
- N = X2 / (?incr_x * Scale),
- N2 = trunc(N + 1.5),
- if
- N2 > Len -> Len;
- N2 < 1 -> 1;
- true -> N2
- end.
-
-write_text(Text, X, Y, Colour, S) ->
- Opt = [{coords, [{X, Y - (?incr_y * S#state.scale / 2)}]},
- {font, S#state.font}, {fg, Colour}, {text, Text}],
- gs:text(S#state.canvas, Opt).
-
-create_contents_window(Event, S) ->
- Options = [{viewer_pid, self()},
- {event, Event},
- {event_order, S#state.event_order},
- {active_filter, S#state.active_filter}
- | S#state.filters],
- case et_gs_contents_viewer:start_link(Options) of
- {ok, _Pid} ->
- S;
- {error, Reason} ->
- ok = error_logger:format("~p(~p): create_contents_window(~p) ->~n ~p~n",
- [?MODULE, self(), Options, Reason]),
- S
- end.
-
-%%%----------------------------------------------------------------------
-%%% String padding of actors
-%%%----------------------------------------------------------------------
-
-create_actor(Name) ->
- String = name_to_string(Name),
- PaddedString = pad_string(String, 8),
- #actor{name = Name, string = PaddedString}.
-
-name_to_string(Name) ->
- case catch io_lib:format("~s", [Name]) of
- {'EXIT', _} -> lists:flatten(io_lib:format("~w", [Name]));
- GoodString -> lists:flatten(GoodString)
- end.
-
-pad_string(Atom, MinLen) when is_atom(Atom) ->
- pad_string(atom_to_list(Atom), MinLen);
-pad_string(String, MinLen) when is_integer(MinLen), MinLen >= 0 ->
- Len = length(String),
- case Len >= MinLen of
- true ->
- String;
- false ->
- String ++ lists:duplicate(MinLen - Len, $ )
- end.
-
-%%%----------------------------------------------------------------------
-%%% Queue management
-%%%----------------------------------------------------------------------
-
-queue_new() ->
- {0, [], []}.
-
-queue_in(X, {Size, In, Out}) ->
- {Size + 1, [X | In], Out}.
-
-%% queue_out(Q) ->
-%% case Q of
-%% {Size, In, [H | Out]} -> {{value, H}, {Size - 1, In, Out}};
-%% {Size, [], []} -> {empty, {Size, [], []}};
-%% {Size, In, _} -> queue_out({Size, [], lists:reverse(In)})
-%% end.
-
-queue_to_list({_Size, [], Out}) ->
- Out;
-queue_to_list({_Size, In, Out}) ->
- Out ++ lists:reverse(In).
-
-queue_length({Size, _In, _Out}) ->
- Size.
-
-list_to_queue(List) when is_list(List) ->
- {length(List), [], List}.
diff --git a/lib/et/src/et_viewer.erl b/lib/et/src/et_viewer.erl
index d9bd01f8d0..ead5639da6 100644
--- a/lib/et/src/et_viewer.erl
+++ b/lib/et/src/et_viewer.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2013. 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
@@ -76,7 +76,7 @@ start() ->
%% start(Options) -> {ok, ViewerPid} | {error, Reason}
%%----------------------------------------------------------------------
-start(GUI) when GUI =:= wx; GUI =:= gs; GUI =:= default ->
+start(GUI) when GUI =:= wx; GUI =:= default ->
start_link([{trace_global, true}], GUI);
start(Options) ->
start_link([{parent_pid, undefined} | Options], default).
@@ -139,7 +139,7 @@ start(Options, GUI) ->
%% and returns false | true | {true, NewEvent}.
%%----------------------------------------------------------------------
-start_link(GUI) when GUI =:= wx; GUI =:= gs; GUI =:= default ->
+start_link(GUI) when GUI =:= wx; GUI =:= default ->
start_link([{trace_global, true}], GUI);
start_link(Options) ->
start_link(Options, default).
@@ -148,22 +148,11 @@ start_link(Options, GUI) ->
case GUI of
wx ->
et_wx_viewer:start_link(Options);
- gs ->
- et_gs_viewer:start_link(Options);
default ->
start_link(Options, which_gui())
end.
-
-which_gui() ->
- try
- wx:new(),
- wx:destroy(),
- wx
- catch _:_ ->
- gs
- end.
-
+which_gui() -> wx.
get_collector_pid(ViewerPid) ->
call(ViewerPid, get_collector_pid).
diff --git a/lib/et/src/modules.mk b/lib/et/src/modules.mk
index 8d6c0902fb..b2d2f0b481 100644
--- a/lib/et/src/modules.mk
+++ b/lib/et/src/modules.mk
@@ -1,7 +1,7 @@
#-*-makefile-*- ; force emacs to enter makefile-mode
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2010. All Rights Reserved.
+# Copyright Ericsson AB 2001-2013. 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
@@ -19,8 +19,6 @@
MODULES = \
et \
et_collector \
- et_gs_contents_viewer \
- et_gs_viewer \
et_selector \
et_viewer \
et_wx_contents_viewer \
diff --git a/lib/hipe/tools/Makefile b/lib/hipe/tools/Makefile
index 3ce8ad5dd7..ed80eb075b 100644
--- a/lib/hipe/tools/Makefile
+++ b/lib/hipe/tools/Makefile
@@ -42,7 +42,7 @@ RELSYSDIR = $(RELEASE_PATH)/lib/hipe-$(VSN)
# ----------------------------------------------------
# Target Specs
# ----------------------------------------------------
-MODULES = hipe_tool hipe_profile hipe_jit
+MODULES = hipe_profile hipe_jit
# hipe_timer
HRL_FILES=
@@ -110,5 +110,4 @@ realclean: clean
# ----------------------------------------------------
$(EBIN)/hipe_ceach.beam: ../main/hipe.hrl
-$(EBIN)/hipe_tool.beam: ../main/hipe.hrl
diff --git a/lib/hipe/tools/hipe_tool.erl b/lib/hipe/tools/hipe_tool.erl
deleted file mode 100644
index efcf073efa..0000000000
--- a/lib/hipe/tools/hipe_tool.erl
+++ /dev/null
@@ -1,525 +0,0 @@
-%% -*- erlang-indent-level: 2 -*-
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2002-2012. 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%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Copyright (c) 2002 by Erik Johansson.
-%% ====================================================================
-%% Module : hipe_tool
-%% Purpose :
-%% Notes :
-%% History : * 2002-03-13 Erik Johansson ([email protected]): Created.
-%% ====================================================================
-%% Exports :
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
--module(hipe_tool).
--compile([{nowarn_deprecated_function,{gs,button,3}},
- {nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,editor,3}},
- {nowarn_deprecated_function,{gs,label,3}},
- {nowarn_deprecated_function,{gs,listbox,3}},
- {nowarn_deprecated_function,{gs,menu,3}},
- {nowarn_deprecated_function,{gs,menubar,3}},
- {nowarn_deprecated_function,{gs,menubutton,3}},
- {nowarn_deprecated_function,{gs,menuitem,2}},
- {nowarn_deprecated_function,{gs,start,0}},
- {nowarn_deprecated_function,{gs,window,3}}]).
-
--export([start/0]).
-
-%%---------------------------------------------------------------------
-
--include("../main/hipe.hrl").
-
-%%---------------------------------------------------------------------
-
--define(WINDOW_WIDTH, 920).
--define(WINDOW_HEIGHT, 460).
--define(DEFAULT_BG_COLOR, {217,217,217}).
--define(POLL_INTERVAL, 5000).
--define(FONT, {screen, 12}).
--define(HEADER_FONT, {screen, [bold], 12}).
--define(NORMAL_FG_COLOR, {0,0,0}).
-
-%%---------------------------------------------------------------------
-
--type fa() :: {atom(), arity()}. % {Fun,Arity}
--type fa_address() :: {atom(), arity(), non_neg_integer()}. % {F,A,Address}
-
-%%---------------------------------------------------------------------
-
--record(state, {win_created = false :: boolean(),
- mindex = 0 :: integer(),
- mod :: atom(),
- funs = [] :: [fa()],
- mods = [] :: [atom()],
- options = [o2] :: comp_options(),
- compiling = false :: 'false' | pid()
- }).
-
-%%---------------------------------------------------------------------
-
--spec start() -> pid().
-
-start() ->
- spawn(fun () -> init() end).
-
-init() ->
- process_flag(trap_exit, true),
- gs:start(),
- S = init_window(#state{}),
- loop(S).
-
--spec loop(#state{}) -> no_return().
-
-loop(State) ->
- receive
- {gs, code_listbox, click, Data, [Idx, Txt | _]} ->
- NewState = update_module_box(State,Idx,Data,Txt),
- loop(NewState);
- {gs, module_listbox, click, Data, [Idx, _Txt | _]} ->
- NewState = update_fun(State,Idx,Data),
- loop(NewState);
- {gs, compmod, click, _, _} ->
- loop(compile(State));
- {gs, prof, click, [], ["Turn off\nProfiling"]} ->
- hipe_profile:prof_module_off(State#state.mod),
- loop(update_module_box(State,State#state.mindex,State#state.mods,""));
- {gs, prof, click, [], _} ->
- hipe_profile:prof_module(State#state.mod),
- loop(update_module_box(State,State#state.mindex,State#state.mods,""));
- {gs, win, configure, _, _} ->
- gs:config(win, [{width, ?WINDOW_WIDTH}, {height, ?WINDOW_HEIGHT}]),
- loop(State);
-
- show_window when State#state.win_created =:= true ->
- gs:config(win, [raise]),
- loop(State);
- show_window when State#state.win_created =:= false ->
- loop((init_window(State))#state{win_created = true});
-
- {gs, _Id, click, close_menu, _Args} ->
- gs:destroy(win),
- loop(State#state{win_created = false});
- {gs, _Id, keypress, _Data, [c, _, 0, 1 | _]} ->
- gs:destroy(win),
- loop(State#state{win_created = false});
- {gs, _Id, keypress, _Data, ['C', _, 1, 1 | _]} ->
- gs:destroy(win),
- loop(State#state{win_created = false});
- {gs, _Id, keypress, _Data, _Args} ->
- loop(State);
- {gs, _, destroy, _, _} ->
- loop(State#state{win_created = false});
-
- {compilation_done, _Res, Sender} ->
- case State#state.compiling of
- Sender ->
- catch gs:config(compmod, [{enable, true}]),
- update_text(compiling, ""),
- loop(update_module_box(State,
- State#state.mindex,
- State#state.mods, ""));
- _ ->
- loop(State)
- end;
-
- {'EXIT', _Pid, _Reason} ->
- exit(normal);
- _Other ->
- io:format("HiPE window received message ~p ~n", [_Other]),
- loop(State)
- after
- ?POLL_INTERVAL ->
- loop(update_code_listbox(State))
- end.
-
--spec init_window(#state{}) -> #state{}.
-
-init_window(State) ->
- create_window(State),
- gs:config(win, [{map,true}]),
- update_code_listbox(State#state{win_created = true}).
-
--spec create_window(#state{}) -> 'ok'.
-
-create_window(State) ->
- gs:window(win, gs:start(), [{width, ?WINDOW_WIDTH},
- {height, ?WINDOW_HEIGHT},
- {bg, ?DEFAULT_BG_COLOR},
- {title, "[HiPE] Code list"},
- {configure, true},
- {destroy, true},
- {cursor, arrow},
- {keypress, true}
- ]),
- create_menu(),
- Xpos = 4,
- Ypos1 = 60,
- Width = (?WINDOW_WIDTH - (Xpos*4)) div 3,
- create_labels([{mods,Ypos1-20,"Loaded Modules"}], Xpos + 1 + 3),
- Xpos2 = Xpos*2+Width,
- create_labels([{mod,Ypos1-20,"Module:"++atom_to_list(State#state.mod)},
- {ver,Ypos1,""},
- {time,Ypos1+20,""},
- {native,Ypos1+40,""},
- {compiling,Ypos1+60,""}], Xpos2),
- create_labels([{function,Ypos1-20,"Function:"},
- {nativefun,Ypos1,""}], Xpos*3+Width*2),
- Ypos = 240,
- Height1 = ?WINDOW_HEIGHT - Ypos1 - Xpos,
- Height = ?WINDOW_HEIGHT - Ypos - Xpos,
- gs:listbox(code_listbox, win, [{x, Xpos},
- {y, Ypos1},
- {width, Width},
- {height, Height1},
- {bg, {255,255,255}},
- {vscroll, right},
- {hscroll, true},
- {click, true}]),
- gs:listbox(module_listbox, win, [{x, Xpos*2+Width},
- {y, Ypos},
- {width, Width},
- {height, Height},
- {bg, {255,255,255}},
- {vscroll, right},
- {hscroll, true},
- {click, true}]),
- gs:listbox(profile_listbox, win, [{x, Xpos*3+Width*2},
- {y, Ypos1+40},
- {width, Width},
- {height, Height-60},
- {bg, {255,255,255}},
- {vscroll, right},
- {hscroll, true},
- {click, true}]),
- gs:button(compmod,win,[{label,{text,"Compile\nModule"}},
- {justify,center},
- {x,Xpos*2+Width*1},
- {height,60},
- {y,Ypos-80}]),
- gs:button(prof,win,[{label,{text,"Profile\nModule"}},
- {justify,center},
- {x,Xpos*2+Width*1+100},
- {height,60},
- {y,Ypos-80}]),
- gs:button(clearprof,win,[{label, {text,"Clear\nProfile"}},
- {justify, center},
- {x, Xpos*2+Width*1+200},
- {height, 60},
- {y, Ypos-80}]),
- gs:editor(edoc,win,[{x, Xpos*3+Width*2}, {y, Ypos},
- {width, Width}, {height, Height},
- {insert, {'end',"Edit this text!"}},
- {vscroll, right},
- {hscroll, true},
- {wrap, none}]),
- ok.
-
--spec create_menu() -> 'ok'.
-
-create_menu() ->
- gs:menubar(menubar, win, [{bg, ?DEFAULT_BG_COLOR}]),
- create_sub_menus([{mbutt, fmenu, " File",
- [{" Close Ctrl-C ",close_menu}]},
- {mbuttc,cmenu, " Compile ",
- [{" Compile Module", comp_mod}]},
- {mbuttp,pmenu, " Profile ",
- [{" Profile Module", prof_mod}]},
- {mbutte,emenu, " Edoc", [separator]},
- {mbutta,amenu, " Analyze ", [separator]},
- {mbuttb,bmenu, " Benchmark ", [separator]},
- {mbuttj,jmenu, " Jit ", [separator]}]),
- ok.
-
-create_menuitems(Parent, [{Text,Data}|Rest]) ->
- gs:menuitem(Parent, [{bg, ?DEFAULT_BG_COLOR},
- {fg, {178, 34, 34}},
- {label, {text, Text}},
- {data, Data},
- {underline, 1}
- ]),
- create_menuitems(Parent, Rest);
-create_menuitems(Parent, [separator|Rest]) ->
- gs:menuitem(Parent, [{itemtype, separator}]),
- create_menuitems(Parent, Rest);
-create_menuitems(_, []) -> ok.
-
-create_sub_menus([{Parent, Name, Text, Items}|Rest]) ->
- BG = {bg, ?DEFAULT_BG_COLOR},
- FG = {fg, {178, 34, 34}}, % firebrick
- Label = {label, {text, Text}},
- gs:menubutton(Parent, menubar, [BG, FG, Label, {underline, 1}]),
- gs:menu(Name, Parent, [BG, FG]),
- create_menuitems(Name, Items),
- create_sub_menus(Rest);
-create_sub_menus([]) -> ok.
-
-create_labels([{Name,Y,Text}|Rest], Xpos) ->
- gs:label(Name, win, [{width, (?WINDOW_WIDTH - 16) div 3},
- {height, 20},
- {x, Xpos + 1 + 3},
- {y, Y},
- {bg, ?DEFAULT_BG_COLOR},
- {fg, ?NORMAL_FG_COLOR},
- {font, ?HEADER_FONT},
- {align, w},
- {label, {text, Text}}
- ]),
- create_labels(Rest,Xpos);
-create_labels([],_) -> ok.
-
--spec update_code_listbox(#state{}) -> #state{}.
-
-update_code_listbox(State) ->
- Mods = lists:sort(mods()),
- case State#state.win_created of
- false ->
- State;
- true ->
- case Mods =:= State#state.mods of
- true -> State;
- false ->
- update_text(mods,
- "Loaded Modules ("++
- integer_to_list(length(Mods))++")"),
- catch gs:config(code_listbox, [{data, Mods},
- {items, Mods},
- {selection, 0}]),
- update_module_box(State#state{mods = Mods}, 0, Mods, "")
- end
- end.
-
--spec update_fun(#state{}, integer(), [mfa()]) -> #state{}.
-
-update_fun(State, Idx, Data) ->
- case State#state.win_created of
- false ->
- State;
- true ->
- MFA = {M,F,A} = get_selection(Idx, Data, {?MODULE,start,0}),
- update_text(function, "Function: "++mfa_to_string(MFA)),
- case in_native(F, A, native_code(M)) of
- true -> update_text(nativefun, "Native");
- false -> update_text(nativefun, "Emulated")
- end,
- State
- end.
-
-get_selection(Idx, Data, Default) ->
- try lists:nth(Idx+1, Data) catch _:_ -> Default end.
-
--spec update_module_box(#state{}, integer(), [atom()], string()) -> #state{}.
-
-update_module_box(State, Idx, Data, _Txt) ->
- case State#state.win_created of
- false ->
- State;
- true ->
- Mod = get_selection(Idx, Data, hipe_tool),
- %% io:format("~w\n", [Mod:module_info()]),
- Info = Mod:module_info(),
- Funs = lists:usort(funs(Mod)),
- MFAs = mfas(Mod, Funs),
- ModText = atom_to_list(Mod),
- update_text(mod, "Module:"++ModText),
- update_text(compmod, "Compile\nModule\n"++ModText),
- Options = get_compile(Info),
- update_text(ver, get_version(Options)),
- update_text(time, get_time(Options)),
- NativeCode = native_code(Mod),
-
- Prof = is_profiled(Mod),
- if Prof -> update_text(prof, "Turn off\nProfiling");
- true -> update_text(prof, "Profile\n"++ModText)
- end,
-
- Mode = get_mode(Funs, NativeCode),
-
- update_text(native, Mode),
- Items = fun_names(Mod, Funs, NativeCode, Prof),
-
- Selection = {selection, 0},
- catch gs:config(module_listbox, [{data, MFAs},
- {items, Items},
- Selection]),
- ProfData = [mfa_to_string(element(1, X)) ++ " " ++
- integer_to_list(element(2,X))
- || X <- hipe_profile:res(), element(2, X) > 0],
- catch gs:config(profile_listbox, [{data, ProfData},
- {items, ProfData},
- Selection]),
- get_edoc(Mod),
- update_fun(State#state{mindex = Idx, mod = Mod, funs = Funs}, 0, MFAs)
- end.
-
-update_text(Lab, Text) ->
- catch gs:config(Lab, [{label, {text, Text}}]).
-
-%%---------------------------------------------------------------------
-%% @doc Returns a list of all loaded modules.
-%%---------------------------------------------------------------------
-
--spec mods() -> [atom()].
-
-mods() ->
- [Mod || {Mod,_File} <- code:all_loaded()].
-
--spec funs(module()) -> [fa()].
-
-funs(Mod) ->
- Mod:module_info(functions).
-
--spec native_code(module()) -> [fa_address()].
-
-native_code(Mod) ->
- Mod:module_info(native_addresses).
-
--spec mfas(atom(), [fa()]) -> [mfa()].
-
-mfas(Mod, Funs) ->
- [{Mod,F,A} || {F,A} <- Funs].
-
--spec fun_names(atom(), [fa()], [fa_address()], boolean()) -> [string()].
-
-fun_names(M, Funs, NativeCode, Prof) ->
- [atom_to_list(F) ++ "/" ++ integer_to_list(A)
- ++
- (case in_native(F, A, NativeCode) of
- true -> " [native] ";
- false -> ""
- end)
- ++
- if Prof ->
- (catch integer_to_list(hipe_bifs:call_count_get({M,F,A})));
- true -> ""
- end
- || {F,A} <- Funs].
-
--spec in_native(atom(), arity(), [fa_address()]) -> boolean().
-
-in_native(F, A, NativeCode) ->
- lists:any(fun({Fun,Arity,_}) ->
- (Fun =:= F andalso Arity =:= A)
- end,
- NativeCode).
-
--spec mfa_to_string(mfa()) -> [char(),...].
-
-mfa_to_string({M,F,A}) ->
- atom_to_list(M) ++ ":" ++ atom_to_list(F) ++ "/" ++ integer_to_list(A).
-
-get_mode(Funs, NativeCode) ->
- case NativeCode of
- [] -> "Emulated";
- InNative when is_list(InNative) ->
- if length(InNative) =:= length(Funs) ->
- "Native";
- true -> "Mixed"
- end
- end.
-
-get_time(Comp) ->
- case lists:keyfind(time, 1, Comp) of
- {_, {Y,Month,D,H,Min,S}} ->
- integer_to_list(Y) ++
- "-" ++ integer_to_list(Month) ++
- "-" ++ integer_to_list(D) ++ " " ++
- integer_to_list(H) ++ ":" ++ integer_to_list(Min) ++
- ":" ++ integer_to_list(S);
- false -> ""
- end.
-
-get_version(Comp) ->
- case lists:keyfind(version, 1, Comp) of
- {_, V} when is_list(V) -> V;
- false -> ""
- end.
-
-get_cwd(Options) ->
- case lists:keyfind(cwd, 1, Options) of
- {_, V} when is_atom(V) -> atom_to_list(V);
- {_, V} -> V;
- false -> ""
- end.
-
-get_options(Comp) ->
- case lists:keyfind(options, 1, Comp) of
- {_, V} when is_list(V) -> V;
- false -> ""
- end.
-
-get_compile(Info) ->
- case lists:keyfind(compile, 1, Info) of
- {_, O} when is_list(O) -> O;
- false -> []
- end.
-
--spec is_profiled(atom()) -> boolean().
-
-is_profiled(Mod) ->
- case hipe_bifs:call_count_get({Mod,module_info,0}) of
- false -> false;
- C when is_integer(C) -> true
- end.
-
--spec compile(#state{}) -> #state{}.
-
-compile(State) ->
- catch gs:config(compmod, [{enable, false}]),
- update_text(compiling, "Compiling..."),
- Parent = self(),
- P = spawn(fun() -> c(Parent, State#state.mod, State#state.options) end),
- State#state{compiling = P}.
-
--spec c(pid(), atom(), comp_options()) -> 'ok'.
-
-c(Parent, Mod, Options) ->
- Res = hipe:c(Mod, Options),
- Parent ! {compilation_done,Res,self()},
- ok.
-
-get_edoc(Mod) ->
- Info = Mod:module_info(),
- Comp = get_compile(Info),
- Options = get_options(Comp),
- Dir = get_cwd(Options),
- File =
- case Dir of
- "" -> atom_to_list(Mod) ++ ".erl";
- _ -> Dir ++"/" ++ atom_to_list(Mod) ++ ".erl"
- end,
- %% io:format("Get ~s\n", [File]),
- Text = try edoc(File, [{xml_export,xmerl_text}, no_output])
- catch _:_ -> "error"
- end,
- gs:config(edoc, {enable, true}),
- gs:config(edoc, clear),
- gs:config(edoc, {insert, {insert, Text}}),
- gs:config(edoc, {enable, false}),
- ok.
-
-edoc(Name, Opts) ->
- Doc = edoc:get_doc(Name, Opts),
- %% Comments = edoc:read_comments(Name, Opts),
- %% Text = edoc:forms(Forms, Comments, Name, Opts),
- edoc:layout(Doc, Opts),
- ok.
diff --git a/lib/megaco/doc/src/definitions/term.defs b/lib/megaco/doc/src/definitions/term.defs
index 57379eaa5d..16212923ea 100644
--- a/lib/megaco/doc/src/definitions/term.defs
+++ b/lib/megaco/doc/src/definitions/term.defs
@@ -1,7 +1,6 @@
[{"agent","agent","An entity that terminates a management protocol in the Network Element.","mbj"},
{"API","API","Application Programming Interface. The interface towards an application. Usually this is a set of functions available, but can also be a set of messages sent to or from an application.","mbj"},
{"application","application","A collection of resources which is required to offer a specific service.","mbj"},
-{"appmon","Application Monitor","A graphical node and application process tree viewer. See also appmon.","mbj"},
{"Appmon","Appmon","Application name for the Application Monitor within Erlang/OTP. A graphical node and process viewer.","mbj"},
{"app callback","application callback module","A module which is called when the application is started, and when it has stopped. Every application has one application callback module.","mbj"},
{"AC","application controller","A process which coordinates all operations on applications.","mbj"},
@@ -136,7 +135,6 @@ the module Erlang in the application kernel","kenneth"},
{"pattern matching","pattern matching","A basic mechanism in Erlang for assigning values to variables and for controlling the flow of a program.","kenneth"},
{"permanent child","permanent child","A supervised process which always is restarted when it dies.","mbj"},
{"Pid","Pid","Process Identifier. A data type in Erlang for storing process references. The process identity of the process displayed in the line.","kenneth"},
-{"Pman","Pman","Module and application name for the Process Trace Tool.","olin"},
{"point","point","A unit used to indicate the size of a typeface. Equal to 1/72 inches.","jocke"},
{"pointer","pointer","A pointer tells where data is stored. Memory pointers are not used in Erlang.","kent"},
{"port","port","A data type in Erlang. Ports provide the basic mechanism for communication with the external world.","peterl"},
@@ -198,7 +196,6 @@ the module Erlang in the application kernel","kenneth"},
{"Table Visualizer","Table Visualizer","A tool which enables the user to examine ETS and Mnesia tables.","olin"},
{"temporary child","temporary child","A supervised process which is never restarted when it dies.","mbj"},
{"term","term","The super type of all Erlang types.","kenneth"},
-{"Toolbar","Toolbar","A tool that provides an simplistic interface to the other various Erlang/OTP tools","olin"},
{"tools","tools","An application within Erlang/OTP which contains the tools which are not applications themselves.","olin"},
{"transaction","transaction","Transactions groups a set of database accesses into an atomic unit. All transactions has the ACID (atomicity, concistency, isolation and durability) properties.","hakan"},
{"transient child","transient child","A supervised process which is restarted if it dies non-normally.","mbj"},
diff --git a/lib/observer/doc/src/Makefile b/lib/observer/doc/src/Makefile
index 0f564d3299..b43aeccd73 100644
--- a/lib/observer/doc/src/Makefile
+++ b/lib/observer/doc/src/Makefile
@@ -68,10 +68,6 @@ ONLY_HTML_FILE = \
GIF_FILES = \
et_processes.gif \
et_modsprocs.gif \
- etop_main.gif \
- etop_5.gif \
- etop_lines.gif \
- etop_opt.gif \
note.gif
# ----------------------------------------------------
diff --git a/lib/observer/doc/src/etop.xml b/lib/observer/doc/src/etop.xml
index 99d3b15811..9f3cdd6de8 100644
--- a/lib/observer/doc/src/etop.xml
+++ b/lib/observer/doc/src/etop.xml
@@ -38,21 +38,19 @@
<description>
<p><c>etop</c> should be started with the provided scripts
- <c>etop</c> and <c>getop</c> for text based and graphical
- presentation respectively. This will start a hidden erlang node
+ <c>etop</c>. This will start a hidden erlang node
which connects to the node to be measured. The measured node is
given with the <c>-node</c> option. If the measured node has a
different cookie than the default cookie for the user who
invokes the script, the cookie must be explicitly given witht
the <c>-setcookie</c> option.</p>
- <p>Under Windows the batch files <c>etop.bat</c> and
- <c>getop.bat</c> can be used.</p>
+ <p>Under Windows the batch file <c>etop.bat</c> can be used.</p>
<p>The following configuration parameters exist for the
- <c>etop</c> tool. When executing the <c>etop</c> or <c>getop</c>
- scripts, these parameters can be given as command line options,
- e.g. <c>getop -node testnode@myhost -setcookie MyCookie</c>.</p>
+ <c>etop</c> tool. When executing the <c>etop</c> script,
+ these parameters can be given as command line options,
+ e.g. <c>etop -node testnode@myhost -setcookie MyCookie</c>.</p>
<taglist>
<tag>node</tag>
<item>The measured node.
@@ -103,11 +101,6 @@ Value: <c>on | off</c> <br></br>
Default: <c>on</c></item>
</taglist>
- <p>All interaction with <c>etop</c> when running the graphical
- presentation should happen via the menus. For the text based
- presentation the functions described below can be used.
- </p>
-
<p>See the <seealso marker="etop_ug">user's guide</seealso> for
more information about the <c>etop</c> tool.</p>
@@ -118,7 +111,7 @@ Default: <c>on</c></item>
<fsummary>Start etop</fsummary>
<desc>
<p>This function starts <c>etop</c>.
- Note that etop is preferably started with the etop and getop scripts</p>
+ Note that etop is preferably started with the etop script.</p>
</desc>
</func>
<func>
diff --git a/lib/observer/doc/src/etop_5.gif b/lib/observer/doc/src/etop_5.gif
deleted file mode 100644
index 9650176366..0000000000
--- a/lib/observer/doc/src/etop_5.gif
+++ /dev/null
Binary files differ
diff --git a/lib/observer/doc/src/etop_lines.gif b/lib/observer/doc/src/etop_lines.gif
deleted file mode 100644
index 10620a1155..0000000000
--- a/lib/observer/doc/src/etop_lines.gif
+++ /dev/null
Binary files differ
diff --git a/lib/observer/doc/src/etop_main.gif b/lib/observer/doc/src/etop_main.gif
deleted file mode 100644
index 699cb986c8..0000000000
--- a/lib/observer/doc/src/etop_main.gif
+++ /dev/null
Binary files differ
diff --git a/lib/observer/doc/src/etop_opt.gif b/lib/observer/doc/src/etop_opt.gif
deleted file mode 100644
index e420bff7f6..0000000000
--- a/lib/observer/doc/src/etop_opt.gif
+++ /dev/null
Binary files differ
diff --git a/lib/observer/doc/src/etop_ug.xml b/lib/observer/doc/src/etop_ug.xml
index 8291e417e7..c57df1d324 100644
--- a/lib/observer/doc/src/etop_ug.xml
+++ b/lib/observer/doc/src/etop_ug.xml
@@ -39,9 +39,7 @@
<section>
<title>Output</title>
- <p>The output from <c>etop</c> can be graphical or text based.
- </p>
- <p>Text based it looks like this:</p>
+ <p>The output from <c>etop</c> looks like this:</p>
<code type="none"><![CDATA[
========================================================================================
tiger@durin 13:40:32
@@ -63,10 +61,6 @@ Pid Name or Initial Func Time Reds Memory MsgQ Current Func
<127.137.0> net_kernel:do_spawn_ 0 553 5840 0 dbg:do_relay_1/1
========================================================================================
]]></code>
- <p>And graphically it looks like this:</p>
- <image file="etop_main.gif">
- <icaption>Graphical presentation of etop</icaption>
- </image>
<p>The header includes some system information:
</p>
<taglist>
@@ -102,9 +96,7 @@ Pid Name or Initial Func Time Reds Memory MsgQ Current Func
<section>
<title>Start</title>
- <p>To start etop with the graphical presentation, use the script
- <c>getop</c> or the batch file <c>getop.bat</c>, e.g. <c>getop -node tiger@durin</c></p>
- <p>To start etop with the text based presentation use the script
+ <p>To start etop use the script
<c>etop</c> or the batch file <c>etop.bat</c>, e.g. <c>etop -node tiger@durin</c>,
</p>
</section>
@@ -115,30 +107,12 @@ Pid Name or Initial Func Time Reds Memory MsgQ Current Func
<c>-OptName Value</c> to the command line, e.g. <c>etop -node tiger@durin -setcookie mycookie -lines 15</c>.
</p>
<p>The parameters <c>lines</c>, <c>interval</c>, <c>accumulate</c>
- and <c>sort</c> can be changed during runtime. Use the
- <em>Options</em> menu with the graphical presentation or the
- function <c>etop:config/2</c> with the text based presentation.
+ and <c>sort</c> can be changed during runtime by the
+ function <c>etop:config/2</c>.
</p>
<p>A list of all valid configuration parameters can be found in
the reference manual for <c>etop</c>.
</p>
- <p>Note that it is even possible to change which information to
- sort by by clicking the header line of the table in the graphical
- presentation.
- </p>
-
- <section>
- <title>Example: Change configuration with graphical presentation</title>
- <image file="etop_opt.gif">
- <icaption>Select the option to change from the Options menu.</icaption>
- </image>
- <image file="etop_lines.gif">
- <icaption>Enter the new value in the popup window and click "Ok"</icaption>
- </image>
- <image file="etop_5.gif">
- <icaption>The interface is updated with the new configuration</icaption>
- </image>
- </section>
<section>
<title>Example: Change configuration with text based presentation</title>
@@ -187,18 +161,14 @@ Pid Name or Initial Func Time Reds Memory MsgQ Current Func
<section>
<title>Print to file</title>
<p>At any time, the current <c>etop</c> display can be dumped to a
- text file. Use <em>Dump to file</em> on the <em>File</em> menu
- with the graphical presentation or the function <c>etop:dump/1</c>
- with the text based presentation.
+ text file with the function <c>etop:dump/1</c>.
</p>
</section>
<section>
<title>Stop</title>
- <p>To stop <c>etop</c>, use <em>Exit</em> on the <em>File</em>
- menu for the graphical presentation, or the function
- <c>etop:stop/0</c> with the text based presentation.
- </p>
+ <p>Use the function <c>etop:stop/0</c> to stop <c>etop</c>.
+ </p>
</section>
</chapter>
diff --git a/lib/observer/priv/bin/getop b/lib/observer/priv/bin/getop
deleted file mode 100755
index 5cd9bf3d76..0000000000
--- a/lib/observer/priv/bin/getop
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-
-NAME="etop"
-erl -sname $NAME -noinput -hidden -s etop -s erlang halt $@
diff --git a/lib/observer/priv/bin/getop.bat b/lib/observer/priv/bin/getop.bat
deleted file mode 100644
index 8b6f108f06..0000000000
--- a/lib/observer/priv/bin/getop.bat
+++ /dev/null
@@ -1,2 +0,0 @@
-@ECHO OFF
-CALL werl -sname etop -noinput -hidden -s etop -s erlang halt %*
diff --git a/lib/observer/src/Makefile b/lib/observer/src/Makefile
index 42f5c19935..646892663f 100644
--- a/lib/observer/src/Makefile
+++ b/lib/observer/src/Makefile
@@ -38,7 +38,6 @@ MODULES= \
crashdump_viewer \
crashdump_viewer_html \
etop \
- etop_gui \
etop_tr \
etop_txt \
observer \
@@ -72,13 +71,12 @@ PRIVDIR= ../priv
WEBTOOLFILES= $(PRIVDIR)/crashdump_viewer.tool $(PRIVDIR)/erlang_observer.png
BINDIR= $(PRIVDIR)/bin
ifeq ($(findstring win32,$(TARGET)),win32)
-WIN32_EXECUTABLES= $(BINDIR)/etop.bat $(BINDIR)/getop.bat $(BINDIR)/cdv.bat
+WIN32_EXECUTABLES= $(BINDIR)/etop.bat $(BINDIR)/cdv.bat
else
WIN32_EXECUTABLES=
endif
EXECUTABLES= \
$(BINDIR)/etop \
- $(BINDIR)/getop \
$(BINDIR)/cdv \
$(WIN32_EXECUTABLES)
CDVDIR= $(PRIVDIR)/crashdump_viewer
diff --git a/lib/observer/src/etop.erl b/lib/observer/src/etop.erl
index 2610060eae..96a18cf450 100644
--- a/lib/observer/src/etop.erl
+++ b/lib/observer/src/etop.erl
@@ -44,9 +44,6 @@ help() ->
" sort runtime | reductions | memory | msg_q~n"
" What information to sort by~n"
" Default: runtime (reductions if tracing=off)~n"
- " output graphical | text~n"
- " How to present results~n"
- " Default: graphical~n"
" tracing on | off etop uses the erlang trace facility, and thus~n"
" no other tracing is possible on the node while~n"
" etop is running, unless this option is set to~n"
@@ -317,7 +314,7 @@ handle_args([_| R], C) ->
handle_args([], C) ->
C.
-output(graphical) -> etop_gui;
+output(graphical) -> exit({deprecated, "Use observer instead"});
output(text) -> etop_txt.
diff --git a/lib/observer/src/etop_defs.hrl b/lib/observer/src/etop_defs.hrl
index 664de61973..720fb50b5a 100644
--- a/lib/observer/src/etop_defs.hrl
+++ b/lib/observer/src/etop_defs.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2013. 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
@@ -22,8 +22,8 @@
" procs~8w processes~8w code ~8w~n"
" runq ~8w atom ~8w ets ~8w~n").
--record(opts, {node=node(), port = 8415, accum = false, intv = 5000, lines = 10,
+-record(opts, {node=node(), port = 8415, accum = false, intv = 5000, lines = 10,
width = 700, height = 340, sort = runtime, tracing = on,
%% Other state information
- out_mod=etop_gui, out_proc, server, host, tracer, store,
+ out_mod=etop_txt, out_proc, server, host, tracer, store,
accum_tab, remote}).
diff --git a/lib/observer/src/etop_gui.erl b/lib/observer/src/etop_gui.erl
deleted file mode 100644
index 3971646abc..0000000000
--- a/lib/observer/src/etop_gui.erl
+++ /dev/null
@@ -1,374 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2002-2013. 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(etop_gui).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,create,3}},
- {nowarn_deprecated_function,{gs,create,4}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,start,0}}]).
-
--author('[email protected]').
-
--export([init/1,stop/1]).
--export([formatmfa/1,to_list/1]).% For etop_txt
-
--include("etop.hrl").
--include("etop_defs.hrl").
-
--import(etop, [loadinfo/1, meminfo/2, getopt/2]).
-
-%% Heights
--define(BarH, 28). % height of menubar
--define(LabelH, 90). % height of label with system info
--define(GridLineH, 21). % height of one line in the table (grid)
-
-%% Column numbers for grid - click to sort
--define(TimeCol, 3).
--define(RedsCol, 4).
--define(MemCol, 5).
--define(MsgQCol, 6).
-
-%% Font
--define(Normal, {screen,12}).
--define(Bold, {screen,bold,12}).
-
-
-%% -----------------------------------------------------------------------------
-stop(_) -> ok.
-
-init(Config) ->
- S = gs:start(),
- Width = getopt(width, Config),
- TotLines = getopt(lines,Config)+1,
-
- %% Max number of processes shown in window at startup is 10
- %% If less than 10 lines is specified, window size fits number of lines
- WinH = if TotLines > 11 -> 11*?GridLineH + ?BarH + ?LabelH;
- true -> TotLines*?GridLineH + ?BarH + ?LabelH
- end,
- Win = gs:create(window, S,
- [{title, "Erlang Top"},
- {map, true}, %% While debugging
- {configure, true},
- {width, Width}, {height, WinH}]),
- Bar = gs:create(menubar, Win, []),
-
- FileButt = gs:create(menubutton, Bar, [{label,{text, " File "}}]),
- OptionsButt = gs:create(menubutton, Bar, [{label,{text, " Options "}}]),
- File = gs:create(menu, FileButt, []),
- Options = gs:create(menu, OptionsButt, []),
- gse:named_menuitem(refresh, File,
- [{label,{text," Refresh "}}]),
- gse:named_menuitem(dump, File,
- [{label,{text," Dump to file "}}]),
- gse:named_menuitem(exit, File,
- [{label,{text," Exit "}}]),
-
- gse:named_menuitem(accum, Options,
- [{label,{text, " Accumulate "}},
- {itemtype, check}]),
- gse:named_menuitem(intv, Options,
- [{label,{text, " Update Interval "}}]),
- gse:named_menuitem(lines, Options,
- [{label,{text, " Number of Lines "}}]),
- Sort = gse:named_menuitem(sort, Options,
- [{label,{text, " Sort "}},
- {itemtype,cascade}]),
- SortMenu = gse:create(menu, Sort, []),
- gse:named_menuitem(runtime, SortMenu,
- [{label,{text, " Time "}},
- {itemtype,radio},{group,gr1}]),
- gse:named_menuitem(memory, SortMenu,
- [{label,{text, " Memory "}},
- {itemtype,radio},{group,gr1}]),
- gse:named_menuitem(reductions, SortMenu,
- [{label,{text, " Reductions "}},
- {itemtype,radio},{group,gr1}]),
- gse:named_menuitem(msg_q, SortMenu,
- [{label,{text, " Message Queue "}},
- {itemtype,radio},{group,gr1}]),
-
- SysInfo = gs:create(label,Win,[{x, 0}, {y, ?BarH},{align,sw},
- {width, Width},{height,?LabelH}]),
-
- {GridH,VScroll} = calc_grid_h(WinH,TotLines),
- Grid = gse:grid(Win,
- [{x, 0}, {y, ?BarH+?LabelH},
- {width, Width},
- {height, GridH},
- {hscroll, false},
- {vscroll, VScroll},
- {columnwidths, calc_column_w(Width)},
- {rows, {1, TotLines}},
- {font,?Normal}]),
-
- %% Header line
- GL1 = gse:gridline(Grid, [{{text, 1}, "PID"},
- {{text, 2}, "Name or Initial Function"},
- {{text, ?TimeCol}, "Time(us)"},
- {{text, ?RedsCol}, "Reds"},
- {{text, ?MemCol}, "Memory"},
- {{text, ?MsgQCol}, "MsgQ"},
- {{text, 7}, "Current Function"},
- {bg, lightblue},
- {row, 1},
- {click, true}]),
-
- config_sort(GL1,getopt(sort,Config)),
- Info = do_update(Grid, SysInfo, Config),
-
- get_event(Info, Win, Grid, GL1, SysInfo, Config).
-
-calc_column_w(W) ->
- %% W = [2x, 3x, 1x, 1x, 1x, 1x, 3x] = 12x
- RW = W-9, % just to make nice small margins on each side of grid
- X = RW div 12,
- [2*X, 3*X, X, X, X, X, 3*X + (RW - 12*X)].
-
-config_sort(GL1,Sort) ->
- gs:config(Sort,[{select,true}]),
- lists:foreach(fun(S) ->
- gs:config(GL1,[{{font,S},?Normal}])
- end,
- [?TimeCol,?MemCol,?RedsCol,?MsgQCol]),
- case Sort of
- runtime -> gs:config(GL1,{{font,?TimeCol},?Bold});
- memory -> gs:config(GL1,{{font,?MemCol},?Bold});
- reductions -> gs:config(GL1,{{font,?RedsCol},?Bold});
- msg_q -> gs:config(GL1,{{font,?MsgQCol},?Bold})
- end.
-
-config_lines(Win,Grid,TotLines) ->
- OldGridH = gs:read(Grid,height),
- NewLinesH = TotLines*?GridLineH,
- if NewLinesH =< OldGridH ->
- gs:config(Win,[{height,NewLinesH+?BarH+?LabelH}]),
- gs:config(Grid,[{rows,{1,TotLines}},
- {height,NewLinesH},
- {vscroll,false}]);
- true ->
- gs:config(Grid,[{rows,{1,TotLines}},{vscroll,right}])
- end.
-
-calc_grid_h(WinH,TotLines) ->
- LeftInWin = WinH - ?BarH - ?LabelH,
- TotGrid = TotLines * ?GridLineH,
- if LeftInWin >= TotGrid ->
- {TotGrid,false};
- true ->
- {LeftInWin,right}
- end.
-
-set_win_h(Win,OrigH,TotLines) ->
- TotH = TotLines*?GridLineH + ?BarH + ?LabelH,
- if TotH >= OrigH -> OrigH;
- true -> gs:config(Win,[{height,TotH}]),
- TotH
- end.
-
-get_event(Info, Win, Grid, GL1, SysInfo, Config) ->
- receive
- {gs, Win, configure,[],[W,H,_,_]} ->
- TotLines = getopt(lines,Config)+1,
- %% Will not make window higher than total number of lines
- RealWinH = set_win_h(Win,H,TotLines),
- {GridH,VScroll} = calc_grid_h(RealWinH,TotLines),
- gs:config(Grid, [{width, W},
- {columnwidths, calc_column_w(W)},
- {height,GridH}, {vscroll,VScroll}]),
- get_event(Info, Win, Grid, GL1, SysInfo, Config);
- {gs, refresh, _, _, _} ->
- Info1 = do_update(Grid, SysInfo, Config),
- get_event(Info1, Win, Grid, GL1, SysInfo, Config);
- {gs, dump, _, _, _} ->
- case pop(Win,dump) of
- {ok,File} -> etop:dump(File);
- {error,cancel} -> ok
- end,
- get_event(Info, Win, Grid, GL1, SysInfo, Config);
- {gs, Win, destroy, _, _} ->
- normal;
- {gs, exit, _, _, _} ->
- ok;
- {gs, accum, _, _, _} ->
- Old = getopt(accum,Config),
- etop:config(accumulate,not Old),
- get_event(Info, Win, Grid, GL1, SysInfo, Config);
- {gs,intv,_,_,_} ->
- case pop(Win,interval) of
- {ok,Intv} -> etop:config(interval,list_to_integer(Intv));
- {error,cancel} -> ok
- end,
- get_event(Info, Win, Grid, GL1, SysInfo, Config);
- {gs,lines,_,_,_} ->
- case pop(Win,lines) of
- {ok,Lines} -> etop:config(lines,list_to_integer(Lines));
- {error,cancel} -> ok
- end,
- get_event(Info, Win, Grid, GL1, SysInfo, Config);
- {gs,Sort,_,_,_} when Sort=:=runtime;
- Sort=:=memory;
- Sort=:=reductions;
- Sort=:=msg_q ->
- etop:config(sort,Sort),
- get_event(Info, Win, Grid, GL1, SysInfo, Config);
- {gs,GL1,click,_,[Col,1,_]} ->
- case Col of
- ?TimeCol -> etop:config(sort, runtime);
- ?MemCol -> etop:config(sort, memory);
- ?RedsCol -> etop:config(sort, reductions);
- ?MsgQCol -> etop:config(sort, msg_q);
- _other -> ignore
- end,
- get_event(Info, Win, Grid, GL1, SysInfo, Config);
- {config,{Key,Value},Config1} ->
- case Key of
- lines -> config_lines(Win,Grid,Value+1);
- sort -> config_sort(GL1,Value);
- accumulate -> gs:config(accum,[{select,Value}]);
- _ -> ok
- end,
- Info1 = do_update(Grid, SysInfo, Config1),
- get_event(Info1, Win, Grid, GL1, SysInfo, Config1);
- {dump,Fd} ->
- etop_txt:do_update(Fd,Info,Config),
- get_event(Info, Win, Grid, GL1, SysInfo, Config);
- Msg ->
- io:format("~p got unexpected msg ~p~n", [?MODULE, Msg]),
- get_event(Info, Win, Grid, GL1, SysInfo, Config)
- after getopt(intv,Config) ->
- Info1 = do_update(Grid, SysInfo, Config),
- get_event(Info1, Win, Grid, GL1, SysInfo, Config)
- end.
-
-do_update(Grid, SysInfo, Config) ->
- Info = etop:update(Config),
- Lines = makegridlines(Info#etop_info.procinfo, Grid, 2),
- clear_lines(Lines, getopt(lines,Config) + 1, Grid),
- makesysinfo(getopt(node,Config),Info,SysInfo),
- Info.
-
-%clear_lines(From, To, _Grid) when From > To -> ok;
-clear_lines(From, To, Grid) ->
- case gs:read(Grid, {obj_at_row, From}) of
- undefined ->
- ok;
- GridLine ->
- gs:destroy(GridLine),
- clear_lines(From + 1, To, Grid)
- end.
-
-formatmfa({M, F, A}) ->
- io_lib:format("~w:~w/~w",[M, F, A]);
-formatmfa(Other) ->
- %% E.g. when running hipe - the current_function for some
- %% processes will be 'undefined'
- io_lib:format("~w",[Other]).
-
-
-makegridlines([#etop_proc_info{pid=Pid,
- mem=Mem,
- reds=Reds,
- name=Name,
- runtime=Time,
- cf=MFA,
- mq=MQ}
- |T], Grid, Count) ->
- update_gl(Grid, Count, [{{text, 1}, pid_to_list(Pid)},
- {{text, 2}, to_list(Name)},
- {{text, ?TimeCol},
- if is_integer(Time)->integer_to_list(Time);
- true -> Time
- end},
- {{text, ?RedsCol}, integer_to_list(Reds)},
- {{text, ?MemCol}, integer_to_list(Mem)},
- {{text, ?MsgQCol}, integer_to_list(MQ)},
- {{text, 7}, formatmfa(MFA)},
- {row, Count}, {click, false}]),
- makegridlines(T, Grid, Count + 1);
-makegridlines([],_Grid,Count) ->
- Count.
-
-update_gl(Grid, Row, GL) ->
- case gs:read(Grid, {obj_at_row, Row}) of
- undefined ->
- gse:gridline(Grid,[{row, Row}|GL]);
- GridLine ->
- gs:config(GridLine,GL)
- end.
-
-to_list(Name) when is_atom(Name) -> atom_to_list(Name);
-to_list({_M,_F,_A}=MFA) -> formatmfa(MFA).
-
-
-makesysinfo(Node,Info,SysInfo) ->
- {Cpu,NProcs,RQ,Clock} = loadinfo(Info),
- case Info#etop_info.memi of
- undefined ->
- Str = "No memory information is available.";
- Memi ->
- [Tot,Procs,Atom,Bin,Code,Ets] =
- meminfo(Memi, [total,processes,atom,binary,code,ets]),
- Str = io_lib:fwrite(?SYSFORM,
- [Node,Clock,
- Cpu,Tot,Bin,
- NProcs,Procs,Code,
- RQ,Atom,Ets])
- end,
- gs:config(SysInfo,[{label,{text,Str}},{font,?Normal}]).
-
-
-pop(Win,Key) ->
- Pop = gs:create(window,Win,[{title,"Config"},
- {width,160},{height,100}]),
- gs:create(label,Pop,[{label,{text,txt(Key)}},
- {width,160}]),
- gs:create(entry,entry,Pop,[{x,10},{y,30},{width,130},
- {keypress,true}]),
- gs:create(button,ok,Pop,[{width,45},{y,60},{x,10},
- {label,{text,"Ok"}}]),
- gs:create(button,cancel,Pop,[{width,60},{y,60},{x,80},
- {label,{text,"Cancel"}}]),
- gs:config(Pop,{map,true}),
- pop_loop(Pop).
-
-pop_loop(Pop) ->
- receive
- {gs,entry,keypress,_,['Return'|_]} ->
- Str = gs:read(entry,text),
- gs:destroy(Pop),
- {ok,Str};
- {gs,entry,keypress,_,_} -> % all other keypresses
- pop_loop(Pop);
- {gs,ok,click,_,_} ->
- Str = gs:read(entry,text),
- gs:destroy(Pop),
- {ok,Str};
- {gs,cancel,click,_,_} ->
- gs:destroy(Pop),
- {error,cancel};
- X ->
- io:format("Got X=~w~n",[X]),
- pop_loop(Pop)
- end.
-
-txt(interval) -> "Enter new interval:";
-txt(lines) -> "Enter number of lines:";
-txt(dump) -> "Enter file name:".
diff --git a/lib/observer/src/etop_txt.erl b/lib/observer/src/etop_txt.erl
index d0612f15b4..f048ff17ca 100644
--- a/lib/observer/src/etop_txt.erl
+++ b/lib/observer/src/etop_txt.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2013. 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
@@ -27,7 +27,6 @@
-include("etop_defs.hrl").
-import(etop,[loadinfo/1,meminfo/2]).
--import(etop_gui,[formatmfa/1,to_list/1]).
-define(PROCFORM,"~-15w~-20s~8w~8w~8w~8w ~-20s~n").
@@ -99,3 +98,13 @@ writepinfo(Fd,[#etop_proc_info{pid=Pid,
writepinfo(_Fd,[]) ->
ok.
+
+formatmfa({M, F, A}) ->
+ io_lib:format("~w:~w/~w",[M, F, A]);
+formatmfa(Other) ->
+ %% E.g. when running hipe - the current_function for some
+ %% processes will be 'undefined'
+ io_lib:format("~w",[Other]).
+
+to_list(Name) when is_atom(Name) -> atom_to_list(Name);
+to_list({_M,_F,_A}=MFA) -> formatmfa(MFA).
diff --git a/lib/observer/src/observer.app.src b/lib/observer/src/observer.app.src
index e881cb3c97..6d5259624c 100644
--- a/lib/observer/src/observer.app.src
+++ b/lib/observer/src/observer.app.src
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2013. 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
@@ -22,7 +22,6 @@
{modules, [crashdump_viewer,
crashdump_viewer_html,
etop,
- etop_gui,
etop_tr,
etop_txt,
observer,
diff --git a/lib/pman/AUTHORS b/lib/pman/AUTHORS
deleted file mode 100644
index 5a354526b4..0000000000
--- a/lib/pman/AUTHORS
+++ /dev/null
@@ -1,9 +0,0 @@
-pman was first implemented for the old X windows interface "pxw" by
-Claes Wikstr�m and has since then been rewritten a couple of times by
-among others Peter Olin.
-
-Original Authors and Contributors:
-
-Claes Wikstr�m
-Peter Olin
-Gunilla Arendt \ No newline at end of file
diff --git a/lib/pman/Makefile b/lib/pman/Makefile
deleted file mode 100644
index 3600504d07..0000000000
--- a/lib/pman/Makefile
+++ /dev/null
@@ -1,34 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1996-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
-
-SPECIAL_TARGETS =
-
-# ----------------------------------------------------
-# Default Subdir Targets
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_subdir.mk
-
diff --git a/lib/pman/doc/html/.gitignore b/lib/pman/doc/html/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/pman/doc/html/.gitignore
+++ /dev/null
diff --git a/lib/pman/doc/man3/.gitignore b/lib/pman/doc/man3/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/pman/doc/man3/.gitignore
+++ /dev/null
diff --git a/lib/pman/doc/pdf/.gitignore b/lib/pman/doc/pdf/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/pman/doc/pdf/.gitignore
+++ /dev/null
diff --git a/lib/pman/doc/src/Makefile b/lib/pman/doc/src/Makefile
deleted file mode 100644
index d9e0317f05..0000000000
--- a/lib/pman/doc/src/Makefile
+++ /dev/null
@@ -1,116 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1997-2012. 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=$(PMAN_VSN)
-APPLICATION=pman
-
-# ----------------------------------------------------
-# Release directory specification
-# ----------------------------------------------------
-RELSYSDIR = $(RELEASE_PATH)/lib/$(APPLICATION)-$(VSN)
-
-# ----------------------------------------------------
-# Target Specs
-# ----------------------------------------------------
-XML_APPLICATION_FILES = ref_man.xml
-XML_REF3_FILES = pman.xml
-
-XML_PART_FILES = part.xml part_notes.xml
-XML_CHAPTER_FILES = pman_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 = \
- main_window.gif \
- trace.gif \
- options.gif
-
-# ----------------------------------------------------
-
-HTML_FILES = $(XML_APPLICATION_FILES:%.xml=$(HTMLDIR)/%.html) \
- $(XML_PART_FILES:%.xml=$(HTMLDIR)/%.html)
-
-INFO_FILE = ../../info
-
-MAN3_FILES = $(XML_REF3_FILES:%.xml=$(MAN3DIR)/%.3)
-
-HTML_REF_MAN_FILE = $(HTMLDIR)/index.html
-
-TOP_PDF_FILE = $(PDFDIR)/$(APPLICATION)-$(VSN).pdf
-
-
-# ----------------------------------------------------
-# FLAGS
-# ----------------------------------------------------
-XML_FLAGS +=
-
-# ----------------------------------------------------
-# Targets
-# ----------------------------------------------------
-$(HTMLDIR)/%.gif: %.gif
- $(INSTALL_DATA) $< $@
-
-docs: pdf html man
-
-$(TOP_PDF_FILE): $(XML_FILES)
-
-pdf: $(TOP_PDF_FILE)
-
-html: gifs $(HTML_REF_MAN_FILE)
-
-man: $(MAN3_FILES)
-
-gifs: $(GIF_FILES:%=$(HTMLDIR)/%)
-
-debug opt:
-
-clean clean_docs:
- rm -rf $(HTMLDIR)/*
- rm -f $(MAN3DIR)/*
- rm -f $(TOP_PDF_FILE) $(TOP_PDF_FILE:%.pdf=%.fo)
- rm -f errs core *~
-
-# ----------------------------------------------------
-# Release Target
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_release_targets.mk
-
-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) $(MAN3DIR)/* "$(RELEASE_PATH)/man/man3"
-
-
-release_spec:
diff --git a/lib/pman/doc/src/book.xml b/lib/pman/doc/src/book.xml
deleted file mode 100644
index 809015016b..0000000000
--- a/lib/pman/doc/src/book.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE book SYSTEM "book.dtd">
-
-<book xmlns:xi="http://www.w3.org/2001/XInclude">
- <header titlestyle="normal">
- <copyright>
- <year>1997</year><year>2013</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>Pman</title>
- <prepared></prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- </header>
- <pagetext>Pman</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>
-</book>
-
diff --git a/lib/pman/doc/src/fascicules.xml b/lib/pman/doc/src/fascicules.xml
deleted file mode 100644
index 37feca543f..0000000000
--- a/lib/pman/doc/src/fascicules.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!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/pman/doc/src/main_window.gif b/lib/pman/doc/src/main_window.gif
deleted file mode 100644
index e12754631c..0000000000
--- a/lib/pman/doc/src/main_window.gif
+++ /dev/null
Binary files differ
diff --git a/lib/pman/doc/src/main_window.ps b/lib/pman/doc/src/main_window.ps
deleted file mode 100644
index c66620c677..0000000000
--- a/lib/pman/doc/src/main_window.ps
+++ /dev/null
@@ -1,1573 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Creator: (ImageMagick)
-%%Title: (./main_window.tmp.eps)
-%%CreationDate: (Tue Jun 12 18:03:36 2001)
-%%BoundingBox: 0 22 377 234
-%%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 22 377 234
-userdict begin
-%%BeginData:
-DisplayImage
-0 22
-377.000000 212.000000
-12
-757 426
-1
-0
-0
-16
-ffffff
-000000
-b24d7a
-dcadc2
-57253b
-0000ff
-d9d9d9
-c3c3c3
-bebebe
-828282
-000000
-000000
-000000
-000000
-000000
-000000
-03ff03ff03ff0311040003ff03ff03b70400031c04000301021a0400030002ff02ff02b6
-04000300021a04010301021a0400030002ff02ff02b604000300021a04010301021a0400
-030002ff02ff02b604000300021a0401030102020418030004ff04ff04b7030004170202
-040103010202040003ff03ff03e902020401030102020400030002150400030002ff02ff
-029e04000300021504000300021504000300020204010301020204000300021504000300
-02ff02ff029e040003000215040003000215040003000202040103010202040003000215
-0400030002ff02ff029e0400030002150400030002150400030002020401030102020400
-030002150400030002ff02ff029e040003000215040003000202030f0202040003000202
-0401030102020400030002150400030002ff0272000302ff022704000300021504000300
-02020300020d040002020400030002020401030102020400030002150400030002d10006
-0202000102060001020600010206000102050000020a00050225000102380001021b0004
-020d00010208000102ee0400030002150400030002020300020d04000202040003000202
-0401030102020400030002150400030002d1000102020002020100020204000202050002
-0206000202040000020900010203000102240001023800010219000102040000020c0001
-0208000102ee0400030002150400030002020300020d0400020204000300020204010301
-02020400030002150400030002d100010203000102010002020400020205000002000001
-02050002020400000208000102050001025e00010218000002070000020b000102f90400
-030002150400030002020300020d04000202040003000202040103010202040003000215
-0400030002d1000102030001020100000200000002030003020500000200000102050000
-020000010203000002030001020100010207000302040000020300030203000102000003
-020400000201000102040003020100010203000002030001020700040202000102000003
-020800040202000402040004020300000203000302010000020300040201000102000003
-020300010201000102040000020200040203000402d30400030002150400030002020300
-020d04000202040003000202040103010202040003000202030f02020400030002d10001
-020300010201000002000001020200000200000102040001020000010205000002000002
-020200000203000102010001020700010200000002040000020200010201000102020002
-020200000204000002010001020300010201000102000001020200020202000002070001
-020200010201000202020001020800010203000102020001020200010202000102020000
-020100010202000002010000020200010205000202020001020200010202000002040000
-02020000020200010201000102d7040003000208030302080400030002020300020d0400
-02020400030002020401030102020400030002020300020d040002020400030002d10001
-020200010202000002000001020200000200000102040000020200010204000002010001
-020200000207000102070001020000010202000002020001020300010201000102030001
-020200000202000102020001020300010200000002020000020000000202000002060001
-020400010200000102030001020800010202000102040001020000010204000102000000
-020200000202000102010000020100010206000102030001020200010202000102020000
-020700010201000102d704000300020803000201040002080400030002020300020d0400
-02020400030002020401030102020400030002020300020d040002020400030002d10005
-020300000201000102000000020100010203000102020001020400000202000102010000
-020700010207000102000001020200000202000102030001020100010203000102020000
-020200010202000102030001020000010201000002000000020100010206000102040001
-020000010203000102080001020200010204000102000001020400010200000002010000
-020200010202000002010001020600010203000102020001020200010202000002070001
-0201000302d504000300020803000201040002080400030002020300020d040002020400
-030002020401030102020400030002020300040e02020400030002d10001020700000201
-000102000000020100010203000102020002020300000202000202000000020700010207
-000102010000020100010202000702010001020400000201000102020001020200070200
-000102000001020000000201000002070001020400010200000102030001020800010202
-000102040001020000010204000102000000020100000201000202010001020100010206
-000102030001020200010203000002010001020400040203000302d30400030002080300
-040202080400030002020300020d04000202040003000202040103010202040003000215
-0400030002d1000102070000020100010200000002010001020300070203000002030001
-020000000207000102070001020100010200000002030001020700010204000102000000
-020300010202000102070000020000000201000102000000020700010204000102000001
-020300010208000102020001020400010200000102040001020000000201000002010000
-020000000201000002020001020600010203000102020001020300010200000002030002
-020100010205000202d20400030002150400030002020300020d04000202040003000202
-0401030102020400030002150400030002d1000102070000020200010202000102020001
-020400010203000002040002020800010205000102020001020000000203000102070001
-020400010200000002030001020200010207000002000000020200000200000002070001
-020400010200000102030001020800010202000102040001020000010204000102010000
-020000020201000202030001020600010203000102020001020300010200000002030001
-020200010206000102d20400030002150400030002020300020d04000202040003000202
-0401030102020400030002150400030002d1000102070000020200010202000102020000
-020600010202000002040002020300010203000102030001020400010205000102030000
-020100010205000102040001020300010203000002010002020200010209000102020001
-020100010203000102080001020300010202000102020001020200010202000102030000
-020700010202000002010001020300010202000102040001020400010202000102010000
-0203000102d20400030002150400030002020300020d0400020204000300020204010301
-02020400030002150400030002d100010207000002070001020100010206000102020000
-020500010203000102040005020500010207000402010001020500010204000102050004
-0201000102030001020a0004020200010203000102080001020400040204000402050003
-020900040201000102030001020200010204000102050003020000010200000502d30400
-030002150400030002020300020d04000202040003000202040103010202040003000215
-0400030002ff02ff029e0400030002150400030002020300020d04000202040003000202
-0401030102020400030002150400030002ff02ff029e0400030002150400030002020300
-040e02020400030002020401030102020400030002150400030002ff02ff029e04000300
-02150400030002150400030002020401030102020400030002150400030002ff02ff029e
-0400030002150400030002150400030002020401030102020400030002150400030002ff
-02ff029e04000300021504000300021504000300020204010300040403000416030004ff
-04ff049f030004160300041603000404030500ff00ff00e80304040003010202040000ff
-00ff00e70900030002020401030102020400000106ff06ff06e409010300020204010301
-02020400000106ff06ff06e40901030002020401030102020400000106ff06ff06e40901
-030002020401030102020400000106ff06ff06e409010300020204010301020204000001
-06ff06ff06e409010300020204010301020204000001060b01040604010006030102061f
-01000602010006040100062601040633010006020100060c010006ff06ff060201000602
-010006090102061309010300020204010301020204000001060b0100060f0100061f0100
-06020100062e01000635010106010100060c010006ff06ff0602010006020100060b0100
-061309010300020204010301020204000001060b01000606010206050100060301020618
-010006020100060201020603010206020100060201000619010006030100060001010603
-010206030102060301020618010106010100060201020603010106000100060201020603
-010206ff06f501000602010006020102060501000602010006000101060c090103000202
-04010301020204000001060b010006080100060501000602010006020100061801000600
-010006050100060201000602010006010100060201000619010006030101060101000601
-010006020100060101000602010006010100060201000617010006000100060001000601
-01000602010006010100060101010601010006020100060101000602010006ff06f40100
-060201000601010006020100060401000602010106010100060b09010300020204010301
-020204000001060b01030605010006050100060201000602010006180100060001000605
-010006020100060201000601010006000100060001000619010006030100060901000601
-010006050100060201000617010006000100060001000601010006020100060101000602
-010006010100060201000601010006ff06f8010406010100060201000604010006020100
-06020100060b09010300020204010301020204000001060b010006080100060501000602
-010406180100060001000605010006020104060101000600010006000100061901000603
-010006060103060101000605010406170100060101010601010006020100060101000602
-0100060101040602010206ff06f501000602010006010104060401000602010006020100
-060b09010300020204010301020204000001060b0100060801000605010006020100061d
-010006060100060201000605010006000100060001000619010006030100060501000602
-01000601010006050100061b010006010101060101000602010006010100060201000601
-01000609010006ff06f401000602010006010100060801000602010006020100060b0901
-0300020204010301020204000001060b0100060801000605010006020100060201000619
-010006060100060201000602010006010100060001000600010006190100060301000605
-010006020100060101000602010006010100060201000617010006020100060101000602
-010006010100060101010601010006020100060101000602010006ff06f4010006020100
-0601010006020100060401000602010106010100060b0901030002020401030102020400
-0001060b0100060801000605010006030102061a01000606010006030102060301000600
-0100061a0100060301000606010306020102060301020618010006020100060201020603
-010106000100060201020603010206ff06f5010006020100060201020605010006020100
-06000101060c0901030002020401030102020400000106ff06ff06d30100060f09010300
-020204010301020204000001060a0106062a0106062a010606ff06ff06470106060e0100
-060f09010300020204010301020204000001060a0106062a0106062a010606ff06ff0647
-0106060e0100060f0901030002020401030102020400000106ff06ff06e4090103000202
-0401030102020400000106ff06ff06e40901030002020401030102020400000106ff06ff
-06e40901030002020401030102020400000109ff09ff09e6030002020401030102020400
-000009ff09ff09e703000202040103010202040006ff06ff06e803000202040103010202
-040006ff06ff06e803000202040103010202040006ff06ff06e803000202040103010202
-040006ff06ff06e803000202040103010202040006ff06ff06e803000202040103010202
-040006ff06ff06e803000202040103010202040006ff06ff06e803000202040103010202
-040006ff06ff06e803000202040103010202040006ff06ff06e803000202040103010202
-040006ff06ff06e803000202040103010202040006ff06ff06e803000202040103010202
-040006ff06ff06e803000202040103010202040006ff06ff06e803000202040103010202
-040006ff06ff06e803000202040103010202040006ff06ff06e803000202040103010202
-040006ff06ff06e8030002020401030102020400060005ff05ff05d40912030002020401
-030102020400060005000849050108d50501089005010858050108670501085709110000
-030002020401030102020400060005000849050108d50501089005010858050108670501
-085709010706090007060001030002020401030102020400060005000849050108d50501
-089005010858050108670501085709010705000009000706000103000202040103010202
-040006000500080105030805050008060500083405010802050208270500080a05040818
-050008060500087405010801050008020500088905010800050008030500085105010801
-0503080d0500085205010802050208050500084a09010705000009010705000103000202
-0401030102020400060005000801050008020500080c0500083405010801050008020500
-08260500080a0500081c0500087c05010801050108010500088905010800050008030500
-085105010801050008020500080c05000852050108010500080205000850090107040001
-090107050001030002020401030102020400060005000801050008020500080205020803
-050108000500083405010801050008020500080105000802050008010500080005010802
-050008000501080305020802050008000501080205040808050008050500080205000801
-050008000501080305020802050408020502080305020802050008000501086605010801
-050108010500080205020802050108000500080305020875050108000501080105010802
-0502080305010800050008020502083d0501080105000802050008020502080305010800
-050008020502084c050108010500080605020802050408020502083c0901070400010600
-090107040001030002020401030102020400060005000801050008020500080405000802
-050008010501083405010801050008050500080205000801050108010500080105010801
-05000801050008020500080105010801050008030500080a050008050500080205000801
-050108010500080105000802050008030500080605000802050008020500080105010801
-050008650501080105000800050008000500080105000802050008010500080005000800
-050008010500080205000874050108000501080105010801050008020500080105000801
-05010801050008020500083c050108010500080205000801050008020500080105000801
-05010801050008020500084b05010802050008070500080605000801050008020500083b
-090107030001060109010704000103000202040103010202040006000500080105030805
-050008020500080205000834050108010500080505000802050008010500080505000805
-050008020500080105000802050008030500080a05030802050008020500080105000802
-050008010500080705000806050008020500080205000801050008020500086505010801
-050008000500080005000805050008010500080005000800050008010500080205000874
-050108000500080005010800050008010500080505000802050008010500084005010801
-05030802050008020500080105000802050008010500084f050108030501080505000805
-05000802050008020500083b090107030001060209010703000103000202040103010202
-040006000500080105000808050008020500080205000834050108010500080505000802
-0500080105000805050008050504080105000802050008030500080a0500080505000802
-050008010500080205000801050008070500080605000802050008020500080105000802
-050008650501080105000801050108020503080105000800050008000500080105040874
-050108000500080005010800050008020502080205000802050008020502083d05010801
-05000801050008020504080105000802050008020502084c050108050500080405000804
-050008030504083b09010702000106030901070300010300020204010301020204000600
-050008010500080805000802050008020500083405010801050008020500080105000802
-0500080105000805050008050500080505000802050008030500080a0500080505000802
-050008010500080205000801050008070500080605000802050008020500080105000802
-050008650501080105000801050108010500080205000801050008000500080005000801
-050008780501080005000803050008050500080105000802050008050500083c05010801
-05000802050008010500080505000802050008050500084b050108010500080205000804
-05000803050008040500083f090107020001060409010702000103000202040103010202
-040006000500080105000808050008020500080105010834050108010500080205000801
-05000801050108010500080505000805050008020500080105000802050008030500080a
-050008050500080105010801050008020500080105000802050008030500080605000802
-050008020500080105000802050008650501080105000802050008010500080205000801
-050008000500080005000801050008020500087405010800050008030500080105000802
-050008010500080105010801050008020500083c05010801050008020500080105000802
-050008010500080105010801050008020500084b05010801050008020500080405000802
-05000805050008020500083b090107010001060509010702000103000202040103010202
-040006000500080105000808050008030501080005000834050108020502080305010800
-050008010500080505000806050208020500080205000804050108080500080605010800
-050008010500080205000802050208050501080405000803050208020500080205000865
-050108010500080205000802050308010500080005000800050008020502087505010800
-05000803050008020502080305010800050008020502083d050108010500080205000802
-0502080305010800050008020502084c050108020502080505000802050408020502083c
-0901070100010606090107010001030002020401030102020400060005000849050108d5
-050108900501081305000843050108670501085709010700000106070901070100010300
-02020401030102020400060005000849050108d5050108900501080f0500080205000843
-050108670501085709010700000106080901070000010300020204010301020204000600
-05000849050108d5050108900501081005020844050108670501085709010001090b0700
-0001030002020401030102020400060005000849050108d5050108900501085805010867
-0501085709010000090d0001030002020401030102020400060005000849050108d50501
-08900501085805010867050108570901070e000103000202040103010202040006000500
-0849050108d5050108900501085805010867050108570901001003000202040103010202
-0400060005000849050108d5050108900501085805010867050108570901000d09000001
-030002020401030102020400060005ff05ff05d409010001060a09010001030002020401
-030102020400060001ff01ff01d409010001060a09010001030002020401030102020400
-060001000849010108d50101089001010858010108670101085709010001060a09010001
-030002020401030102020400060001000849010108d50101089001010858010108670101
-085709010001060a09010001030002020401030102020400060001000805010008230100
-081d010108440100088f0101089001010858010108670101085709010001060a09010001
-030002020401030102020400060001000804010008040101080b0101080b010108020100
-081c010108040100080c010008040100080b0102081b010008030100088a010108040100
-080c01000804010008760101080301010852010108020102080301020806010008520101
-080201020803010208020104084209010001060a09010001030002020401030102020400
-060001000803010008040100080101000809010008010100080901000801010008020100
-081b010108180100080d0100081a010008030101088a0101081801000876010108020100
-080101000851010108010100080201000801010008020100080401010852010108010100
-0802010008010100080201000801010008020100084209010001060a0901000103000202
-040103010202040006000100080201000805010008010100080901000801010008090100
-0801010008030100081a0101080201020802010008000101080301020802010408030101
-0805010008030102080301020802010008000101080501000802010008000100088a0101
-080201020802010008000101080301020802010408740101080201000801010008510101
-080101000802010008010100080701000800010008520101080101000805010008020100
-08050100084209010001060a090100010300020204010301020204000600010008010100
-080601000801010008090100080101000809010008010100080401000819010108040100
-080201010801010008040100080401000805010108050100080201000802010008010100
-0802010008010101080101000803010008050100088a0101080401000802010108010100
-080401000804010008760101080201000801010008510101080101000802010008010100
-08060100080101000852010108010100080501000802010008040100084309010001060a
-090100010300020204010301020204000600010008000100080701000801010008090100
-080101000809010008010100080501000818010108040100080201000802010008040100
-08040100080d010008020100080201000801010008020100080101000802010008030100
-08050100088a010108040100080201000802010008040100080401000876010108020100
-080101000851010108020103080101030802010008020100085201010801010308030103
-08040100084309010001060a090100010300020204010301020204000600010008010100
-080601000801010008090100080101000809010008010100080401000819010108040100
-08020100080201000804010008040100080d010008020100080201000801010008020100
-08010100080201000802010008060100088a010108040100080201000802010008040100
-080401000876010108020100080101000851010108050100080101000802010008010100
-080201000852010108010100080201000805010008040100084309010001060a09010001
-030002020401030102020400060001000802010008050100080101000809010008010100
-080901000801010008030100081a01010804010008020100080201000804010008040100
-080d01000802010008020100080101000802010008010100080201000802010008060100
-088a01010804010008020100080201000804010008040100087601010802010008010100
-085101010805010008010100080201000801010508510101080101000802010008050100
-08030100084409010001060a090100010300020204010301020204000600010008030100
-080401000801010008030101080301000801010008030101080301000801010008020100
-081b01010804010008020100080201000804010008040100080501010805010008020100
-08020100080101000802010008010101080101000801010008070100088a010108040100
-080201000802010008040100080401000876010108020100080101000851010108010100
-080201000801010008020100080501000852010108010100080201000801010008020100
-08030100084409010001060a090100010300020204010301020204000600010008040100
-080401010804010108040101080401010804010108020100081c01010804010008020100
-080201000804010008050101080301010805010008030102080301020802010008000101
-080201000805010408880101080401000802010008020100080401000805010108740101
-080301010852010108020102080301020806010008520101080201020803010208040100
-084409010001060a09010001030002020401030102020400060001000805010008230100
-081d010108390100089a0101089001010858010108670101085709010001060a09010001
-030002020401030102020400060001000849010108390100089a01010890010108580101
-08670101085709010001060a090100010300020204010301020204000600010008490101
-08390100089a0101089001010858010108670101085709010001060a0901000103000202
-0401030102020400060001000849010108d5010108900101085801010867010108570901
-0001060a09010001030002020401030102020400060001000849010108d5010108900101
-0858010108670101085709010001060a0901000103000202040103010202040006000100
-0849010108d50101089001010858010108670101085709010001060a0901000103000202
-0401030102020400060001000849010108d5010108900101085801010867010108570901
-0001060a09010001030002020401030102020400060001ff01ff01d409010001060a0901
-0001030002020401030102020400060001ff01ff01d409010001060a0901000103000202
-0401030102020400060001000849010108d5010108900101085801010867010108570901
-0001060a09010001030002020401030102020400060001000849010108d5010108900101
-0858010108670101085709010001060a0901000103000202040103010202040006000100
-0805010008230100081d0101089101000842010108900101085801010867010108570901
-0001060a09010001030002020401030102020400060001000804010008040101080a0102
-080b010108020100081c010108100102081a0100081101020814010008170102081b0100
-08010104083b010108100102081a01000811010208140100083501010803010108520101
-08020102080301020803010208030102084c010108030100080401020803010208060100
-083b09010001060a09010001030002020401030102020400060001000803010008040100
-080101000808010008020100080901000801010008020100081b010108120100082f0100
-0814010008190100081a010008020100083f010108120100082f01000814010008350101
-080201000801010008510101080101000802010008010100080201000801010008020100
-0801010008020100084b0101080201010803010008020100080101000802010008040101
-083b09010001060a09010001030002020401030102020400060001000802010008050100
-08010100080c0100080901000801010008030100081a0101080201020802010008000101
-0805010008090100080001010802010008000101080301020802010108000100080c0100
-080301020803010208030101080001000802010208020100080001010804010108050100
-080301020803010208020100080001010805010008020100083f01010802010208020100
-080001010805010008090100080001010802010008000101080301020802010108000100
-080c01000803010208030102080301010800010008020102080201000800010108280101
-0802010008010100085101010801010008020100080101000809010008050100084b0101
-08010100080001000803010008050100080201000803010008000100083b09010001060a
-0901000103000202040103010202040006000100080101000806010008010100080c0100
-080901000801010008040100081901010801010008020100080101010801010008040100
-0809010108010100080101010801010008040100080201000800010008000100080b0100
-080201000802010008010100080201000801010008010101080101000802010008010101
-080101000803010108050100080201000802010008010100080201000801010108010100
-0803010008030103083c0101080101000802010008010101080101000804010008090101
-08010100080101010801010008040100080201000800010008000100080b010008020100
-080201000801010008020100080101000801010108010100080201000801010108010100
-082701010802010008010100085101010801010008020100080101000809010008050100
-084b0101080301000803010008050100080201000802010008010100083b09010001060a
-0901000103000202040103010202040006000100080001000807010008010100080b0100
-080a01000801010008050100081801010801010008020100080101000808010008090100
-080201000801010008080100080201000800010008000100080b01000802010008020100
-080501000801010008020100080101000802010008010100080f01000802010008020100
-080101000802010008010100080201000803010008070100083b01010801010008020100
-080101000808010008090100080201000801010008080100080201000800010008000100
-080b01000802010008020100080501000801010008020100080101000802010008010100
-082b010108020100080101000851010108020102080201030805010008050100084c0101
-0803010008030103080301020802010008020100083b09010001060a0901000103000202
-040103010202040006000100080101000806010008010100080a0100080b010008010100
-080401000819010108010104080101000808010008090100080201000801010008080100
-080201000800010008000100080b01000802010008020100080201030801010008020100
-0801010408010100080f0100080201000802010008010100080201000801010008020100
-0802010008080100083b0101080101040801010008080100080901000802010008010100
-08080100080201000800010008000100080b010008020100080201000802010308010100
-080201000801010408010100082b01010802010008010100085101010801010008020100
-08010100080201000803010008050100084d010108030100080301000802010008010100
-080201000801010008020100083b09010001060a09010001030002020401030102020400
-0600010008020100080501000801010008090100080c01000801010008030100081a0101
-080101000805010008080100080901000802010008010100080801000802010008000100
-08000100080b010008020100080201000801010008020100080101000802010008010100
-08050100080f010008020100080201000801010008020100080101000802010008020100
-0804010008020100083b0101080101000805010008080100080901000802010008010100
-08080100080201000800010008000100080b010008020100080201000801010008020100
-08010100080201000801010008050100082b010108020100080101000851010108010100
-0802010008010100080201000802010008050100084e0101080301000803010008020100
-080101000802010008010105083a09010001060a09010001030002020401030102020400
-060001000803010008040100080101000803010108020100080701010803010008010100
-08020100081b010108010100080201000801010008080100080901010801010008010100
-08080100080201000800010008000100080b010008020100080201000801010008020100
-080101000801010108010100080201000801010008070101080501000802010008020100
-08010100080201000801010108010100080101000805010008020100083b010108010100
-080201000801010008080100080901010801010008010100080801000802010008000100
-08000100080b010008020100080201000801010008020100080101000801010108010100
-0802010008010100082b0101080201000801010008510101080101000802010008010100
-080201000801010008050100084f01010803010008030100080201000801010008020100
-08050100083b09010001060a090100010300020204010301020204000600010008040100
-080401010804010108020104080301010804010108020100081c01010802010208020100
-0808010008090100080001010802010008080100080201000800010008000100080b0100
-080301020803010308020101080001000802010208020100080701010805010008030102
-0803010208020100080001010802010008060102083c0101080201020802010008080100
-08090100080001010802010008080100080201000800010008000100080b010008030102
-0803010308020101080001000802010208020100082b0101080301010852010108020102
-080301020802010408010104084b010108010104080201020803010208060100083b0901
-0001060a09010001030002020401030102020400060001000805010008230100081d0101
-08150105080101000819010508470100084d010108150105080101000819010508510101
-0858010108670101085709010001060a0901000103000202040103010202040006000100
-08490101081d010008670100084d0101081d010008710101085801010867010108570901
-0001060a090100010300020204010301020204000600010008490101081d010008670100
-084d0101081d0100087101010858010108670101085709010001060a0901000103000202
-0401030102020400060001000849010108d5010108900101085801010867010108570901
-0001060a09010001030002020401030102020400060001000849010108d5010108900101
-0858010108670101085709010001060a0901000103000202040103010202040006000100
-0849010108d50101089001010858010108670101085709010001060a0901000103000202
-0401030102020400060001000849010108d5010108900101085801010867010108570901
-0001060a09010001030002020401030102020400060001ff01ff01d409010001060a0901
-0001030002020401030102020400060001ff01ff01d409010001060a0901000103000202
-0401030102020400060001000849010108d5010108900101085801010867010108570901
-0001060a09010001030002020401030102020400060001000849010108d5010108900101
-0858010108670101085709010001060a0901000103000202040103010202040006000100
-0805010008230100081d010108670100086c010108900101085801010867010108570901
-0001060a09010001030002020401030102020400060001000804010008040101080d0100
-080a010108020100081c0101083b0100080b0102081b01000805010008650101082c0102
-086001010803010108520101080301000804010208030102085301010801010408030100
-08040102084309010001060a090100010300020204010301020204000600010008030100
-0804010008010100080b0101080901000801010008020100081b0101083b0100080d0100
-081a01000805010108650101082e01000860010108020100080101000851010108020101
-080301000802010008010100080201000852010108010100080601010803010008020100
-084209010001060a09010001030002020401030102020400060001000802010008050100
-08010100080a010008000100080901000801010008030100081a01010802010108000100
-080201020802010008000101080a01020802010008020100080201020802010008000101
-080201040803010108050100080301020803010208020100080001010805010008040100
-080001000865010108020102080201000800010108020100080001010803010208020100
-08000101080c010008030102080301010800010008020101080001000802010208020100
-08000101083d010108020100080101000851010108010100080001000803010008090100
-085201010801010008050100080001000803010008020100084209010001060a09010001
-030002020401030102020400060001000801010008060100080101000809010008010100
-080901000801010008040100081901010801010008010101080101000802010008010101
-080101000808010008020100080101000802010008010100080201000801010108010100
-080301000805010108050100080201000802010008010100080201000801010108010100
-080301000804010008010100086501010801010008020100080101010801010008010101
-0801010008010100080201000801010108010100080b0100080201000802010008010100
-08010101080101000801010108010100080201000801010108010100083c010108020100
-080101000851010108030100080301000809010008520101080101030804010008030100
-08020100084209010001060a090100010300020204010301020204000600010008000100
-080701000801010008080100080201000809010008010100080501000818010108010100
-080201000801010008020100080101000802010008080100080201000801010008020100
-0801010008020100080101000802010008030100080d0100080201000802010008010100
-080201000801010008020100080301000803010008020100086501010801010008020100
-0801010008050100080501000802010008010100080f0100080201000802010008010100
-080201000801010008020100080101000802010008010100084001010802010008010100
-085101010803010008030103080501000853010108050100080301000804010308420901
-0001060a0901000103000202040103010202040006000100080101000806010008010100
-080801000802010008090100080101000804010008190101080101000802010008010104
-080101000802010008080104080201000800010008020104080101000802010008030100
-080d01000802010008020100080101000802010008010100080201000802010008040100
-0802010008650101080101040801010008050100080501000802010008010100080f0100
-080201000802010008010100080201000801010008020100080101040801010008400101
-080201000801010008510101080301000803010008020100080301000854010108050100
-0803010008070100084209010001060a0901000103000202040103010202040006000100
-08020100080501000801010008080105080801000801010008030100081a010108010100
-080201000801010008050100080201000808010008060100080001000802010008050100
-0802010008030100080d0100080201000802010008010100080201000801010008020100
-080201000804010508640101080101000805010008050100080501000802010008010100
-080f01000802010008020100080101000802010008010100080201000801010008050100
-084001010802010008010100085101010803010008030100080201000802010008550101
-08010100080201000803010008070100084209010001060a090100010300020204010301
-020204000600010008030100080401000801010008030101080601000803010108030100
-0801010008020100081b0101080101000801010108010100080201000801010008020100
-080801000802010008030100080301000802010008010100080201000803010008050101
-080501000802010008020100080101000802010008010101080101000801010008090100
-0865010108010100080201000801010008050100080501000802010008010100080f0100
-080201000802010008010100080101010801010008010101080101000802010008010100
-084001010802010008010100085101010803010008030100080201000801010008560101
-0801010008020100080301000803010008020100084209010001060a0901000103000202
-040103010202040006000100080401000804010108040101080601000803010108040101
-08020100081c010108020101080001000802010208020100080201000809010208040100
-080401020802010008020100080401010803010108050100080301020803010208020100
-080001010802010008090100086501010802010208020100080501000806010208020100
-080f01000803010208030101080001000802010108000100080201020802010008400101
-080301010852010108010104080201020802010408520101080201020802010408020102
-084309010001060a09010001030002020401030102020400060001000805010008230100
-081d010108050100080e01050840010008770101082301050813010008050100084a0101
-0858010108670101085709010001060a0901000103000202040103010202040006000100
-084901010801010008020100085501000877010108390100080201000801010008020100
-084a01010858010108670101085709010001060a09010001030002020401030102020400
-0600010008490101080201020856010008770101083a010208030102084b010108580101
-08670101085709010001060a090100010300020204010301020204000600010008490101
-08d50101089001010858010108670101085709010001060a090100010300020204010301
-02020400060001000849010108d50101089001010858010108670101085709010001060a
-09010001030002020401030102020400060001000849010108d501010890010108580101
-08670101085709010001060a090100010300020204010301020204000600010008490101
-08d50101089001010858010108670101085709010001060a090100010300020204010301
-02020400060001ff01ff01d409010001060a090100010300020204010301020204000600
-00ff00ff00d409010001060a090100010300020204010301020204000600000008490001
-08d50001089000010858000108670001085709010001060a090100010300020204010301
-02020400060000000849000108d50001089000010858000108670001085709010001060a
-09010001030002020401030102020400060000000805000008230000081d0001086e0000
-08650001089000010858000108670001085709010001060a090100010300020204010301
-0202040006000000080400000804000108090004080a000108020000081c0001084f0002
-081b000008020002085f000108170002080500000812000008060000082e000008120002
-080300020805000108030001085200010805000008020002080400010853000108030000
-080400020803000208060000083b09010001060a09010001030002020401030102020400
-0600000008030000080400000801000008080000080d00000801000008020000081b0001
-08510000081a00000802000008020000085e000108190000081900000836000008140000
-080500000805000108020000080100000851000108040001080100000802000008020000
-0801000008520001080200010803000008020000080100000802000008040001083b0901
-0001060a0901000103000202040103010202040006000000080200000805000008010000
-08080000080d00000801000008030000081a000108020001080000000802000208020000
-08000001080a000208030002080200000800000108020000080200000802000208020000
-080000010804000108050000080300020803000208020000080000010805000008020000
-086200010802000208020000080000010802000008000001080500000803000208030002
-080300020802000408020002080300020802000008000001080a00020803000208020000
-080000010802000408010000080000010803000208050000080500000803000308020000
-080100000851000108030000080000000805000008020000080100000852000108010000
-080000000803000008050000080200000803000008000000083b09010001060a09010001
-0300020204010301020204000600000008010000080600000801000008080003080a0000
-080100000804000008190001080100000801000108010000080200000801000108010000
-080800000802000008010000080200000801000108010000080100000802000008010000
-080200000801000108010000080300010805000008020000080200000801000008020000
-080100010801000008030000080300000862000108010000080200000801000108010000
-080100010801000008040000080500000802000008020000080100000802000008030000
-080600000802000008020000080100010801000008080000080200000801000008020000
-080100010801000008030000080300010801000008010000080200000804000008050000
-080200000801000108020000080100000851000108020000080100000805000008020000
-0801000008520001080300000803000008050000080200000802000008010000083b0901
-0001060a0901000103000202040103010202040006000000080000000807000008010000
-080c00000809000008010000080500000818000108010000080200000801000008020000
-080100000802000008080000080500000802000008010000080500000802000008010000
-0802000008010000080f0000080200000802000008010000080200000801000008020000
-0803000008030003085f0001080500000801000008020000080100000802000008040000
-080500000802000008090000080300000806000008020000080200000801000008020000
-080800000805000008020000080100000802000008030000080300000805000008020000
-080400000805000008020000080100010802000008010000085100010801000008020000
-080300010803000008010000085200010803000008030003080300020802000008020000
-083b09010001060a09010001030002020401030102020400060000000801000008060000
-08010000080c000008090000080100000804000008190001080100000802000008010004
-080100000802000008090002080200040801000008060000080000000802000408010000
-080f00000802000008020000080100000802000008010000080200000802000008040000
-08020000085e000108020003080100000802000008010000080200000804000008050000
-080200000806000308030000080600000802000008020000080100000802000008080000
-080500000802000008010000080200000803000008030000080500000802000008040000
-080500000802000408020000080100000851000108010000080200000805000008020000
-080100000852000108030000080300000802000008010000080200000801000008020000
-083b09010001060a09010001030002020401030102020400060000000802000008050000
-080100000808000008020000080900000801000008030000081a00010801000008020000
-080100000805000008020000080c00000801000008050000080600000800000008020000
-08050000080f000008020000080200000801000008020000080100000802000008020000
-0804000008020000085e0001080100000802000008010000080200000801000008020000
-080400000805000008020000080500000802000008030000080600000802000008020000
-080100000802000008080000080500000802000008010000080200000803000008030000
-080500000802000008040000080500000802000008010001080200000801000008510001
-080100050804000008020000080100000852000108030000080300000802000008010000
-0802000008010005083a09010001060a0901000103000202040103010202040006000000
-080300000804000008010000080300010802000008020000080300010803000008010000
-08020000081b000108010000080100010801000008020000080100000802000008080000
-080200000801000008020000080100000807000008030000080200000801000008070001
-080500000802000008020000080100000802000008010001080100000801000008050000
-08020000085e000108010000080200000801000108010000080100010801000008040000
-080500000802000008020000080100000802000008030000080600000802000008020000
-080100000802000008080000080200000801000008020000080100000802000008030000
-080300000805000008020000080400000805000008020000080100010802000008010000
-085100010805000008010000080200000802000008010000085200010803000008030000
-08020000080100000802000008050000083b09010001060a090100010300020204010301
-020204000600000008040000080400010804000108030002080400010804000108020000
-081c00010802000108000000080200020802000008020000080900020803000208020000
-080700000804000208020000080700010805000008030002080300020802000008000001
-0802000008060002085f0001080200030801000008000001080200000800000108050000
-080500000803000208030003080400010804000008030002080200000802000008090002
-080300020802000008020000080400010801000008060002080500000805000008030003
-080300010852000108050000080200020804000108530001080100040802000208030002
-08060000083b09010001060a090100010300020204010301020204000600000008050000
-08230000081d000108050000080e000508470000087000010808000008050000083c0005
-083c00010858000108670001085709010001060a09010001030002020401030102020400
-06000000084900010801000008020000085c0000087000010808000008050000087f0001
-0858000108670001085709010001060a0901000103000202040103010202040006000000
-0849000108020002085d0000087000010808000008050000087f00010858000108670001
-085709010001060a09010001030002020401030102020400060000000849000108d50001
-089000010858000108670001085709010001060a09010001030002020401030102020400
-060000000849000108d50001089000010858000108670001085709010001060a09010001
-030002020401030102020400060000000849000108d50001089000010858000108670001
-085709010001060a09010001030002020401030102020400060000000849000108d50001
-089000010858000108670001085709010001060a09010001030002020401030102020400
-060000ff00ff00d409010001060a09010001030002020401030102020400060001ff01ff
-01d409010001060a09010001030002020401030102020400060001000849010108d50101
-089001010858010108670101085709010001060a09010001030002020401030102020400
-060001000849010108d50101089001010858010108670101085709010001060a09010001
-030002020401030102020400060001000805010008230100081d010108c90100080a0101
-089001010858010108670101085709010001060a09010001030002020401030102020400
-060001000804010008040101080a0102080b010108020100081c01010817010208050100
-0812010008060100082e01000829010008110102081b0100080201020804010108900101
-08030101085201010803010008040102085a010108020102080301020804010108430901
-0001060a0901000103000202040103010202040006000100080301000804010008010100
-0808010008020100080901000801010008020100081b0101081901000819010008360100
-083e0100081a010008020100080201000803010108900101080201000801010008510101
-080201010803010008020100085901010801010008020100080101000802010008020100
-08010100084209010001060a090100010300020204010301020204000600010008020100
-080501000801010008080100080d01000801010008030100081a01010802010208020100
-080001010802010008000101080501000803010208030102080301020802010408020102
-080301020802010008000101080901010800010008030102080301020802010408020102
-080201000800010108040101080201010800010008030102080301020802010008000101
-080c01000803010208030102080201000800010108050100080601000803010108900101
-080201000801010008510101080101000800010008070100085901010805010008050100
-0802010008010100084209010001060a0901000103000202040103010202040006000100
-08010100080601000801010008080100080d010008010100080401000819010108010100
-080201000801010108010100080101010801010008040100080501000802010008020100
-080101000802010008030100080601000802010008020100080101010801010008080100
-080001000800010008010100080201000801010008020100080301000803010008020100
-080101010801010008030101080201000800010008000100080101000802010008040100
-0802010108010100080b0100080201000802010008010100080201000801010108010100
-080301000807010008030101089001010802010008010100085101010803010008070100
-0859010108050100080501000802010008010100084209010001060a0901000103000202
-04010301020204000600010008000100080701000801010008080103080a010008010100
-080501000818010108050100080101000802010008010100080201000804010008050100
-080201000809010008030100080601000802010008020100080101000802010008080100
-0800010008000100080501000801010008070100080301000802010008010100080c0100
-080001000800010008050100080401000802010008020100080b01000802010008020100
-080101000802010008010100080201000803010008060100080401010890010108020100
-08010100085101010803010008060100085a010108030101080501000803010008010100
-084209010001060a09010001030002020401030102020400060001000801010008060100
-080101000808010008020100080901000801010008040100081901010802010308010100
-080201000801010008020100080401000805010008020100080601030803010008060100
-080201000802010008010100080201000808010008000100080001000802010308020102
-080401000803010408010100080c01000800010008000100080201030804010008020100
-08020100080b010008020100080201000801010008020100080101000802010008020100
-0806010008050101089001010802010008010100085101010803010008050100085b0101
-08050100080301000804010008010100084209010001060a090100010300020204010301
-020204000600010008020100080501000801010008080100080201000809010008010100
-08030100081a010108010100080201000801010008020100080101000802010008040100
-080501000802010008050100080201000803010008060100080201000802010008010100
-080201000808010008000100080001000801010008020100080501000803010008030100
-08050100080c010008000100080001000801010008020100080401000802010008020100
-080b01000802010008020100080101000802010008010100080201000802010008050100
-08060101089001010802010008010100085101010803010008040100085c010108050100
-080201000805010008010100084209010001060a09010001030002020401030102020400
-060001000803010008040100080101000803010108020100080201000803010108030100
-0801010008020100081b0101080101000802010008010101080101000801010108010100
-080401000805010008020100080201000801010008020100080301000806010008020100
-080201000801010008020100080801000800010008000100080101000802010008010100
-080201000803010008030100080201000801010008070101080201000800010008000100
-0801010008020100080401000802010008020100080b0100080201000802010008010100
-080201000801010108010100080101000805010008070101089001010802010008010100
-085101010803010008030100085d01010801010008020100080101000806010008010100
-084209010001060a09010001030002020401030102020400060001000804010008040101
-0804010108030102080401010804010108020100081c0101080201030801010008000101
-080201000800010108050100080501000803010208030103080401010804010008030102
-080201000802010008080100080001000800010008020103080201020805010108020102
-080201000807010108020100080001000800010008020103080401000802010008020100
-080b01000803010208030102080201000800010108020100080501040803010108900101
-080301010852010108010104080101040859010108020102080201040803010108430901
-0001060a09010001030002020401030102020400060001000805010008230100081d0101
-0808010008050100083c0105084d01050816010008150101089001010858010108670101
-085709010001060a09010001030002020401030102020400060001000849010108080100
-0805010008ad010008150101089001010858010108670101085709010001060a09010001
-0300020204010301020204000600010008490101080801000805010008ad010008150101
-089001010858010108670101085709010001060a09010001030002020401030102020400
-060001000849010108d50101089001010858010108670101085709010001060a09010001
-030002020401030102020400060001000849010108d50101089001010858010108670101
-085709010001060a09010001030002020401030102020400060001000849010108d50101
-089001010858010108670101085709010001060a09010001030002020401030102020400
-060001000849010108d50101089001010858010108670101085709010001060a09010001
-030002020401030102020400060001ff01ff01d409010001060a09010001030002020401
-030102020400060001ff01ff01d409010001060a09010001030002020401030102020400
-060001000849010108d50101089001010858010108670101085709010001060a09010001
-030002020401030102020400060001000849010108d50101089001010858010108670101
-085709010001060a09010001030002020401030102020400060001000805010008230100
-081d010108bb010008180101089001010858010108670101085709010001060a09010001
-03000202040103010202040006000100080401000804010108090104080a010108020100
-081c010108170102080501000812010008060100082e0100081901020821010008040100
-0807010008050100081101010890010108030101085201010805010008020102085a0101
-080201020803010208030102084309010001060a09010001030002020401030102020400
-060001000803010008040100080101000808010008020100080901000801010008020100
-081b0101081901000819010008360100081b010008270100080601000805010108110101
-089001010802010008010100085101010804010108010100080201000859010108010100
-0802010008010100080201000801010008020100084209010001060a0901000103000202
-040103010202040006000100080201000805010008010100080c01000809010008010100
-08030100081a010108020102080201000800010108020100080001010805010008030102
-080301020803010208020104080201020803010208020100080001010809010108000100
-080301020803010208020104080201020802010008000101080401010805010008030102
-080301020802010008000101080a01020802010408040100080401000800010008110101
-089001010802010008010100085101010803010008000100080501000859010108050100
-080101000802010008010100084609010001060a09010001030002020401030102020400
-06000100080101000806010008010100080b0100080a0100080101000804010008190101
-080101000802010008010101080101000801010108010100080401000805010008020100
-080201000801010008020100080301000806010008020100080201000801010108010100
-080801000800010008000100080101000802010008010100080201000803010008030100
-080201000801010108010100080301010805010008020100080201000801010008020100
-0801010108010100080b0100080401000805010008040100080101000811010108900101
-080201000801010008510101080201000801010008050100085901010805010008010100
-0802010008010100084609010001090c0001030002020401030102020400060001000800
-01000807010008010100080b0100080a0100080101000805010008180101080501000801
-010008020100080101000802010008040100080501000802010008090100080301000806
-010008020100080201000801010008020100080801000800010008000100080501000801
-010008070100080301000802010008010100080f01000802010008020100080101000802
-01000801010008020100080b010008040100080501000803010008020100081101010890
-0101080201000801010008510101080101000802010008040100085a0101080401000803
-010208020103084309010000090d00010300020204010301020204000600010008010100
-0806010008010100080b0100080a01000801010008040100081901010802010308010100
-080201000801010008020100080401000805010008020100080601030803010008060100
-080201000802010008010100080201000808010008000100080001000802010308020102
-080401000803010408010100080f01000802010008020100080101000802010008010100
-08020100080b010008040100080401000804010008020100081101010890010108020100
-0801010008510101080101000802010008030100085b0101080301000803010008020100
-080101000802010008420901070e00010300020204010301020204000600010008020100
-0805010008010100080a0100080b01000801010008030100081a01010801010008020100
-080101000802010008010100080201000804010008050100080201000805010008020100
-080301000806010008020100080201000801010008020100080801000800010008000100
-080101000802010008050100080301000803010008050100080f01000802010008020100
-08010100080201000801010008020100080b010008040100080401000804010508100101
-089001010802010008010100085101010801010508010100085c01010802010008040100
-08020100080101000802010008420901070e000103000202040103010202040006000100
-080301000804010008010100080301010804010008050101080301000801010008020100
-081b01010801010008020100080101010801010008010101080101000804010008050100
-080201000802010008010100080201000803010008060100080201000802010008010100
-080201000808010008000100080001000801010008020100080101000802010008030100
-080301000802010008010100080701010805010008020100080201000801010008020100
-0801010108010100080b0100080401000803010008090100081101010890010108020100
-08010100085101010805010008010100085d010108010100080501000802010008010100
-0802010008420901070e0001030002020401030102020400060001000804010008040101
-0804010108040100080501010804010108020100081c0101080201030801010008000101
-080201000800010108050100080501000803010208030103080401010804010008030102
-080201000802010008080100080001000800010008020103080201020805010108020102
-08020100080701010805010008030102080301020802010008000101080c010008050101
-080101000809010008110101089001010803010108520101080501000801010408590101
-08010104080201020803010208430901070e000103000202040103010202040006000100
-0805010008230100081d01010808010008050100083c01050847010008040105082d0101
-08900101085801010867010108570901070e000103000202040103010202040006000100
-084901010808010008050100088a01000838010108900101085801010867010108570901
-070e000103000202040103010202040006000100084901010808010008050100088a0100
-0838010108900101085801010867010108570901070e0001030002020401030102020400
-060001000849010108d5010108900101085801010867010108570901070e000103000202
-0401030102020400060001000849010108d5010108900101085801010867010108570901
-070e0001030002020401030102020400060001000849010108d501010890010108580101
-0867010108570901070e0001030002020401030102020400060001000849010108d50101
-08900101085801010867010108570901070e0001030002020401030102020400060001ff
-01ff01d40901070e0001030002020401030102020400060001ff01ff01d40901070e0001
-030002020401030102020400060001000849010108d50101089001010858010108670101
-08570901070e0001030002020401030102020400060001000849010108d5010108900101
-085801010867010108570901070e00010300020204010301020204000600010008050100
-08230100081d0101086e01000865010108900101085801010867010108570901070e0001
-030002020401030102020400060001000804010008040101080a0102080b010108020100
-081c0101084f0102081b010008020102085f010108010100082201020867010108030101
-085201010801010408030101080601000852010108030100080401020803010208060100
-083b0901070e000103000202040103010202040006000100080301000804010008010100
-0808010008020100080901000801010008020100081b010108510100081a010008020100
-08020100085e010108010100082401000867010108020100080101000851010108010100
-080601000801010008040101085201010802010108030100080201000801010008020100
-08040101083b0901070e0001030002020401030102020400060001000802010008050100
-080101000808010008020100080901000801010008030100081a01010802010108000100
-080201020802010008000101080a01020803010208020100080001010802010008020100
-080201020802010008000101080401010805010008030102080301020802010008000101
-080501000802010008620101080101000801010008030102080201000800010108020100
-080001010803010208050100080a010208020100080201000801010008000101084b0101
-080201000801010008510101080101000806010008010100080301000800010008520101
-08010100080001000803010008050100080201000803010008000100083b0901070e0001
-030002020401030102020400060001000801010008060100080101000808010008020100
-080901000801010008040100081901010801010008010101080101000802010008010101
-080101000808010008020100080101000802010008010101080101000801010008020100
-080101000802010008010101080101000803010108050100080201000802010008010100
-080201000801010108010100080301000803010008620101080101000800010008030100
-080201000801010108010100080101010801010008010100080201000804010008090100
-0802010008010100080201000801010108010100084a0101080201000801010008510101
-080101030803010008010100080201000801010008520101080301000803010008050100
-080201000802010008010100083b0901070e000103000202040103010202040006000100
-08000100080701000801010008090102080a010008010100080501000818010108010100
-080201000801010008020100080101000802010008080100080501000802010008010100
-0805010008020100080101000802010008010100080f0100080201000802010008010100
-0802010008010100080201000803010008030103085f0101080101010804010008020100
-080101000805010008020100080101000802010008040100080901000805010008020100
-0801010008020100084a0101080201000801010008510101080501000802010008010100
-0801010008020100085201010803010008030103080301020802010008020100083b0901
-070e00010300020204010301020204000600010008010100080601000801010008080100
-080201000809010008010100080401000819010108010100080201000801010408010100
-0802010008090102080201040801010008060100080001000802010408010100080f0100
-080201000802010008010100080201000801010008020100080201000804010008020100
-085e010108010101080401040801010008050100080201000801010408040100080a0102
-08020100080201000801010008020100084a010108020100080101000851010108050100
-080201000801010008010100080201000852010108030100080301000802010008010100
-080201000801010008020100083b0901070e000103000202040103010202040006000100
-0802010008050100080101000808010008020100080901000801010008030100081a0101
-0801010008020100080101000805010008020100080c0100080101000805010008060100
-080001000802010008050100080f01000802010008020100080101000802010008010100
-08020100080201000804010008020100085e010108010100080001000803010008050100
-08050100080201000801010008080100080d010008010100080201000801010008020100
-084a01010802010008010100085101010801010008020100080201000801010008010105
-08510101080301000803010008020100080101000802010008010105083a0901070e0001
-030002020401030102020400060001000803010008040100080101000803010108020100
-0802010008030101080301000801010008020100081b0101080101000801010108010100
-080201000801010008020100080801000802010008010100080201000801010008070100
-080301000802010008010100080701010805010008020100080201000801010008020100
-0801010108010100080101000805010008020100085e0101080101000801010008020100
-080201000801010008050100080201000801010008020100080401000809010008020100
-08010100080101010801010108010100084a010108020100080101000851010108010100
-080201000802010008010100080501000852010108030100080301000802010008010100
-0802010008050100083b0901070e00010300020204010301020204000600010008040100
-080401010804010108030102080401010804010108020100081c01010802010108000100
-080201020802010008020100080901020803010208020100080701000804010208020100
-0807010108050100080301020803010208020100080001010802010008060102085f0101
-0801010008020100080201020802010008050100080201000802010208050100080a0102
-08030101080001000801010008000101084b010108030101085201010802010208040101
-080601000852010108010104080201020803010208060100083b0901070e000103000202
-0401030102020400060001000805010008230100081d010108050100080e010508470100
-08700101082a0105080f0100084e0101085801010867010108570901070e000103000202
-040103010202040006000100084901010801010008020100085c01000870010108400100
-084e0101085801010867010108570901070e000103000202040103010202040006000100
-0849010108020102085d01000870010108400100084e0101085801010867010108570901
-070e0001030002020401030102020400060001000849010108d501010890010108580101
-0867010108570901070e0001030002020401030102020400060001000849010108d50101
-08900101085801010867010108570901070e000103000202040103010202040006000100
-0849010108d5010108900101085801010867010108570901070e00010300020204010301
-02020400060001000849010108d5010108900101085801010867010108570901070e0001
-030002020401030102020400060001ff01ff01d40901070e000103000202040103010202
-0400060001ff01ff01d40901070e00010300020204010301020204000600010008490101
-08d5010108900101085801010867010108570901070e0001030002020401030102020400
-060001000849010108d5010108900101085801010867010108570901070e000103000202
-0401030102020400060001000805010008230100081d0101086e01000865010108900101
-085801010867010108570901070e00010300020204010301020204000600010008040100
-08040101080a0102080b010108020100081c0101084f0102081b010008020102085f0101
-0890010108030101085201010802010208030102085a0101080201020803010208030102
-08430901070e000103000202040103010202040006000100080301000804010008010100
-0808010008020100080901000801010008020100081b010108510100081a010008020100
-08020100085e010108900101080201000801010008510101080101000802010008010100
-080201000859010108010100080201000801010008020100080101000802010008420901
-070e00010300020204010301020204000600010008020100080501000801010008080100
-08020100080901000801010008030100081a010108020101080001000802010208020100
-08000101080a010208030102080201000800010108020100080201000802010208020100
-080001010804010108050100080301020803010208020100080001010805010008020100
-086201010801010008000101080301020802010008020100087b01010802010008010100
-085101010805010008050100085901010805010008010100080201000801010008460901
-070e00010300020204010301020204000600010008010100080601000801010008080100
-080201000809010008010100080401000819010108010100080101010801010008020100
-080101010801010008080100080201000801010008020100080101010801010008010100
-080201000801010008020100080101010801010008030101080501000802010008020100
-080101000802010008010101080101000803010008030100086201010801010108010100
-08010100080201000801010008020100087b010108020100080101000851010108050100
-08050100085901010805010008010100080201000801010008460901070e000103000202
-040103010202040006000100080001000807010008010100080901030809010008010100
-080501000818010108010100080201000801010008020100080101000802010008080100
-0805010008020100080101000805010008020100080101000802010008010100080f0100
-0802010008020100080101000802010008010100080201000803010008030103085f0101
-0801010008050100080201000802010008000100087c0101080201000801010008510101
-0804010008050100085a010108040100080301020802010308430901070e000103000202
-040103010202040006000100080101000806010008010100080c01000809010008010100
-080401000819010108010100080201000801010408010100080201000809010208020104
-0801010008060100080001000802010408010100080f0100080201000802010008010100
-080201000801010008020100080201000804010008020100085e01010801010008050104
-08030100087d01010802010008010100085101010803010008050100085b010108030100
-0803010008020100080101000802010008420901070e0001030002020401030102020400
-06000100080201000805010008010100080c0100080901000801010008030100081a0101
-0801010008020100080101000805010008020100080c0100080101000805010008060100
-080001000802010008050100080f01000802010008020100080101000802010008010100
-08020100080201000804010008020100085e010108010100080501000806010008000100
-087c01010802010008010100085101010802010008050100085c01010802010008040100
-08020100080101000802010008420901070e000103000202040103010202040006000100
-080301000804010008010100080301010802010008020100080301010803010008010100
-08020100081b010108010100080101010801010008020100080101000802010008080100
-080201000801010008020100080101000807010008030100080201000801010008070101
-080501000802010008020100080101000802010008010101080101000801010008050100
-08020100085e01010801010008050100080201000801010008020100087b010108020100
-08010100085101010801010008050100085d010108010100080501000802010008010100
-0802010008420901070e0001030002020401030102020400060001000804010008040101
-0804010108030102080401010804010108020100081c0101080201010800010008020102
-080201000802010008090102080301020802010008070100080401020802010008070101
-08050100080301020803010208020100080001010802010008060102085f010108010100
-080601020802010008020100087b01010803010108520101080101040801010408590101
-08010104080201020803010208430901070e000103000202040103010202040006000100
-0805010008230100081d010108050100080e010508470100087001010890010108580101
-0867010108570901070e0001030002020401030102020400060001000849010108010100
-08020100085c01000870010108900101085801010867010108570901070e000103000202
-0401030102020400060001000849010108020102085d0100087001010890010108580101
-0867010108570901070e0001030002020401030102020400060001000849010108d50101
-08900101085801010867010108570901070e000103000202040103010202040006000100
-0849010108d5010108900101085801010867010108570901070e00010300020204010301
-02020400060001000849010108d5010108900101085801010867010108570901070e0001
-030002020401030102020400060001000849010108d50101089001010858010108670101
-08570901070e0001030002020401030102020400060001ff01ff01d40901070e00010300
-02020401030102020400060001ff01ff01d40901070e0001030002020401030102020400
-060001000849010108d5010108900101085801010867010108570901070e000103000202
-0401030102020400060001000849010108d5010108900101085801010867010108570901
-070e00010300020204010301020204000600010008050100082a010008160101086e0100
-0865010108900101085801010867010108570901070e0001030002020401030102020400
-060001000804010008040101080b010008050101080b01010802010008150101084f0102
-081b010008020102085f01010809010208090100080d0102086701010803010108520101
-0802010208030102085a010108020102080201040801010408420901070e000103000202
-040103010202040006000100080301000804010008010100080901010804010008010100
-0809010008010100080201000814010108510100081a01000802010008020100085e0101
-080b010008090100080f0100086701010802010008010100085101010801010008020100
-080101000802010008590101080101000802010008010100080201000801010008460901
-070e00010300020204010301020204000600010008020100080501000801010008080100
-080001000804010008010100080901000801010008030100081301010802010108000100
-080201020802010008000101080a01020803010208020100080001010802010008020100
-080201020802010008000101080401010805010008030102080301020802010008000101
-080501000802010008620101080201010800010008040100080301020802010008000101
-0803010208050100080901000800010108030102080201010800010008030102080a0102
-080301020802010008000101080201000802010008020102080201000800010108130101
-080201000801010008510101080101000802010008010100080201000859010108050100
-080501000801010008460901070e00010300020204010301020204000600010008010100
-0806010008010100080a0100080401000801010008090100080101000804010008120101
-080101000801010108010100080201000801010108010100080801000802010008010100
-080201000801010108010100080101000802010008010100080201000801010108010100
-080301010805010008020100080201000801010008020100080101010801010008030100
-080301000862010108010100080101010804010008020100080201000801010108010100
-080101000802010008040100080901010801010008010100080201000801010008000100
-080001000801010008020100080801000802010008010100080201000801010108010100
-080101000802010008010100080201000801010108010100081201010802010008010100
-085101010801010008020100080101000802010008590101080501000804010008020103
-08430901070e000103000202040103010202040006000100080001000807010008010100
-080a01000804010008010100080901000801010008050100081101010801010008020100
-080101000802010008010100080201000808010008050100080201000801010008050100
-08020100080101000802010008010100080f010008020100080201000801010008020100
-08010100080201000803010008030103085f010108010100080201000804010008020100
-080201000801010008020100080501000804010008090100080201000805010008010100
-080001000800010008010100080201000808010008050100080201000801010008050100
-080201000801010008020100080101000816010108020100080101000851010108020102
-08030102085a010108030101080501000806010008420901070e00010300020204010301
-0202040006000100080101000806010008010100080a0100080401000801010008090100
-080101000804010008120101080101000802010008010104080101000802010008090102
-080201040801010008060100080001000802010408010100080f01000802010008020100
-08010100080201000801010008020100080201000804010008020100085e010108010100
-080201000804010008020100080201000801010008020100080201030804010008090100
-080201000802010308010100080001000800010008010104080901020802010408010100
-080601000800010008020104080101000816010108020100080101000851010108010100
-0802010008010100080201000859010108050100080401000806010008420901070e0001
-03000202040103010202040006000100080201000805010008010100080a010008040100
-080101000809010008010100080301000813010108010100080201000801010008050100
-08020100080c0100080101000805010008060100080001000802010008050100080f0100
-080201000802010008010100080201000801010008020100080201000804010008020100
-085e01010801010008020100080401000802010008020100080101000802010008010100
-080201000804010008090100080201000801010008020100080101000800010008000100
-080101000810010008010100080501000806010008000100080201000805010008160101
-080201000801010008510101080101000802010008010100080201000859010108050100
-08030100080301000802010008420901070e000103000202040103010202040006000100
-080301000804010008010100080301010804010008040100080101000803010108030100
-080101000802010008140101080101000801010108010100080201000801010008020100
-080801000802010008010100080201000801010008070100080301000802010008010100
-080701010805010008020100080201000801010008020100080101010801010008010100
-0805010008020100085e0101080101000801010108040100080201000802010008010101
-080101000801010008020100080401000809010008020100080101000802010008010100
-080001000800010008010100080201000808010008020100080101000802010008010100
-080701000803010008020100080101000816010108020100080101000851010108010100
-080201000801010008020100085901010801010008020100080301000803010008020100
-08420901070e000103000202040103010202040006000100080401000804010108040101
-080201040803010108040101080401010802010008150101080201010800010008020102
-080201000802010008090102080301020802010008070100080401020802010008070101
-08050100080301020803010208020100080001010802010008060102085f010108020101
-080001000804010008030102080201000800010108030103080401000809010008020100
-0802010308010100080001000800010008020102080a0102080301020802010008070100
-08040102080201000816010108030101085201010802010208030102085a010108020102
-080401000804010208430901070e00010300020204010301020204000600010008050100
-082a01000816010108050100080e010508470100087001010805010008230105081c0105
-083c0101085801010867010108570901070e000103000202040103010202040006000100
-084901010801010008020100085c01000870010108010100080201000889010108580101
-0867010108570901070e0001030002020401030102020400060001000849010108020102
-085d01000870010108020102088a0101085801010867010108570901070e000103000202
-0401030102020400060001000849010108d5010108900101085801010867010108570901
-070e0001030002020401030102020400060001000849010108d501010890010108580101
-0867010108570901070e0001030002020401030102020400060001000849010108d50101
-08900101085801010867010108570901070e000103000202040103010202040006000100
-0849010108d5010108900101085801010867010108570901070e00010300020204010301
-02020400060001ff01ff01d40901070e0001030002020401030102020400060001ff01ff
-01d40901070e0001030002020401030102020400060001000849010108d5010108900101
-085801010867010108570901070e00010300020204010301020204000600010008490101
-08d5010108900101085801010867010108570901070e0001030002020401030102020400
-0600010008050100082a010008160101086e010008650101089001010858010108670101
-08570901070e0001030002020401030102020400060001000804010008040101080b0100
-08050100080c01010802010008150101084f0102081b010008020102085f010108110100
-087d01010803010108520101080301000805010008040102085301010802010208030102
-0804010108430901070e0001030002020401030102020400060001000803010008040100
-080101000809010108040101080b010008010100080201000814010108510100081a0100
-0802010008020100085e010108110100087d010108020100080101000851010108020101
-080401010803010008020100085201010801010008020100080101000802010008020100
-0801010008420901070e0001030002020401030102020400060001000802010008050100
-0801010008080100080001000803010008000100080b0100080101000803010008130101
-0802010108000100080201020802010008000101080a0102080301020802010008000101
-080201000802010008020102080201000800010108040101080501000803010208030102
-080201000800010108050100080201000862010108010100080001010803010208020104
-080901020802010008020100080101000800010108600101080201000801010008510101
-080101000800010008030100080001000803010008560101080501000805010008020100
-0801010008420901070e0001030002020401030102020400060001000801010008060100
-08010100080a010008050100080b01000801010008040100081201010801010008010101
-080101000802010008010101080101000808010008020100080101000802010008010101
-080101000801010008020100080101000802010008010101080101000803010108050100
-080201000802010008010100080201000801010108010100080301000803010008620101
-0801010108010100080101000802010008030100080a0100080201000801010008020100
-0801010108010100085f0101080201000801010008510101080301000805010008030100
-085601010805010008050100080201000801010008420901070e00010300020204010301
-0202040006000100080001000807010008010100080a010008050100080b010008010100
-080501000811010108010100080201000801010008020100080101000802010008080100
-0805010008020100080101000805010008020100080101000802010008010100080f0100
-0802010008020100080101000802010008010100080201000803010008030103085f0101
-0801010008020100080101000802010008030100080a0100080501000802010008010100
-08020100085f010108020100080101000851010108030100080501000803010308530101
-0803010108050100080301000801010008420901070e0001030002020401030102020400
-06000100080101000806010008010100080a010008050100080b01000801010008040100
-081201010801010008020100080101040801010008020100080901020802010408010100
-08060100080001000802010408010100080f010008020100080201000801010008020100
-0801010008020100080201000804010008020100085e0101080101000802010008010104
-08030100080b010208020100080201000801010008020100085f01010802010008010100
-085101010803010008050100080301000802010008520101080501000803010008040100
-0801010008420901070e0001030002020401030102020400060001000802010008050100
-08010100080a010008050100080b01000801010008030100081301010801010008020100
-080101000805010008020100080c01000801010008050100080601000800010008020100
-08050100080f010008020100080201000801010008020100080101000802010008020100
-0804010008020100085e010108010100080201000801010008070100080e010008010100
-080201000801010008020100085f01010802010008010100085101010803010008050100
-0803010008020100085201010805010008020100080501000801010008420901070e0001
-030002020401030102020400060001000803010008040100080101000803010108040100
-080501000805010108030100080101000802010008140101080101000801010108010100
-080201000801010008020100080801000802010008010100080201000801010008070100
-080301000802010008010100080701010805010008020100080201000801010008020100
-0801010108010100080101000805010008020100085e0101080101000802010008010100
-0802010008030100080a01000802010008010100080101010801010108010100085f0101
-080201000801010008510101080301000805010008030100080201000852010108010100
-0802010008010100080601000801010008420901070e0001030002020401030102020400
-060001000804010008040101080401010802010408010104080301010804010108020100
-081501010802010108000100080201020802010008020100080901020803010208020100
-080701000804010208020100080701010805010008030102080301020802010008000101
-0802010008060102085f0101080101000802010008020102080501010809010208030101
-080001000801010008000101086001010803010108520101080101040801010408020102
-0853010108020102080201040803010108430901070e0001030002020401030102020400
-0600010008050100082a01000816010108050100080e0105084701000870010108150105
-080f010008630101085801010867010108570901070e0001030002020401030102020400
-06000100084901010801010008020100085c010008700101082b01000863010108580101
-0867010108570901070e0001030002020401030102020400060001000849010108020102
-085d010008700101082b010008630101085801010867010108570901070e000103000202
-0401030102020400060001000849010108d5010108900101085801010867010108570901
-070e0001030002020401030102020400060001000849010108d501010890010108580101
-0867010108570901070e0001030002020401030102020400060001000849010108d50101
-08900101085801010867010108570901070e000103000202040103010202040006000100
-0849010108d5010108900101085801010867010108570901070e00010300020204010301
-02020400060001ff01ff01d40901070e0001030002020401030102020400060001ff01ff
-01d40901070e0001030002020401030102020400060001000849010108d5010108900101
-085801010867010108570901070e00010300020204010301020204000600010008490101
-08d5010108900101085801010867010108570901070e0001030002020401030102020400
-0600010008050100082a010008160101086e010008650101089001010858010108670101
-08570901070e0001030002020401030102020400060001000804010008040101080b0100
-08040102080b01010802010008150101084f0102081b010008020102085f010108110100
-080301000878010108030101085201010802010208030102085a01010802010208030102
-0804010008440901070e0001030002020401030102020400060001000803010008040100
-080101000809010108030100080201000809010008010100080201000814010108510100
-081a01000802010008020100085e01010811010008030100087801010802010008010100
-085101010801010008020100080101000802010008590101080101000802010008010100
-080201000802010108440901070e00010300020204010301020204000600010008020100
-080501000801010008080100080001000807010008090100080101000803010008130101
-0802010108000100080201020802010008000101080a0102080301020802010008000101
-080201000802010008020102080201000800010108040101080501000803010208030102
-080201000800010108050100080201000862010108020102080201000802010008010104
-080101000800010108750101080201000801010008510101080501000805010008590101
-0805010008050100080101000800010008440901070e0001030002020401030102020400
-06000100080101000806010008010100080a010008070100080901000801010008040100
-081201010801010008010101080101000802010008010101080101000808010008020100
-080101000802010008010101080101000801010008020100080101000802010008010101
-080101000803010108050100080201000802010008010100080201000801010108010100
-080301000803010008620101080101000802010008010100080201000803010008030101
-080101000874010108020100080101000851010108050100080501000859010108050100
-080501000803010008440901070e00010300020204010301020204000600010008000100
-0807010008010100080a010008060100080a010008010100080501000811010108010100
-080201000801010008020100080101000802010008080100080501000802010008010100
-0805010008020100080101000802010008010100080f0100080201000802010008010100
-0802010008010100080201000803010008030103085f0101080501000801010008020100
-080301000803010008020100087401010802010008010100085101010804010008050100
-085a010108040100080401010804010008440901070e0001030002020401030102020400
-06000100080101000806010008010100080a010008050100080b01000801010008040100
-081201010801010008020100080101040801010008020100080901020802010408010100
-08060100080001000802010408010100080f010008020100080201000801010008020100
-0801010008020100080201000804010008020100085e0101080201030801010008020100
-080301000803010008020100087401010802010008010100085101010803010008050100
-085b010108030100080701000803010008440901070e0001030002020401030102020400
-06000100080201000805010008010100080a010008040100080c01000801010008030100
-081301010801010008020100080101000805010008020100080c01000801010008050100
-08060100080001000802010008050100080f010008020100080201000801010008020100
-0801010008020100080201000804010008020100085e0101080101000802010008010100
-080201000803010008030100080201000874010108020100080101000851010108020100
-08050100085c010108020100080801000803010008440901070e00010300020204010301
-020204000600010008030100080401000801010008030101080401000803010008070101
-080301000801010008020100081401010801010008010101080101000802010008010100
-080201000808010008020100080101000802010008010100080701000803010008020100
-080101000807010108050100080201000802010008010100080201000801010108010100
-080101000805010008020100085e01010801010008020100080101000801010108030100
-0803010008020100087401010802010008010100085101010801010008050100085d0101
-0801010008050100080201000803010008440901070e0001030002020401030102020400
-060001000804010008040101080401010802010408010104080301010804010108020100
-081501010802010108000100080201020802010008020100080901020803010208020100
-080701000804010208020100080701010805010008030102080301020802010008000101
-0802010008060102085f0101080201030802010108000100080401010801010008020100
-087401010803010108520101080101040801010408590101080101040802010208020104
-08420901070e00010300020204010301020204000600010008050100082a010008160101
-08050100080e0105084701000870010108900101085801010867010108570901070e0001
-03000202040103010202040006000100084901010801010008020100085c010008700101
-08900101085801010867010108570901070e000103000202040103010202040006000100
-0849010108020102085d01000870010108900101085801010867010108570901070e0001
-030002020401030102020400060001000849010108d50101089001010858010108670101
-08570901070e0001030002020401030102020400060001000849010108d5010108900101
-085801010867010108570901070e00010300020204010301020204000600010008490101
-08d5010108900101085801010867010108570901070e0001030002020401030102020400
-060001000849010108d5010108900101085801010867010108570901070e000103000202
-0401030102020400060001ff01ff01d40901070e00010300020204010301020204000600
-01ff01ff01d40901070e0001030002020401030102020400060001000849010108d50101
-08900101085801010867010108570901070e000103000202040103010202040006000100
-0849010108d5010108900101085801010867010108570901070e00010300020204010301
-020204000600010008050100082a010008160101086e0100086501010890010108580101
-0867010108570901070e0001030002020401030102020400060001000804010008040101
-080b010008040102080b01010802010008150101084f0102081b010008020102085f0101
-08110100080a010008220102084b01010803010108520101080101040805010008050100
-0852010108020102080201040801010408420901070e0001030002020401030102020400
-060001000803010008040100080101000809010108030100080201000809010008010100
-080201000814010108510100081a01000802010008020100085e010108110100080a0100
-08240100084b010108020100080101000851010108010100080801010804010108520101
-080101000802010008010100080201000801010008460901070e00010300020204010301
-020204000600010008020100080501000801010008080100080001000807010008090100
-0801010008030100081301010802010108000100080201020802010008000101080a0102
-080301020802010008000101080201000802010008020102080201000800010108040101
-080501000803010208030102080201000800010108050100080201000862010108010100
-080001010803010208020104080801000801010008030102080201000800010108020100
-080001010803010208050100084b01010802010008010100085101010801010008070100
-0800010008030100080001000852010108050100080501000801010008460901070e0001
-03000202040103010202040006000100080101000806010008010100080a010008070100
-080901000801010008040100081201010801010008010101080101000802010008010101
-080101000808010008020100080101000802010008010101080101000801010008020100
-080101000802010008010101080101000803010108050100080201000802010008010100
-080201000801010108010100080301000803010008620101080101010801010008010100
-0802010008030100080a0100080001000803010008020100080101010801010008010101
-08010100080101000802010008040100084b010108020100080101000851010108010103
-080301000801010008020100080101000852010108050100080401000802010308430901
-070e000103000202040103010202040006000100080001000807010008010100080a0100
-08050101080a010008010100080501000811010108010100080201000801010008020100
-080101000802010008080100080501000802010008010100080501000802010008010100
-0802010008010100080f0100080201000802010008010100080201000801010008020100
-0803010008030103085f01010801010008020100080101000802010008030100080a0101
-0804010008020100080101000805010008020100080101000802010008040100084b0101
-080201000801010008510101080501000801010008020100080101000802010008520101
-08030101080501000806010008420901070e000103000202040103010202040006000100
-080101000806010008010100080a01000807010008090100080101000804010008120101
-080101000802010008010104080101000802010008090102080201040801010008060100
-080001000802010408010100080f01000802010008020100080101000802010008010100
-08020100080201000804010008020100085e010108010100080201000801010408030100
-080a0101080401040801010008050100080201000801010408040100084b010108020100
-080101000851010108050100080101000802010008010100080201000852010108050100
-080401000806010008420901070e00010300020204010301020204000600010008020100
-0805010008010100080a0100080701000809010008010100080301000813010108010100
-08020100080101000805010008020100080c010008010100080501000806010008000100
-0802010008050100080f0100080201000802010008010100080201000801010008020100
-080201000804010008020100085e010108010100080201000801010008070100080a0100
-08000100080301000805010008050100080201000801010008080100084b010108020100
-080101000851010108010100080201000801010508000105085101010805010008030100
-080301000802010008420901070e00010300020204010301020204000600010008030100
-080401000801010008030101080401000803010008020100080301010803010008010100
-080201000814010108010100080101010801010008020100080101000802010008080100
-080201000801010008020100080101000807010008030100080201000801010008070101
-080501000802010008020100080101000802010008010101080101000801010008050100
-08020100085e01010801010008020100080101000802010008030100080a010008010100
-0802010008020100080101000805010008020100080101000802010008040100084b0101
-080201000801010008510101080101000802010008050100080501000852010108010100
-0802010008030100080301000802010008420901070e0001030002020401030102020400
-060001000804010008040101080401010802010408020102080401010804010108020100
-081501010802010108000100080201020802010008020100080901020803010208020100
-080701000804010208020100080701010805010008030102080301020802010008000101
-0802010008060102085f0101080101000802010008020102080501010808010008020100
-080201020802010008050100080201000802010208050100084b01010803010108520101
-0802010208060100080501000852010108020102080401000804010208430901070e0001
-0300020204010301020204000600010008050100082a01000816010108050100080e0105
-08470100087001010815010508740101085801010867010108570901070e000103000202
-040103010202040006000100084901010801010008020100085c01000870010108900101
-085801010867010108570901070e00010300020204010301020204000600010008490101
-08020102085d01000870010108900101085801010867010108570901070e000103000202
-0401030102020400060001000849010108d5010108900101085801010867010108570901
-070e0001030002020401030102020400060001000849010108d501010890010108580101
-0867010108570901070e0001030002020401030102020400060001000849010108d50101
-08900101085801010867010108570901070e000103000202040103010202040006000100
-0849010108d5010108900101085801010867010108570901070e00010300020204010301
-02020400060001ff01ff01d40901070e0001030002020401030102020400060001ff01ff
-01d40901070e0001030002020401030102020400060001000849010108d5010108900101
-0858010108670101085709010010030002020401030102020400060001000849010108d5
-0101089001010858010108670101085709010700000c0900000103000202040103010202
-04000600010008050100082a010008160101088301000850010108900101085801010867
-010108570901070000010608090107000001030002020401030102020400060001000804
-010008040101080b010008070100080a0101080201000815010108110100080a01000822
-0102080b01000806010008090100081501000807010008020102084a0101089001010803
-0101085201010805010008020102085a0101080201020802010408490901070100010607
-090107000001030002020401030102020400060001000803010008040100080101000809
-0101080601010809010008010100080201000814010108110100080a010008240100080b
-010008110100081401010806010008020100080201000849010108900101080201000801
-010008510101080401010801010008020100085901010801010008020100080101000802
-010008490901070100010606090107010001030002020401030102020400060001000802
-010008050100080101000808010008000100080501000800010008090100080101000803
-010008130101080101000800010108030102080201040808010008010100080301020802
-010008000101080201000800010108030102080501000804010108020104080201020803
-010208020100080101000803010208020100080001010802010008000100080601000806
-010008490101089001010802010008010100085101010803010008000100080101000802
-010008590101080101000802010008050100084909010702000106050901070100010300
-0202040103010202040006000100080101000806010008010100080a0100080401000801
-010008090100080101000804010008120101080101010801010008010100080201000803
-0100080a0100080001000803010008020100080101010801010008010101080101000801
-010008020100080401000804010108040100080601000802010008020100080101000800
-010008030100080201000801010108010100080301000805010008070100084901010890
-010108020100080101000851010108020100080101000801010008020100085901010801
-01000802010008040100084a090107020001060409010702000103000202040103010202
-040006000100080001000807010008010100080a01000803010008020100080901000801
-010008050100081101010801010008020100080101000802010008030100080a01010804
-010008020100080101000805010008020100080101000802010008040100080b01000806
-01000802010008050101080401000802010008010100080701000805010008060100084a
-010108900101080201000801010008510101080101000802010008020102085a01010802
-010208050100084a09010703000106030901070200010300020204010301020204000600
-0100080101000806010008010100080a0100080301000802010008090100080101000804
-01000812010108010100080201000801010408030100080a010108040104080101000805
-0100080201000801010408040100080b0100080601000802010008050101080401040801
-0100080701000804010008060100084b0101089001010802010008010100085101010801
-010008020100080101000802010008590101080101000802010008040100084a09010703
-000106020901070300010300020204010301020204000600010008020100080501000801
-0100080a0100080301050808010008010100080301000813010108010100080201000801
-010008070100080a01000800010008030100080501000805010008020100080101000808
-0100080b0100080601000802010008050100080001000803010008050100080701000804
-010008050100084c01010890010108020100080101000851010108010105080001000802
-010008590101080101000802010008030100084b09010704000106010901070300010300
-020204010301020204000600010008030100080401000801010008030101080401000807
-010008030101080301000801010008020100081401010801010008020100080101000802
-010008030100080a01000801010008020100080201000801010008050100080201000801
-010008020100080401000804010108040100080601000802010008020100080101000801
-0100080201000802010008010100080701000803010008050100084d0101089001010802
-010008010100085101010805010008010100080201000859010108010100080201000803
-0100084b0901070400010600090107040001030002020401030102020400060001000804
-010008040101080401010802010408050100080301010804010108020100081501010801
-010008020100080201020805010108080100080201000802010208020100080501000802
-010008020102080501000804010108050101080401000803010208020100080201000802
-010208020100080501040801010008050104084901010890010108030101085201010805
-010008020102085a01010802010208040100084b09010705000009020704000103000202
-04010301020204000600010008050100082a0100081601010815010508b9010108900101
-085801010867010108570901070500000901070500010300020204010301020204000600
-01000849010108d501010890010108580101086701010857090107060901070500010300
-02020401030102020400060001000849010108d501010890010108580101086701010857
-09010706090007060001030002020401030102020400060001000849010108d501010890
-010108580101086701010857090100100300020204010301020204000600010008490101
-08d5010108900101085801010867010108570900001103000202040103010202040009ff
-09ff09d9060e03000202040103010202040009ff09ff09d80000060e0300020204010301
-020204000901070d0000070000ff00ff00a507100001070c0001060e0300020204010301
-020204000901070b00010900070000ff00ff00a4090007100003070a0001060e03000202
-040103010202040009010709000209010700000106ff06ff06a109010710000507080001
-060e030002020401030102020400090107070003060009010700000106ff06ff06a10901
-071000010601000307060001060e03000202040103010202040009010705000306020901
-0700000106ff06ff06a10901071000010603000307040001060e03000202040103010202
-0400090107030003060409010700000106ff06ff06a10901071000010605000307020001
-060e030002020401030102020400090107010003060609010700000106ff06ff06a10901
-071000010607000307000001060e03000202040103010202040009050608090107000001
-06ff06ff06a1090107100001060809030001060e03000202040103010202040009010701
-0903060609010700000106ff06ff06a10901071000010607090307000001060e03000202
-0401030102020400090107030903060409010700000106ff06ff06a10901071000010605
-090307020001060e030002020401030102020400090107050903060209010700000106ff
-06ff06a10901071000010603090307040001060e03000202040103010202040009010707
-0903060009010700000106ff06ff06a10901071000010601090307060001060e03000202
-04010301020204000901070909040700000106ff06ff06a1090107100001090307080001
-060e0300020204010301020204000901070b09020700000109ff09ff09a3071000010901
-070a0001060e0300020204010301020204000901070d09000700000009ff09ff09a40710
-00000900070c0001060e030002020401030102020400090100ff00ff00d7060e03000202
-0401030102020400090000ff00ff00d8060e03000202040103010202040006ff06ff06e8
-03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff06e8
-03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff06e8
-03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff06e8
-03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff06e8
-03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff06e8
-03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff06e8
-03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff0615
-01000601010006ce030002020401030004040601000a0607010006020100060401000606
-010006100102061201000686000a06090100060c01000611010006020100060401000606
-0100060f01000602010006e0010006010100060801000602010006040100060601000605
-0100061f010106890300040403050601000909000607010006020100060c0100060f0100
-060201000611010006860009090006090100060c01000611010006020100060c0100060f
-01010601010006e00100060101000608010006020100060c010006050100061e01000601
-010006880304040003010202040006010001060609010607010006020100060201020603
-010106000100060201020609010006050100060201000602010206020104060201020602
-010106000100060901000600010106020100060001010603010206030102060301020603
-010206030102060301020603010206310001060609010608010006000100060201000602
-010006010104060201020609010006020100060201020603010106000100060201020609
-01010601010006020102060201000602010006d101050607010006020100060201020603
-010106000100060201010600010006020102060201000600010106040101060a01000601
-010006880300020204010301020204000601000106060901060701000602010006040100
-060201000601010106010100060201000609010006040100060201000601010006020100
-060301000603010006020100060101000600010006000100060801010601010006010101
-060101000601010006020100060101000602010006010100060201000601010006020100
-060101000602010006010100060201000601010006020100063000010606090106080100
-060001000602010006020100060301000603010006020100060801000602010006040100
-060201000601010106010100060201000608010006000100060001000601010006020100
-060101000602010006d20100060101000608010006020100060401000602010006010101
-06010100060101010601010006020100060101010601010006030101060a010006010100
-068803000202040103010202040006010001060609010607010406040100060201000602
-01000601010006020100060a010106030100060101000601010006070100060301000602
-010006010100060001000600010006080100060201000601010006050100060201000601
-010006050100060201000601010006050100060501000602010006010100063400010606
-090106080100060001000602010006020100060301000603010006020100060101040601
-010406040100060201000602010006010100060201000608010006000100060001000601
-01000602010006010100060001000600010006d101000601010006090104060401000602
-010006020100060101000602010006010100060201000601010006020100061001000601
-010006880300020204010301020204000601000106060901060701000602010006040100
-060201000602010006010104060c01000602010006010100060201020604010006030104
-060101000600010006000100060801000602010006010100060501000602010006010100
-060501040602010206030102060201040602010206310001060609010607010006020100
-060101000602010006030100060301000602010006080100060201000604010006020100
-060201000601010406080100060101010601010406010100060001000600010006d00105
-060801000602010006040100060201000602010006010100060201000601010406010100
-060201000610010006010100068803000202040103010202040006010001060609010607
-01000602010006040100060201000602010006010100060c010006020100060301000600
-010006050100060301000603010006050100060001000600010006080100060201000601
-010006050100060201000601010006050100060901000605010006010100060901000630
-000106060901060701040601010006020100060301000603010006020100060801000602
-010006040100060201000602010006010100060c01000601010106010100060501000600
-01000600010006d101000601010006090100060201000604010006020100060201000601
-010006020100060101000605010006020100061001000601010006880300020204010301
-020204000601000106060901060701000602010006040100060201000601010106010100
-060201000608010006020100060301010602010006020100060301000603010006020100
-060101000600010006000100060801010601010006010100060501000602010006010100
-060201000601010006020100060101000602010006010100060201000601010006020100
-060101000602010006300001060609010607010006020100060101000601010106030100
-060301000602010006080100060201000604010006020100060101010601010006020100
-0608010006020100060101000602010006010100060001000600010006d1010006010100
-060901000602010006040100060201000601010106010100060101010601010006020100
-060101000602010006030101060a01000601010006880300020204010301020204000601
-000106060901060701000602010006040100060301010600010006020102060a01020605
-010006030102060501010602010206020100060001000600010006080100060001010602
-010006060102060301020603010206030102060301020603010206030102063100010606
-090106070100060201000602010106000100060401010602010206090100060201000604
-0100060301010600010006020102060901000602010006020102060301000600010006d2
-010006010100060901000602010006040100060301010600010006020101060001000602
-0102060201000602010006030101060b0101068903000202040103010202040006010001
-09080634010006250100066c0001090806ff06ff06060300020204010301020204000601
-00000909063101000600010006260100066c0000090906ff06ff06060300020204010301
-02020400063f01000627010006ff06ff067e03000202040103010202040006ff06ff06e8
-03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff06e8
-03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff06e8
-03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff06e8
-03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff06e8
-03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff06e8
-03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff06e8
-03000202040103010202040003ff03ff03e9020204010301021a0400030002ff02ff02b6
-04000300021a04010301021a0400030002ff02ff02b604000300021a04010301021a0400
-030002ff02ff02b604000300021a04010301041b030004ff04ff04b70300041c030004ff
-04ff04f3
-%%EndData
-end
-%%PageTrailer
-%%Trailer
-%%BoundingBox: 0 22 377 234
-%%EOF
diff --git a/lib/pman/doc/src/note.gif b/lib/pman/doc/src/note.gif
deleted file mode 100644
index 6fffe30419..0000000000
--- a/lib/pman/doc/src/note.gif
+++ /dev/null
Binary files differ
diff --git a/lib/pman/doc/src/notes.xml b/lib/pman/doc/src/notes.xml
deleted file mode 100644
index 4e9663c916..0000000000
--- a/lib/pman/doc/src/notes.xml
+++ /dev/null
@@ -1,211 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE chapter SYSTEM "chapter.dtd">
-
-<chapter>
- <header>
- <copyright>
- <year>2004</year><year>2013</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>Pman 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 Pman application.</p>
-
-<section><title>Pman 2.7.1.4</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Tuple funs (deprecated in R15B) are no longer supported.</p>
- <p>
- *** POTENTIAL INCOMPATIBILITY ***</p>
- <p>
- Own Id: OTP-10170</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Pman 2.7.1.3</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Misc build updates</p>
- <p>
- Own Id: OTP-10784</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Pman 2.7.1.2</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>The GS applications is now deprecated and will be
- removed in the R16 release. The following GS-based
- applications have been superseded by the Observer
- application and will removed in R16: Appmon, Pman,
- Tv.</p>
- <p>
- *** POTENTIAL INCOMPATIBILITY ***</p>
- <p>
- Own Id: OTP-9907</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Pman 2.7.1.1</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Miscellaneous documentation build updates</p>
- <p>
- Own Id: OTP-9813</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Pman 2.7.1</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>Pman 2.7</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>The copyright notices have been updated.</p>
- <p>
- Own Id: OTP-7851</p>
- </item>
- </list>
- </section>
-
-</section>
-
- <section>
- <title>Pman 2.6</title>
-
- <section>
- <title>Improvements and New Features</title>
- <list type="bulleted">
- <item>
- <p>Some maintenance work to replace deprecated guard
- expressions etc. somehow grew into a larger rewrite of
- parts of the Pman code, fixing some of the more blatant
- errors and removing unused code.</p>
- <p>The default font has been changed, so now the entire text
- on buttons etc. should be visible on most platforms.</p>
- <p>Saving and restoring trace options to/from file now
- works.</p>
- <p>Selecting different sets of processes to hide/view should
- now work in a more consistent and logical way.</p>
- <p>It is now possible to select more than one module or
- process to hide/show.</p>
- <p>Own Id: OTP-6012 Aux Id: OTP-5987 </p>
- </item>
- </list>
- </section>
- </section>
-
- <section>
- <title>Pman 2.5.3</title>
-
- <section>
- <title>Fixed Bugs and Malfunctions</title>
- <list type="bulleted">
- <item>
- <p>Removed some dead code from <c>pman_process</c>.</p>
- <p>Own Id: OTP-6550</p>
- </item>
- </list>
- </section>
- </section>
-
- <section>
- <title>Pman 2.5.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 <c>dbg</c> 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>Pman 2.5.1</title>
-
- <section>
- <title>Fixed Bugs and Malfunctions</title>
- <list type="bulleted">
- <item>
- <p>The Pman 'trace shell' functionality was broken, it has
- now been fixed. Furthermore, Pman could not correctly
- find the pid of the active shell if more than one shell
- process was running on the node. This has also been
- corrected.</p>
- <p>Own Id: OTP-5191</p>
- </item>
- </list>
- </section>
- </section>
-</chapter>
-
diff --git a/lib/pman/doc/src/options.gif b/lib/pman/doc/src/options.gif
deleted file mode 100644
index 18377fbed1..0000000000
--- a/lib/pman/doc/src/options.gif
+++ /dev/null
Binary files differ
diff --git a/lib/pman/doc/src/options.ps b/lib/pman/doc/src/options.ps
deleted file mode 100644
index b5e2c6a391..0000000000
--- a/lib/pman/doc/src/options.ps
+++ /dev/null
@@ -1,829 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Creator: (ImageMagick)
-%%Title: (./options.tmp.eps)
-%%CreationDate: (Tue Jun 12 18:04:30 2001)
-%%BoundingBox: 0 53 250 318
-%%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 53 250 318
-userdict begin
-%%BeginData:
-DisplayImage
-0 53
-250.000000 265.000000
-12
-350 371
-1
-0
-0
-8
-ffffff
-000000
-708090
-b03060
-d9d9d9
-808080
-a3a3a3
-000000
-03ff03ff03ff035f04000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400031b040c0392040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-04000300040003000400030004000307040c03050400030a040003080404030b0402030d
-0401030104010305040703200403030a040103010401031e040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000308040003020400030204000302
-040003050400030a0400030804010301040103090401030f040103010401030804010322
-040103010401030904010321040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003070400030204000302040003020400030504000303
-040203030400030804010302040103010403030104030301040303010401030104010300
-040103000403030704010302040103000401030004030302040303020403030604010303
-04010300040103000401030104030300040103010403030104010300040103020403030a
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000308
-040003020400030204000302040003050400030204040302040003080401030204010300
-040103010401030104010301040103010401030004010301040103000401030104010308
-040103020406030104010300040103010401030004010301040103050401030304010300
-040203000401030104010301040103000401030104010300040203000401030004010301
-040103080400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030704040302040003020400030504000301040603010400030804010302
-040103000401030104010301040103050401030004010301040103000401030104010308
-040103020402030504010300040103040401030104010305040103030401030004010301
-040103010401030104010300040103010401030004010301040103000402030c04000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030804000306
-040003020400030504000301040603010400030804010302040103000405030104010302
-040403000401030104010300040103010401030804010302040103030404030004010304
-040503050401030304010300040103010401030104010301040103000401030104010300
-040103010401030204020309040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003070400030604000302040003050400030104060301
-040003080401030204010300040103050401030104010301040103000401030104010300
-040103010401030804010302040103020401030104010300040103040401030904010303
-040103000401030104010301040103010401030004010301040103000401030104010303
-040203090400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003080400030604000302040003050400030204040302040003080401030104010301
-040103010401030104010301040103010401030004010300040203000401030104010300
-040003060401030204010302040103010401030004010301040103000401030104010306
-040103010401030104020300040103010401030004020300040103010401030004010301
-040103000401030104010308040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003070408030204000305040003030402030304000308
-040403030403030204010302040203000401030004010300040103000401030204010307
-040103020401030304020300040103000403030204030308040303020401030004010303
-04010300040103010403030104010301040103010403030a040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-0400030004000300040003000400030004000300040003080400030a040003050400030a
-040003660401032904000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-0400030004000300040003070400030a040003050400030a040003660401032a04000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-04000300040003000400030004000300040003000400030004000300040003080400030a
-04000305040c036604010329040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-04000300040003000400030004000307040c03a604000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-04000300040003000400030004000300040003ff03ff03d402ff02ff02bb00ff00ff00ba
-050000ff005b050100ff00ff000e050000ff005b050100b104a80502000204a8000504a8
-0502000204a8000504a80502000204a8000504a80502000204a8000504a80502000204a8
-000504a80502000204a8000504a80502000204a8000504a80502000204a8000504a80502
-000204a8000504a80502000204a8000504a80502000204a8000504a80502000204a80005
-04a8050200020407010404080100041601000404010004360100040601000433000504a8
-0502000204090100040a0100041c010004360100043b0005040801040434010004130100
-041a010004060100042b0502000204090100040301000400010104020100040001010403
-010204020100040001010403010204020104040201020402010004000101040301020403
-0102040a0102040201000400010104020104040201020403010204020100040001010403
-01020404010104170005040a01000436010004130100041a010004330502000204090100
-040301010401010004010101040101000401010004020100040101010401010004040100
-040401000403010004020100040101010401010004010100040201000401010004020100
-040801000402010004010101040101000403010004060100040201000402010004010101
-0401010004010100040201000403010104170005040a0100040301000400010104030102
-0403010204030102040a0102040201000402010004010104040101000400010104020100
-040201000401010404090102040201000400010104020104040201020403010204020100
-040001010403010204040101040f05020002040901000403010004020100040101000402
-010004010100040201000401010004080100040401000407010004010100040201000401
-010004050100040201000408010004020100040101000402010004030100040601000402
-01000402010004010100040201000401010004210005040a010004030101040101000401
-010004020100040101000402010004010100040201000408010004020100040101000402
-0100040301000403010104010100040101000402010004030100040a0100040201000401
-010104010100040301000406010004020100040201000401010104010100040101000402
-010004030101040f05020002040901000403010004020100040101000402010004010104
-040101000408010004040100040401030401010004020100040101000405010404080100
-040201000401010004020100040301000406010004020100040201000401010004020100
-04020102041e0005040a0100040301000409010004010100040501000402010004080100
-040201000401010004020100040301000403010004020100040101000402010004030100
-040a01000402010004010100040201000403010004060100040201000402010004010100
-040201000401010004190502000204090100040301000402010004010100040201000401
-010004050100040801000404010004030100040201000401010004020100040101000405
-0100040c0100040201000401010004020100040301000406010004020100040201000401
-01000402010004050100041d0005040a0100040301000406010304010100040501040408
-010004020100040101000402010004030100040301000402010004010100040201000403
-0100040a0100040201000401010004020100040301000406010004020100040201000401
-010004020100040201020416050200020409010004030100040201000401010004020100
-040101000402010004010100040801000404010004030100040201000401010004020100
-040101000402010004010100040201000408010004020100040101010401010004030100
-040601000402010004020100040101000402010004010100040201000403010104170005
-040a01000403010004050100040201000401010004050100040c01000402010004010100
-04020100040301000403010004020100040101000402010004030100040a010004020100
-040101000402010004030100040601000402010004020100040101000402010004050100
-041505020002040701040401010004020100040101000402010004020102040201000408
-0100040501010402010304010100040201000402010204030102040a0102040201000400
-01010405010104040100040301020402010004020100040201020404010104170005040a
-010004030100040501000402010004010100040201000401010004020100040801000402
-01000401010004010101040301000403010104010100040101000401010104030100040a
-010004020100040101010401010004030100040601000402010004020100040101000402
-0100040101000402010004030101040f050200020462010004440005040a010004030100
-040601030402010204030102040a01020403010104000100040401010401010004000101
-040301010400010004040101040901020402010004000101040501010404010004030102
-04020100040201000402010204040101040f050200020462010004440005044701000421
-0100043c0502000204620100044400050447010004210100043c0502000204a800050447
-010004210100043c0502000204a8000504a80502000204a8000504a80502000204a80005
-04a80502000204a8000504a80502000204a8000504a80502000204a8000504a805020002
-04a8000504a80502000204a8000504a80502000204a8000504a80502000204a8000504a8
-0502000204a8000504a80502000204a8000504a80502000204a8000504a80502000204a8
-000504a8050200020408050a04070104040801000416010004040100045f000504a80502
-000204080509000004090100040a0100041c0100045f000504a805020002040805010306
-000104090100040301000400010104020100040001010403010204020100040001010403
-010204020104040901020402010004000101040a01020402010004000101040301020402
-0100040201000401010004000101041f000504a805020002040805010306000104090100
-040301010401010004010101040101000401010004020100040101010401010004040100
-04040100040a010004020100040101010401010004080100040201000401010104010100
-040101000402010004010100040201000401010104010100041e00050409050a04070104
-043d01000447050200020408050103060001040901000403010004020100040101000402
-01000401010004020100040101000408010004040100040a010004020100040101000402
-010004080100040501000402010004050100040101000400010004000100040101000402
-0100041e000504090509000004090100043f010004470502000204080501030600010409
-01000403010004020100040101000402010004010104040101000408010004040100040a
-010004020100040101000402010004090102040201000402010004020103040101000400
-0100040001000401010004020100041e0005040905010306000104090100040301000400
-0101040301020403010204030102040a0102040301020402010004000101040301010400
-010004470502000204080501030600010409010004030100040201000401010004020100
-04010100040501000408010004040100040a0100040201000401010004020100040c0100
-040101000402010004010100040201000401010004000100040001000401010004020100
-041e00050409050103060001040901000403010104010100040101000402010004010100
-040201000401010004020100040801000402010004010100040201000401010104010100
-040101000401010104470502000204080501030600010409010004030100040201000401
-0100040201000401010004020100040101000408010004040100040a0100040201000401
-010004020100040801000402010004010101040101000401010004020100040101000400
-0100040001000401010004020100041e0005040905010306000104090100040301000409
-010004010100040501000402010004080100040501000402010004010100040201000401
-010004020100044705020002040805010306000104070104040101000402010004010100
-040201000402010204020100040801000405010104090102040201000402010004090102
-04020100040001010403010304020100040001000402010004020100041e000504090501
-030600010409010004030100040601030401010004050104040901020402010404010100
-040201000401010004020100044705020002040805010008045b01000437000504090501
-030600010409010004030100040501000402010004010100040501000410010004010100
-04050100040201000401010004020100044705020002040805000009045b010004370005
-040905010306000104090100040301000405010004020100040101000402010004010100
-040201000408010004020100040101000402010004010100040201000401010004010101
-044705020002046f01000437000504090501030600010409010004030100040601030402
-010204030102040a01020403010204020100040201000402010104000100044705020002
-04a8000504090501000804930502000204a8000504090500000904930502000204a80005
-04a80502000204a8000504a805020002041b0501048a000504a805020002041a0503040e
-01000404010204030102046a000504a80502000204190505040d01000406010004050100
-046a000504a8050200020418050203010502040b0100040001000405010004050100040a
-010204020100040001010403010204020100040201000401010004000101040301020439
-000504a8050200020417050203030502040a010004000100040501000405010004090100
-040201000401010104010100040101000402010004010100040201000401010104010100
-04010100040201000438000504a805020002041605020305050204090100040001000405
-010004050100040901000405010004020100040501000401010004000100040001000401
-01000402010004010100043c000504a80502000204150002030700020407010004020100
-0404010004050100040a0102040201000402010004020103040101000400010004000100
-0401010004020100040201020439000504a8050200020416000203050002040801040404
-010004050100040d01000401010004020100040101000402010004010100040001000400
-0100040101000402010004050100043800050409050a0407010404430100044105020002
-041700020303000204090100040201000404010004050100040901000402010004010101
-040101000401010004020100040101000400010004000100040101000402010004010100
-0402010004380005040905090000040901000488050200020418000203010002040a0100
-040201000404010004050100040a01020402010004000101040301030402010004000100
-040201000402010004020102043900050409050103060001040901000403010004000101
-040301020403010204030102040901000400010104030102040301020403010204030102
-04020100040201000402010204330502000204190005042e010004580005040905010306
-000104090100040301010401010004010100040201000401010004020100040101000402
-010004080101040101000401010004020100040101000402010004010100040201000404
-010004020100040201000401010004020100043205020002041a0003042f010004580005
-040905010306000104090100040301000409010004010100040501000402010004080100
-040501000402010004010100040501000402010004040100040201000402010004010100
-04020100043205020002041b000104300100045800050409050103060001040901000403
-010004060103040101000405010404080100040501040401010004050104040401000403
-0100040001000402010404320502000204a8000504090501030600010409010004030100
-04050100040201000401010004050100040c010004050100040501000405010004080100
-04030100040001000402010004360502000204a800050409050103060001040901000403
-010004050100040201000401010004020100040101000402010004080100040501000402
-010004010100040201000401010004020100040401000404010004030100040201000432
-0502000204a8000504090501030600010409010004030100040601030402010204030102
-0409010004060102040301020403010204050100040401000404010204330502000204a8
-000504090501000804930502000204a80005040905000009049305020002041b0001048a
-000504a805020002041a0003040c01040404010004120100044301020416000504a80502
-000204190005040b0100041c0100044501000416000504a8050200020418000204010002
-040a01000406010204020100040001010403010204020104040901020402010004000101
-0403010204020100040201000401010004000101040a0102040201000400010104050100
-0402010004020100040e000504a805020002041700020403000204090100040801000402
-010104010100040101000402010004030100040a01000402010004010101040101000401
-010004020100040101000402010004010101040101000408010004020100040101010401
-0100040401000402010004020100040e000504a805020002041600020405000204080103
-04050100040201000405010004070100040a010004050100040201000405010004010100
-040001000400010004010100040201000408010004020100040101000402010004040100
-0403010004010100040e000504a805020002041505020407050204070100040801000402
-01000406010204040100040b010204020100040201000402010304010100040001000400
-010004010100040201000408010004020100040101000402010004040100040301000401
-0100040e000504a805020002041605020405050204080100040801000402010004090100
-04030100040e010004010100040201000401010004020100040101000400010004000100
-040101000402010004080100040201000401010004020100040401000404010004000100
-040e000504a8050200020417050204030502040901000408010004020100040501000402
-010004030100040a01000402010004010101040101000401010004020100040101000400
-010004000100040101000402010004080100040201000401010004020100040401000404
-0101040f00050409000a04070104042701010418010004060100043a0502000204180502
-04010502040a010004080100040201000406010204050101040901020402010004000101
-040301030402010004000100040201000402010004090102040201000402010004040100
-04050100040f00050409000905000409010004280100041a010004420502000204190505
-043c010004390100040f0005040900010406050104090100040301000400010104030102
-0403010204030102040b0100040301000402010004010100040001010403010204020104
-0402010204030102040201000400010104030102042505020002041a0503043d01000436
-010004000100041000050409000104060501040901000403010104010100040101000402
-010004010100040201000401010004020100040801040401010004020100040101010401
-010004010100040201000403010004060100040201000402010004010101040101000401
-010004020100042405020002041b0501043e010004370100041100050409000104060501
-040901000403010004090100040101000405010004020100040a01000403010004020100
-040101000402010004010100040701000406010004020100040201000401010004020100
-0401010004280502000204a8000504090001040605010409010004030100040601030401
-010004050104040a01000403010004020100040101000402010004010100040701000406
-0100040201000402010004010100040201000402010204250502000204a8000504090001
-04060501040901000403010004050100040201000401010004050100040e010004030100
-040201000401010004020100040101000407010004060100040201000402010004010100
-040201000405010004240502000204a80005040900010406050104090100040301000405
-01000402010004010100040201000401010004020100040a010004030100040101010401
-010004020100040101000402010004030100040601000402010004020100040101000402
-0100040101000402010004240502000204a8000504090001040605010409010004030100
-040601030402010204030102040b01000404010104000100040101000402010004020102
-04050101040401000403010204020100040201000402010204250502000204a800050409
-0001050804930502000204a8000504090000050904930502000204a8000504a805020002
-04a8000504a80502000204a8000504a80502000204a8000504a80502000204a8000504a8
-0502000204a8000504a80502000204a8000504a80502000204a8000504a80502000204a8
-000504a80502000204a800050409000a040701040442010004420502000204a800050409
-00090500040901000444010004420502000204a800050409000104060501040901000403
-010004000101040301020403010204030102040a01020402010004020100040201020402
-0100040001010402010404020102043a0502000204a80005040900010406050104090100
-040301010401010004010100040201000401010004020100040101000402010004080100
-040201000401010004020100040101000402010004010101040101000403010004030100
-0402010004390502000204a8000504090001040605010409010004030100040901000401
-010004050100040201000408010004020100040101000402010004010100040201000401
-0100040201000403010004030100043d0502000204a80005040900010406050104090100
-040301000406010304010100040501040408010404020100040001000402010404010100
-040201000403010004040102043a0502000204a800050409000104060501040901000403
-010004050100040201000401010004050100040c01000406010004000100040201000405
-010004020100040301000407010004390502000204a80005040900010406050104090100
-040301000405010004020100040101000402010004010100040201000408010004020100
-040301000403010004020100040101000402010004030100040301000402010004390502
-00020408050a040701040408010004160100040401000420010204050100040901000429
-000504090001040605010409010004030100040601030402010204030102040a01020404
-01000404010204020100040201000404010104020102043a050200020408050900000409
-0100040a0100041c01000422010004100100042900050409000105080493050200020408
-050103060001040901000403010004000101040201000400010104030102040201000400
-01010403010204020104040901020402010004000101040c010004030102040201000400
-010104020100040101000426000504090000050904930502000204080501030600010409
-010004030101040101000401010104010100040101000402010004010101040101000404
-010004040100040a0100040201000401010104010100040b010004050100040201010401
-010004010100040001000427000504a80502000204080501030600010409010004030100
-0402010004010100040201000401010004020100040101000408010004040100040a0100
-040201000401010004020100040b01000405010004020100040201000401010104280005
-04a805020002040805010306000104090100040301000402010004010100040201000401
-0104040101000408010004040100040a0100040201000401010004020100040b01000405
-01000402010004020100040101010428000504a805020002040805010306000104090100
-0403010004020100040101000402010004010100040501000408010004040100040a0100
-040201000401010004020100040b01000405010004020100040201000401010004000100
-0427000504a8050200020408050103060001040901000403010004020100040101000402
-01000401010004020100040101000408010004040100040a010004020100040101000402
-0100040b010004050100040201000402010004010100040101000426000504a805020002
-040805010306000104070104040101000402010004010100040201000402010204020100
-0408010004050101040901020402010004020100040b0100040501000402010004020100
-04010100040201000425000504a8050200020408050100080494000504a8050200020408
-050000090494000504a80502000204a8000504a80502000204a8000504a80502000204a8
-000504a80502000204a8000504a80502000204a8000504a805020002041b0501048a0005
-04a805020002041a0503040e01000404010204030102040a01020405010004090100044a
-000504a80502000204190505040d01000406010004050100040c010004100100044a0005
-04a8050200020418050203010502040b0100040001000405010004050100040c01000403
-010204020100040001010402010004010100040301020440000504a80502000204170502
-03030502040a0100040001000405010004050100040c0100040501000402010104010100
-04010100040001000403010004020100043f000504a80502000204160502030505020409
-0100040001000405010004050100040c0100040501000402010004020100040101010404
-01000443000504a805020002041500020307000204070100040201000404010004050100
-040c010004050100040201000402010004010101040501020440000504a8050200020416
-000203050002040801040404010004050100040c01000405010004020100040201000401
-01000400010004070100043f000504a80502000204170002030300020409010004020100
-0404010004050100040c0100040501000402010004020100040101000401010004020100
-04020100043f000504a8050200020418000203010002040a010004020100040401000405
-0100040c01000405010004020100040201000401010004020100040201020440000504a8
-05020002041900050488000504a805020002041a00030489000504a805020002041b0001
-048a000504a80502000204a8000504a80502000204a8000504a80502000204a8000504a8
-0502000204a8000504a80502000204a8000504a805020002041b0001048a000504a80502
-0002041a0003040c01040404010004120100040b01020405010004090100041b0102041d
-000504a80502000204190005040b0100041c0100040d010004100100041d0100041d0005
-04a8050200020418000204010002040a0100040601020402010004000101040301020402
-0104040b01000403010204020100040001010402010004010100040a0102040201000400
-01010405010004020100040201000415000504a805020002041700020403000204090100
-040801000402010104010100040101000402010004030100040d01000405010004020101
-040101000401010004000100040a01000402010004010101040101000404010004020100
-040201000415000504a80502000204160002040500020408010304050100040201000405
-010004070100040d010004050100040201000402010004010101040b0100040201000401
-0100040201000404010004030100040101000415000504a8050200020415050204070502
-0407010004080100040201000406010204040100040d0100040501000402010004020100
-04010101040b010004020100040101000402010004040100040301000401010004150005
-04a80502000204160502040505020408010004080100040201000409010004030100040d
-01000405010004020100040201000401010004000100040a010004020100040101000402
-01000404010004040100040001000415000504a805020002041705020403050204090100
-0408010004020100040501000402010004030100040d0100040501000402010004020100
-040101000401010004090100040201000401010004020100040401000404010104160005
-04a8050200020418050204010502040a010004080100040201000406010204050101040b
-010004050100040201000402010004010100040201000409010204020100040201000404
-0100040501000416000504a80502000204190505047001000416000504a805020002041a
-0503046e0100040001000417000504a805020002041b0501047001000418000504a80502
-000204a8000504a80502000204a8000504a80502000204a8000504a80502000204a80005
-04a80502000204a8000504a80502000204a8000504a80502000204a8000504a805020002
-04a8000504a80502000204a8000504a80502000204a8000504a80502000204a8000504a8
-0502000204a8000504a80502000204a8000505ab000205a8000405ac000105a9000305ad
-000005aa00ff00ff00ff00ff001f04ff0457000504ff0457000504ff0457000504ff0457
-000504ff0457000504ff0457000504ff0457000504ff0457000504ff0457000504ff0457
-000504ff0457000504ff0457000504ff0457000504ff0457000504ff0457000504ff0457
-000504ff0457000504ff04570005040f01040434010004130100041a01000406010004d3
-0005041101000436010004130100041a010004db00050411010004030100040001010403
-01020403010204030102040a010204020100040201000401010404010100040001010402
-010004020100040101040409010204020100040001010402010404020102040301020402
-010004000101040301020404010104b70005041101000403010104010100040101000402
-010004010100040201000401010004020100040801000402010004010100040201000403
-01000403010104010100040101000402010004030100040a010004020100040101010401
-010004030100040601000402010004020100040101010401010004010100040201000403
-010104b70005041101000403010004090100040101000405010004020100040801000402
-01000401010004020100040301000403010004020100040101000402010004030100040a
-010004020100040101000402010004030100040601000402010004020100040101000402
-01000401010004c100050411010004030100040601030401010004050104040801000402
-01000401010004020100040301000403010004020100040101000402010004030100040a
-010004020100040101000402010004030100040601000402010004020100040101000402
-01000402010204be0005041101000403010004050100040201000401010004050100040c
-010004020100040101000402010004030100040301000402010004010100040201000403
-0100040a0100040201000401010004020100040301000406010004020100040201000401
-0100040201000405010004bd000504110100040301000405010004020100040101000402
-010004010100040201000408010004020100040101000401010104030100040301010401
-0100040101000401010104030100040a0100040201000401010104010100040301000406
-01000402010004020100040101000402010004010100040201000403010104b700050411
-010004030100040601030402010204030102040a01020403010104000100040401010401
-010004000101040301010400010004040101040901020402010004000101040501010404
-0100040301020402010004020100040201020404010104b70005044e01000421010004e4
-0005044e01000421010004e40005044e01000421010004e4000504ff0457000504ff0457
-000504ff0457000504ff0457000504ff0457000504ff0457000504ff0457000504ff0457
-000504ff0457000504ff0457000504ff0457000504ff0457000504ff0457000504ff0457
-000504ff0457000504ff0457000504ff0457000504ff0457000504ff0457000504ff0457
-000504ff0457000504ff045700050416050104ff043e000504150503040c010404190100
-040d010004ff0401000504140505040d0100042a010004ff040100050413050203010502
-040c01000403010004000101040901000402010004020102040201000400010104030101
-0400010004020102040201000402010004f300050412050203030502040b010004030101
-040101000408010004020100040401000402010104010100040101000401010104010100
-04020100040101000402010004f300050411050203050502040a01000403010004020100
-040801000400010004000100040401000402010004020100040101000402010004010100
-0402010004010100040001000400010004f3000504100002030700020409010004030100
-040201000408010004000100040001000404010004020100040201000401010004020100
-040101000402010004010100040001000400010004f300050411000203050002040a0100
-040301000402010004080100040001000400010004040100040201000402010004010100
-04020100040101000402010004010100040001000400010004f300050412000203030002
-040b01000403010004020100040801000400010004000100040401000402010004020100
-0401010004010101040101000402010004010100040001000400010004f3000504130002
-03010002040a010404010100040201000409010004000100040501000402010004020100
-040201010400010004020102040301000400010004f400050414000504ff043c00050415
-000304ff043d00050416000104ff043e000504ff0457000504ff0457000504ff04570005
-04ff0457000504ff0457000504ff040600470408000504ff040600460500040800050467
-058d0410000104430501040800050467058c000004100001044305010408000504670501
-048900010410000104430501040800050467050104890001041000010443050104080005
-04160001044e0501048900010410000104070602043805010408000504150003040c0104
-041201010404010004030102041905010489000104100001040706000401060004370501
-0408000504140005040d010004130100040d010004190501048900010410000104070600
-040106000402060004000601040306020402060004020600040206020403060204140501
-040800050413000204010002040c010004040102040b0100040401020405010004030102
-041205010489000104100001040706000401060004020601040106000401060004020600
-040106000402060004010600040206000401060004020600041305010408000504120002
-04030002040b010004030100040201000408010404040100040501000402010004020100
-041105010489000104100001040706030402060004050600040206000401060004000600
-0400060004010600040506000402060004130501040800050411000204050002040a0100
-0403010004020100040a0100040601000405010004020100040201000411050104890001
-041000010407060004020600040106000405060004020600040106000400060004000600
-040206020402060404130501040800050410050204070502040901000403010004020100
-040a01000406010004050100040201040411050104890001041000010407060004020600
-040106000405060004020600040106000400060004000600040506000401060004170501
-040800050411050204050502040a01000403010004020100040a01000406010004050100
-040201000415050104890001041000010407060004020600040106000405060004020600
-040106000400060004000600040106000402060004010600040206000403060104040601
-040406010501040800050412050204030502040b01000403010004020100040a01000406
-010004050100040201000402010004110501048900010410000104070603040206000406
-060204030600040006000403060204030602040406010404060104040601050104080005
-0413050204010502040c010004040102040b010004060100040501000403010204120501
-0489000104100001044305010408000504140505044c0501048900010410000104430501
-0408000504150503044d05010489000104100001044305010408000504160501044e0501
-048900010410000104430501040800050467050104890001041000010443050104080005
-04670501008b04100001044305010408000504670500008c041000010443050104080005
-04ff0406000105450408000504ff0406000005460408000504ff0457000504ff04570005
-04ff0457000504ff0457000504ff0457000504ff0457000504ff0457000504ff04570005
-04ff0457000504ff0457000504ff0457000504ff0457000504ff0457000504ff04570005
-04ff0457000504ff0457000504ff0457000505ff0557000405ff0558000305ff055900ff
-00ff00ff00ff001f04ff0457000504ff0457000504ff0457000504ff0457000504ff0457
-000504ff0457000504ff0457000504ff0457000504ff0457000504ff0457000504ff0457
-000504ff0457000504ff0457000504ff04570005044c003b044b003b04460005044c003a
-0500044b003a050004460005044c000104370501044b00010437050104460005044c0001
-04370501044b00010437050104460005044c000104370501044b00010437050104460005
-044c000104370501044b00010437050104460005044c000104370501044b000104370501
-04460005044c000104370501044b00010437050104460005044c000104370501044b0001
-0437050104460005044c000104150102040201000402010004160501044b000104070102
-041f01020409050104460005044c00010414010004020100040101000401010004170501
-044b00010406010004020100042001000409050104460005044c00010414010004020100
-040101000400010004180501044b00010406010004020100040201020402010004000101
-0403010204030102040501000409050104460005044c0001041401000402010004010101
-04190501044b000104060100040501000402010004010101040101000401010004020100
-0401010004020100040401000409050104460005044c0001041401000402010004010100
-0400010004180501044b0001040601000409010004010100040201000401010004050100
-04020100040401000409050104460005044c000104140100040201000401010004010100
-04170501044b000104060100040601030401010004020100040101000405010404040100
-0409050104460005044c00010414010004020100040101000401010004170501044b0001
-040601000402010004010100040201000401010004020100040101000405010004080100
-0409050104460005044c00010414010004020100040101000402010004160501044b0001
-040601000402010004010100040201000401010004020100040101000402010004010100
-04020100040401000409050104460005044c000104150102040201000402010004160501
-044b00010407010204030103040101000402010004020102040301020405010004090501
-04460005044c000104370501044b00010437050104460005044c000104370501044b0001
-0437050104460005044c000104370501044b00010437050104460005044c000104370501
-044b00010437050104460005044c000104370501044b00010437050104460005044c0001
-04370501044b00010437050104460005044c000104370501044b00010437050104460005
-044c000104370501044b00010437050104460005044c000104370501044b000104370501
-04460005044c000104370501044b00010437050104460005044c00010539044b00010539
-04460005044c0000053a044b0000053a0446000504ff0457000504ff0457000504ff0457
-000504ff0457000504ff0457000504ff045700010500000204ff045700000501000204ff
-0457
-%%EndData
-end
-%%PageTrailer
-%%Trailer
-%%BoundingBox: 0 53 250 318
-%%EOF
diff --git a/lib/pman/doc/src/part.xml b/lib/pman/doc/src/part.xml
deleted file mode 100644
index 140d7bc3c8..0000000000
--- a/lib/pman/doc/src/part.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE part SYSTEM "part.dtd">
-
-<part xmlns:xi="http://www.w3.org/2001/XInclude">
- <header>
- <copyright>
- <year>1996</year><year>2013</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>Pman User's Guide</title>
- <prepared></prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- </header>
- <description>
- <p>The process manager <em>Pman</em> is a graphical tool used to
- inspect the Erlang processes executing either locally or on remote
- nodes. It is also possible to trace events in the individual processes.</p>
- </description>
- <xi:include href="pman_chapter.xml"/>
-</part>
-
diff --git a/lib/pman/doc/src/part_notes.xml b/lib/pman/doc/src/part_notes.xml
deleted file mode 100644
index e9465d7502..0000000000
--- a/lib/pman/doc/src/part_notes.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE part SYSTEM "part.dtd">
-
-<part xmlns:xi="http://www.w3.org/2001/XInclude">
- <header>
- <copyright>
- <year>2004</year><year>2013</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>Pman 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 process manager <em>Pman</em> is a graphical tool used to
- inspect the Erlang processes executing either locally or on remote
- nodes. It is also possible to trace events in the individual
- processes.</p>
- </description>
- <xi:include href="notes.xml"/>
-</part>
-
diff --git a/lib/pman/doc/src/pman.xml b/lib/pman/doc/src/pman.xml
deleted file mode 100644
index db1a43065c..0000000000
--- a/lib/pman/doc/src/pman.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE erlref SYSTEM "erlref.dtd">
-
-<erlref>
- <header>
- <copyright>
- <year>1996</year>
- <year>2013</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>pman</title>
- <prepared></prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- </header>
- <module>pman</module>
- <modulesummary>A graphical process manager.</modulesummary>
- <description>
- <warning>
- <p>
- The Pman application has been superseded by the Observer application.
- Pman will be removed in R16.
- </p>
- </warning>
- <p>A graphical tool used to inspect the Erlang processes executing either
- locally or on remote nodes. It is also possible to trace events in
- the individual processes.</p>
- </description>
- <funcs>
- <func>
- <name>start()</name>
- <name>start(Excluded)</name>
- <name>start_notimeout()</name>
- <name>start_notimeout(Excluded)</name>
- <fsummary>Start Pman.</fsummary>
- <type>
- <v>Excluded = [Module]</v>
- <v>&nbsp;Module = atom()</v>
- </type>
- <desc>
- <p>Starts Pman. It will use the previously saved trace settings
- in <c>HOME/.erlang_tools/pman.opts</c>, where <c>HOME</c> is
- the user's home directory, if such a file exists. Otherwise
- standard trace settings will be used. The return value should
- be ignored.</p>
- <p><c>Excluded</c> is a list of module names. If the argument is
- present, processes currently executing in any of these modules
- will not be shown by Pman.</p>
- <p><c>start/0,1</c> will fail unless the start-up succeeds
- within 20 seconds, whereas <c>start_notimeout/0,1</c> will
- wait indefinitely.</p>
- </desc>
- </func>
- <func>
- <name>proc(Process)</name>
- <name>proc(A, B, C)</name>
- <fsummary>Start a Pman trace window.</fsummary>
- <type>
- <v>Process = pid() | atom()</v>
- <v>A = B = C = integer()</v>
- </type>
- <desc>
- <p>Starts a Pman trace window for the specified process.
- The return value should be ignored.</p>
- <p>The process to trace is given either by its pid or by its
- registered name. It is also possible to use <c>proc/3</c>
- to trace the pid represented as <c><![CDATA[<A,B,C>]]></c>.</p>
- </desc>
- </func>
- </funcs>
-</erlref>
-
diff --git a/lib/pman/doc/src/pman_chapter.xml b/lib/pman/doc/src/pman_chapter.xml
deleted file mode 100644
index d0b50c58f8..0000000000
--- a/lib/pman/doc/src/pman_chapter.xml
+++ /dev/null
@@ -1,377 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE chapter SYSTEM "chapter.dtd">
-
-<chapter>
- <header>
- <copyright>
- <year>1996</year><year>2013</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>Pman</title>
- <prepared></prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- <file>pman_chapter.xml</file>
- </header>
- <marker id="here"></marker>
-
- <section>
- <title>Introduction</title>
- <warning>
- <p>
- The Pman application has been superseded by the Observer application.
- Pman will be removed in R16.
- </p>
- </warning>
- <p>The process manager Pman is a tool for viewing processes executing
- locally or on remote nodes. Its main purpose is to locate
- erroneous code by inspecting the state of the processes and by tracing
- events. Bottlenecks, unread messages, and bad memory handling are
- some of the problems that can be solved with Pman.</p>
- <p>Processes may be inspected individually in a process trace
- window. There the user may dynamically follow the execution of a
- process by getting trace output for sent and received messages
- as well as for called functions and some other process
- events. Information about source code modules executed by the
- processes is also accessible. Note that Pman has some effect on
- the real time behavior of a running system.</p>
- </section>
-
- <section>
- <title>Getting Started with Pman</title>
- <p>Start Pman by calling <c>pman:start()</c>. It will start
- the <seealso marker="#main_win">Main Window</seealso>, showing an
- overview of all processes running at the current node.</p>
- <p>To trace a certain process, select it by clicking on its line and
- then chose Trace-&gt;Selected Process, or simply double-click it. This
- will open a <seealso marker="#trace_win">Trace Window</seealso>.
- In the Trace Window, there is some information about the process
- and traced events are added dynamically.</p>
- <p>Which events to trace are selected in
- the <seealso marker="#options_win">Options Window</seealso> which
- is opened by choosing File-&gt;Options... in the Main Window or in a
- Trace Window. Currently supported trace events are message sending,
- message receiving, function calls and process events.</p>
- <p>It is possible to by-pass the Main Window and open a Trace
- Window directly for the process <c>Pid</c> by calling
- <c>pman:proc(Pid)</c>.</p>
- </section>
-
- <section>
- <marker id="main_win"></marker>
- <title>The Main Window</title>
- <p>The Main Window shows all processes running at the displayed node.
- The window is automatically updated every 5 seconds.
- Select which node to display in the window by choosing the node name
- from the Nodes menu.</p>
- <image file="main_window.gif">
- <icaption>The Main Window.</icaption>
- </image>
- <p>A process can be selected by clicking on its line. The selected
- process is highlighted. Use the arrow keys to move up and down in
- the process overview.</p>
- <p>The following information is displayed for each process:</p>
- <list type="bulleted">
- <item>Pid - process identifier.</item>
- <item>Current Function - the function (<c>Module:Function/Arity</c>)
- the process is currently executing.</item>
- <item>Name - registered name of the process, if any.</item>
- <item>Msgs - number of messages in the process' mailbox.</item>
- <item>Reds - number of reductions performed. Gives a rough estimate
- of the process' work load.</item>
- <item>Size - estimated size of the process, in words, calculated by
- adding the stack size and the heap size.</item>
- </list>
- <p>At the bottom of the window the following functions and
- information can be found:</p>
- <taglist>
- <tag><em>Hide System Processes</em></tag>
- <item>This check button controls the display of what Pman consider
- <em>system processes</em>, that is, processes Pman knows are part
- of Erlang/OTP rather than the user's application.
- If the button is selected, these system processes will not be
- shown.</item>
- <tag><em>Auto-Hide New</em></tag>
- <item>This check button controls the treatment of newly created
- processes. If it is selected, new processes will not be shown.</item>
- <tag><em># Hidden</em></tag>
- <item>This label displays the number of processes currently
- executing that are not shown in the process overview.</item>
- </taglist>
-
- <section>
- <title>The File Menu</title>
- <taglist>
- <tag><em>Options...</em></tag>
- <item>Open the <seealso marker="#options_win">Options Window</seealso>
- which allows the user to set the trace options to use.</item>
- <tag><em>Save Options</em></tag>
- <item>Save the options set using the Options Window. The options are
- stored to the file <c>HOME/.erlang_tools/pman.opts</c>, where
- <c>HOME</c> is the user's home directory, and are automatically
- loaded the next time Pman is started.</item>
- <tag><em>Exit</em></tag>
- <item>Stop Pman.</item>
- </taglist>
- </section>
-
- <section>
- <title>The View Menu</title>
- <p>This menu mainly contains buttons for controlling what to
- display in the Main Window. Note that the View Menu overrides
- the settings of the check buttons (Hide System processes, Auto-Hide
- new) in the Main Window.</p>
- <taglist>
- <tag><em>Hide All Processes</em></tag>
- <item>Hide all processes.</item>
- <tag><em>Hide Modules...</em></tag>
- <item>Opens a dialog window with all loaded modules. If the user
- selects a window and clicks OK, the process overview will not
- show any processes running code from those modules.</item>
- <tag><em>Hide Selected Processs</em></tag>
- <item>Hide the selected process.</item>
- <tag><em>Module Info...</em></tag>
- <item>Given a selected process currently executing a function in
- the module <c>Module</c>, this menu button opens a window
- showing information about the module as returned from
- <c>Module:module_info()</c>.</item>
- <tag><em>Refresh</em></tag>
- <item>Updates the process overview.</item>
- <tag><em>Show All Processes</em></tag>
- <item>Show all processes, except system processes and/or new
- processes if <em>Hide System Processes</em> and/or
- <em>Auto-Hide New</em> is selected.</item>
- <tag><em>Show Processes...</em></tag>
- <item>Opens a dialog window with all hidden processes. If
- the user selects a process and clicks OK, the process
- overview will show that process.</item>
- </taglist>
- </section>
-
- <section>
- <title>The Trace Menu</title>
- <taglist>
- <tag><em>Kill</em></tag>
- <item>Terminates the selected process by calling
- <c>exit(Pid,kill)</c>.</item>
- <tag><em>Trace Selected Process</em></tag>
- <item>Opens a Trace Window for the selected process. Tracing
- will start immediately with the default trace flags set from
- the Main Window.</item>
- <tag><em>Shell Process</em></tag>
- <item>Opens a Trace Window for the shell process of node Pman
- was started at (not the displayed node). If the shell process
- dies, the opened Trace Window will find the pid of
- the automatically started new shell process, and continue to
- trace that process.</item>
- </taglist>
- </section>
-
- <section>
- <title>The Nodes Menu</title>
- <p>The Nodes menu contains one entry for each known node.
- By selecting a node from the Nodes menu, the process overview
- window will change its view, and display the processes running
- on that node.</p>
- </section>
-
- <section>
- <title>The Help Menu</title>
- <taglist>
- <tag><em>Help</em></tag>
- <item>Selecting Help from the Help menu will cause the HTML
- version of the Pman User's Guide (this document) to be
- displayed. Currently this function requires Netscape to be up
- and running.</item>
- </taglist>
- </section>
- </section>
-
- <section>
- <marker id="trace_win"></marker>
- <title>The Trace Window</title>
- <p>A Trace Window outputs trace information for a traced process.
- A Trace Window automatically uses the trace options set in
- the Main Window, but it is also possible to change the options for
- each Trace Window individually.</p>
- <image file="trace.gif">
- <icaption>The Trace Window.</icaption>
- </image>
- <p>There is no limit to how many Trace Windows can be open at the same
- time. However, notice that if more processes are traced,
- the performance degradation of the system will be more noticeable.</p>
- <p>The following information is displayed, where applicable:</p>
- <list type="bulleted">
- <item>initial call - the function (<c>Module:Function/Arity</c>)
- the process started executing in.</item>
- <item>current function - the function (<c>Module:Function/Arity</c>)
- the process is currently executing.</item>
- <item>messages - the messages in the mailbox.</item>
- <item>dictionary - the contents of the process dictionary.</item>
- <item>heap size - heap size in words.</item>
- <item>stack size - stack size in words.</item>
- <item>reductions - number of reductions performed. Gives a rough
- estimate of the process' work load.</item>
- <item>links - list of pids the process is linked to.</item>
- <item>trap_exit - <c>true</c> if the process trap exit signals,
- <c>false</c> otherwise.</item>
- </list>
- <p>In the Trace Window, trace output is continuously added. First in
- each trace message is the pid of the traced process.
- Note that if the inheritance flags for tracing are set, the trace
- output for the spawned/linked processes will be shown in the same
- window as the spawning/linking process.</p>
- <p>Each trace message also has a mnemonic tag:</p>
- <taglist>
- <tag><em>!</em></tag>
- <item>This tag indicates that a message has been sent. Following
- the <c>To:</c> tag will be a pid/name of the receiver. Next,
- following the <c>Msg:</c> tag will be the sent message.</item>
- <tag><em>rec</em></tag>
- <item>This tag indicates that a message has been received.
- Following this will be the received message.</item>
- <tag><em>call</em></tag>
- <item>This tag indicates a call to a function. Following this will be
- the actual call, with all the arguments.</item>
- <tag><em>link</em></tag>
- <item>This tag indicates that a link between the traced process and
- another process has been created. Following this will be the pid
- of the other process.</item>
- <tag><em>spawn</em></tag>
- <item>This tag indicates that the traced process has spawned another
- process. Following this will be the pid of the spawned process.</item>
- <tag><em>exit</em></tag>
- <item>This tag indicates that traced process has exited. Following
- this will be the exit reason.</item>
- </taglist>
-
- <section>
- <title>The File Menu</title>
- <taglist>
- <tag><em>Options...</em></tag>
- <item>Opens the <seealso marker="#options_win">Options Window</seealso>
- which allows the user to set the trace options to use for this
- specific Trace Window.</item>
- <tag><em>Save Buffer...</em></tag>
- <item>Opens a dialog that prompts the user for a file name to
- save the current Trace Window contents in.</item>
- <tag><em>Close</em></tag>
- <item>Stops tracing of the process, and closes the Trace Window.</item>
- </taglist>
- </section>
-
- <section>
- <title>The View Menu</title>
- <taglist>
- <tag><em>Clear Buffer</em></tag>
- <item>Clears the contents of the Trace Window.</item>
- <tag><em>Module Info</em></tag>
- <item>Opens a window showing information about the module
- the process is currently executing code from, as returned from
- <c>Module:module_info()</c>.</item>
- </taglist>
- </section>
-
- <section>
- <title>The Trace Menu</title>
- <taglist>
- <tag><em>All Linked Processes</em></tag>
- <item>Opens a Trace Window for each of the processes linked to the
- process being traced in the current Trace Window.</item>
- <tag><em>Linked Process -></em></tag>
- <item>The Linked Process submenu has one entry for each process
- linked to the process being traced in the current Trace Window.
- Select one of the processes to open a new Trace Window for that
- process.</item>
- <tag><em>Kill</em></tag>
- <item>Terminates the process being traced in the current Trace
- Window by calling <c>exit(Pid,kill)</c>.</item>
- </taglist>
- </section>
-
- <section>
- <title>The Help Menu</title>
- <taglist>
- <tag><em>Help</em></tag>
- <item>Selecting Help from the Help menu will cause the HTML version
- of the Pman User's Guide (this document) to be displayed.
- Currently this function requires Netscape to be up and running.</item>
- </taglist>
- </section>
- </section>
-
- <section>
- <marker id="options_win"></marker>
- <title>The Options Window</title>
- <p>The Options Window allows the user to specify the amount of output,
- and the destination of output for traced processes.</p>
- <image file="options.gif">
- <icaption>The Options Window.</icaption>
- </image>
- <p>In the upper left corner of the Options Window, there are check
- buttons for determining what to output in the Trace Window:</p>
- <taglist>
- <tag><em>Trace send</em></tag>
- <item>Select this check button to display information about sent
- messages.</item>
- <tag><em>Trace receive</em></tag>
- <item>Select this check button to display information about received
- messages.</item>
- <tag><em>Trace functions</em></tag>
- <item>Select this check button to display information about
- function calls.</item>
- <tag><em>Trace events</em></tag>
- <item>Select this check button to display information about process
- events, such as spawn, link and exit.</item>
- </taglist>
- <p>In the upper right corner of the dialog, there are options for
- controlling the behaviour of spawned or linked processes:</p>
- <taglist>
- <tag><em>Inherit on spawn</em></tag>
- <item>
- <p>The user may select if spawned processes shall also be traced.
- And if so, if all spawned processes should be traced, or just
- the first spawned process.</p>
- <p>If a spawned process is traced, it will get the same trace
- options that are set for the spawning process. And the output
- will be shown in the same Trace Window as that of the spawning
- process.</p>
- <p>.</p>
- </item>
- <tag><em>Inherit on link</em></tag>
- <item>
- <p>The user may select if a process that is being linked to
- shall be traced. And if so, if all linked processes shall be
- traced, or just the first one linked to.</p>
- <p>If a linked process is traced, it will get the same trace
- options that are set for the linking process. And the output
- will be shown in the same Trace Window as that of the linked
- process.</p>
- </item>
- </taglist>
- <p>In the lower part of the Options Dialog, the user may select
- whether the trace information shall be output to a file, or appear in
- the trace window.</p>
- <p>Sending trace information to a file is more efficient than displaying
- it in the Trace Window. Furthermore, if the amount of trace data is
- large, it will not be lost if tracing to a file. The trace information
- in the Trace Window has an upper limit (approx. 10,000 lines), after
- which the output buffer will be cleared.</p>
- </section>
-</chapter>
-
diff --git a/lib/pman/doc/src/ref_man.xml b/lib/pman/doc/src/ref_man.xml
deleted file mode 100644
index 3b526d86ef..0000000000
--- a/lib/pman/doc/src/ref_man.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE application SYSTEM "application.dtd">
-
-<application xmlns:xi="http://www.w3.org/2001/XInclude">
- <header>
- <copyright>
- <year>1996</year><year>2013</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>Pman Reference Manual</title>
- <prepared></prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- </header>
- <description>
- <p>The process manager <em>Pman</em> is a graphical tool used to
- inspect the Erlang processes executing either locally or on remote
- nodes. It is also possible to trace events in the individual processes.</p>
- </description>
- <xi:include href="pman.xml"/>
-</application>
-
diff --git a/lib/pman/doc/src/toolbar.gif b/lib/pman/doc/src/toolbar.gif
deleted file mode 100644
index 116e32ace8..0000000000
--- a/lib/pman/doc/src/toolbar.gif
+++ /dev/null
Binary files differ
diff --git a/lib/pman/doc/src/trace.gif b/lib/pman/doc/src/trace.gif
deleted file mode 100644
index 8b34ec7ea0..0000000000
--- a/lib/pman/doc/src/trace.gif
+++ /dev/null
Binary files differ
diff --git a/lib/pman/doc/src/trace.ps b/lib/pman/doc/src/trace.ps
deleted file mode 100644
index 0828d4ade1..0000000000
--- a/lib/pman/doc/src/trace.ps
+++ /dev/null
@@ -1,1312 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Creator: (ImageMagick)
-%%Title: (./trace.tmp.eps)
-%%CreationDate: (Tue Jun 12 18:05:00 2001)
-%%BoundingBox: 0 17 377 309
-%%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 377 309
-userdict begin
-%%BeginData:
-DisplayImage
-0 17
-377.000000 292.000000
-12
-562 436
-1
-0
-0
-8
-ffffff
-000000
-b24d7a
-dcadc2
-57253b
-d9d9d9
-c3c3c3
-828282
-03ff03ff034e040003ff03f40400031c04000301021a0400030002ff02f304000300021a
-04010301021a0400030002ff02f304000300021a04010301021a0400030002ff02f30400
-0300021a0401030102020418030004ff04f4030004170202040103010202040003ff03ff
-032602020401030102020400030002150400030002ff02db040003000215040003000215
-0400030002020401030102020400030002150400030002ff02db04000300021504000300
-02150400030002020401030102020400030002150400030002ff02db0400030002150400
-030002150400030002020401030102020400030002150400030002ff02db040003000215
-040003000202030f02020400030002020401030102020400030002150400030002ff0263
-000302730400030002150400030002020300020d04000202040003000202040103010202
-04000300021504000300021f000602020001020600010206000102060001020500000209
-0004020100010211000102020001025a0002020a000502040004020c0002022f00010205
-00000212000102110001021b0004020d000102080001023a040003000215040003000202
-0300020d0400020204000300020204010301020204000300021504000300021f00010202
-000202010002020400020205000202060002020400000207000202020000020100010211
-000102020001025800010202000102080000020200020203000002020001020900010202
-0001022d00020204000002120001021100010219000102040000020c000102080001023a
-0400030002150400030002020300020d0400020204000300020204010301020204000300
-021504000300021f00010203000102010002020400020205000002000001020500020204
-0000020700010206000102110001020200010258000102020001020d0001020800010208
-000102020001022d00020204000002120001021100010218000002070000020b00010245
-0400030002150400030002020300020d0400020204000300020204010301020204000300
-021504000300021f00010203000102010000020000000203000302050000020000010205
-000002000001020300000203000102010001020600010200000302050003020200010202
-000102080001020000020204000102000001020200040204000402030003020300040203
-0004020f00000201000102040001020c0001020800010207000102040001020000000211
-000402020001020000030209000002000001020300000204000402040002020000010204
-000302070004020200040204000402030000020300030201000002030004020100010200
-00030203000102010001020400000202000402030004021f040003000215040003000202
-0300020d04000202040003000202040103010202040003000202030f020204000300021f
-000102030001020100000200000102020000020000010204000102000001020500000200
-000202020000020300010201000302040002020200010203000102010001020100010202
-000102080002020100010203000202030001020200010202000102060001020100010201
-000102060001021100010202000102040001020b00010209000102070001020400010201
-0001020e0001020200010201000202020001020800000200000202020000020300010202
-000102020001020100020203000102010001020700010203000102020001020200010202
-000102020000020100010202000002010000020200010205000202020001020200010202
-000002040000020200000202000102010001022304000300020803030208040003000202
-0300020d040002020400030002020401030102020400030002020300020d040002020400
-0300021f0001020200010202000002000001020200000200000102040000020200010204
-000002010001020200000208000402020001020300010202000102030001020000010202
-000102080001020300010202000102030001020400010200000102060001020300010200
-000102060001020f0001020400010204000102080002020a000102080001020400010203
-0001020b0001020400010200000102030001020800000201000102020000020200010204
-000102000001020300010202000102030001020600010202000102040001020000010204
-000102000000020200000202000102010000020100010206000102030001020200010202
-000102020000020700010201000102230400030002080300020104000208040003000202
-0300020d040002020400030002020401030102020400030002020300020d040002020400
-0300021f0005020300000201000102000000020100010203000102020001020400000202
-000102010000020a00030201000102030001020200010203000102000001020200010208
-000102030001020200010203000102040001020000010206000102030001020000030204
-0003020a00020206000102040001020b0001020800000209000102040001020500020208
-000102040001020000010203000102080000020200010201000002020001020400010200
-000102030001020200010203000102060001020200010204000102000001020400010200
-000002010000020200010202000002010001020600010203000102020001020200010202
-00000207000102010003022104000300020803000201040002080400030002020300020d
-040002020400030002020401030102020400030002020300040e020204000300021f0001
-020700000201000102000000020100010203000102020002020300000202000202000000
-020c00020200000102030001020200070200000102020001020800010203000102020001
-020300010204000102000001020600070202000302040003020600020208000102040001
-020c000102060000020a0001020400010207000202060001020400010200000102030001
-020800000202000202000000020200010204000102000001020300010202000702060001
-020200010204000102000001020400010200000002010000020100020201000102010001
-02060001020300010202000102030000020100010204000402030003021f040003000208
-0300040202080400030002020300020d0400020204000300020204010301020204000300
-021504000300021f00010207000002010001020000000201000102030007020300000203
-000102000000020d00010200000102030001020200010206000102020001020800010203
-00010202000102030001020400010200000102060001020a000202050002020700020206
-000102040001020c000102050000020b0001020400010205000202080001020400010200
-000102030001020800000203000102000000020200010204000102000001020300010202
-0001020c0001020200010204000102000001020400010200000002010000020100000200
-000002010000020200010206000102030001020200010203000102000000020300020201
-000102050002021e0400030002150400030002020300020d040002020400030002020401
-0301020204000300021504000300021f0001020700000202000102020001020200010204
-00010203000002040002020d000102000001020300010202000102060001020200010208
-0001020300010202000102030001020400010200000102060001020b000102060001020a
-00010205000102020001020d000102040000020d00010202000102040001020b00010204
-000102000001020300010208000002040002020200010204000102000001020300010202
-0001020c0001020200010204000102000001020400010201000002000002020100020203
-00010206000102030001020200010203000102000000020300010202000102060001021e
-0400030002150400030002020300020d0400020204000300020204010301020204000300
-021504000300021f00010207000002020001020200010202000002060001020200000204
-000202030001020100000203000102010001020300010203000102030000020000010202
-000102080002020100010203000102040001020200010202000102020000020200010203
-000002000000020300010201000002030001020c00010203000102020001020300010202
-0000020200010204000102080001020200010202000102020001020e0001020200010201
-000102030001020800000204000202030001020200010202000102010002020300010203
-000002060001020300010202000102020001020200010202000102030000020700010202
-00000201000102030001020200010204000102040001020200010201000002030001021e
-0400030002150400030002020300020d0400020204000300020204010301020204000300
-021504000300021f00010207000002070001020100010206000102020000020500010203
-000102010005020200010203000102050004020000010202000102080001020000020204
-00010205000402040004020400040200000502020005020f000002040002020500010202
-000402050006020300010204000202030000021100040202000102030001020800000205
-000102040004020400020200000102050004020600010204000402040004020500030209
-000402010001020300010202000102040001020500030200000102000005021f04000300
-02150400030002020300020d040002020400030002020401030102020400030002150400
-03000282000102ff02560400030002150400030002020300020d04000202040003000202
-040103010202040003000215040003000282000102ff0256040003000215040003000202
-0300040e0202040003000202040103010202040003000215040003000282000102ff0256
-0400030002150400030002150400030002020401030102020400030002150400030002ff
-02db04000300021504000300021504000300020204010301020204000300021504000300
-02ff02db04000300021504000300021504000300020204010300040403000416030004ff
-04dc030004160300041603000404030500ff00ff00250304040003010202040000ff00ff
-00240700030002020401030102020400000105ff05ff0521070103000202040103010202
-0400000105ff05ff05210701030002020401030102020400000105ff05ff052107010300
-02020401030102020400000105ff05ff05210701030002020401030102020400000105ff
-05ff052107010300020204010301020204000001050b01040504010005030102051f0100
-05020100050401000526010405ff05860100050201000509010205130701030002020401
-0301020204000001050b0100050f0100051f010005020100052e010005ff058801000502
-0100050b0100051307010300020204010301020204000001050b01000506010205050100
-050301020518010005020100050201020503010205020100050201000519010005030100
-0500010105030102050301020503010205ff056b01000502010005020102050501000502
-010005000101050c07010300020204010301020204000001050b01000508010005050100
-050201000502010005180100050001000505010005020100050201000501010005020100
-051901000503010105010100050101000502010005010100050201000501010005020100
-05ff056a0100050201000501010005020100050401000502010105010100050b07010300
-020204010301020204000001050b01030505010005050100050201000502010005180100
-050001000505010005020100050201000501010005000100050001000519010005030100
-0509010005010100050501000502010005ff056a01040501010005020100050401000502
-010005020100050b07010300020204010301020204000001050b01000508010005050100
-050201040518010005000100050501000502010405010100050001000500010005190100
-0503010005060103050101000505010405ff056a01000502010005010104050401000502
-010005020100050b07010300020204010301020204000001050b01000508010005050100
-05020100051d010005060100050201000505010005000100050001000519010005030100
-0505010005020100050101000505010005ff056e01000502010005010100050801000502
-010005020100050b07010300020204010301020204000001050b01000508010005050100
-050201000502010005190100050601000502010005020100050101000500010005000100
-051901000503010005050100050201000501010005020100050101000502010005ff056a
-0100050201000501010005020100050401000502010105010100050b0701030002020401
-0301020204000001050b0100050801000505010005030102051a01000506010005030102
-0503010005000100051a01000503010005060103050201020503010205ff056b01000502
-010005020102050501000502010005000101050c07010300020204010301020204000001
-05ff05ff05100100050f07010300020204010301020204000001050a0106052a0106052a
-010605ff05840106050e0100050f07010300020204010301020204000001050a0106052a
-0106052a010605ff05840106050e0100050f0701030002020401030102020400000105ff
-05ff05210701030002020401030102020400000105ff05ff052107010300020204010301
-02020400000105ff05ff05210701030002020401030102020400000107ff07ff07230300
-02020401030102020400000007ff07ff072403000202040103010202040005ff05ff0525
-03000202040103010202040005ff05ff052503000202040103010202040005ff05ff0525
-03000202040103010202040005ff05ff052503000202040103010202040005ff05ff0525
-03000202040103010202040005ff05ff052503000202040103010202040005ff05ff0525
-03000202040103010202040005ff05ff052503000202040103010202040005ff05ff0525
-03000202040103010202040005ff05ff052503000202040103010202040005ff05ff0525
-03000202040103010202040005ff05ff052503000202040103010202040005ff05ff0525
-03000202040103010202040005ff05ff052503000202040103010202040005ff05ff0525
-03000202040103010202040005ff05ff052503000202040103010202040005ff05ff0515
-070f03000202040103010202040005ff05ff0515070f0300020204010301020204000504
-07ff07ff070e05010701060607000605030002020401030102020400050407ff07ff070d
-00000501070106050000070006050300020204010301020204000504070105ff05ff050a
-00010501070106050000070106040300020204010301020204000504070105cf010005ff
-053900010501070106040001070106040300020204010301020204000504070105030100
-050c01000504010005060100050a0102051801020503010205170100050d010205030102
-051f010205120100051501000502010205ff053300010501070106040001050007010603
-030002020401030102020400050407010517010005140100051a01000505010005170100
-050f010005050100052101000512010005140100050201000502010005ff053200010501
-070106030001050107010603030002020401030102020400050407010501010205020100
-050001010503010205020104050201020503010205050100050a01020503010205050100
-0505010005040101050a0102050201000500010105030102050501000505010005040101
-050301020502010005020100050201020505010005020100050201000502010205020104
-050201020502010005000101050501000506010005ff0532000105010701060300010502
-070106020300020204010301020204000504070105030100050201010501010005040100
-050401000506010005020100050201000504010005090100050201000501010005020100
-050401000505010005040101050901000502010005010101050101000501010005020100
-050401000505010005040101050201000502010005010100050201000501010005020100
-050401000502010005020100050101000502010005030100050301000502010005010101
-05010100050301000507010005ff05320001050107010602000105030701060203000202
-040103010202040005040701050301000502010005020100050401000504010005060100
-050601000504010005090100050901000504010005050100051001000505010005020100
-050101000502010005040100050501000509010005020100050101000502010005050100
-050401000502010005020100050501000503010005030100050201000501010005070100
-0505010105ff053300010501070106020001050407010601030002020401030102020400
-050407010503010005020100050201000504010005040100050601000503010305040100
-050901000506010305040100050501000511010205020100050201000501010405040100
-050501000509010405020100050001000503010305040100050201000502010005020103
-05030100050301000502010005010100050601000508010005ff05320001050107010601
-000105050701060103000202040103010202040005040701050301000502010005020100
-050401000504010005060100050201000502010005040100050901000505010005020100
-050401000505010005140100050101000502010005010100050801000505010005090100
-050601000500010005020100050201000504010005020100050201000501010005020100
-05030100050301000502010005010100050601000508010005ff05320001050107010601
-000105060701060003000202040103010202040005040701050301000502010005020100
-050401000504010005060100050201000502010005040100050901000502010005010100
-050201000504010005050100050401010509010005020100050101000502010005010100
-050201000504010005050100050401010502010005020100050301000503010005020100
-050401000502010005010101050101000502010005030100050301000502010005010100
-05050100050501000502010005ff05320001050107010600000105070701060003000202
-040103010202040005040701050301000502010005020100050401000505010105040100
-0503010305040100050a010205030103050401000505010005040101050a010205020100
-050201000502010205050100050501000504010105030102050401000504010305040100
-050301010500010005020103050401010502010205020100050501000506010205ff0533
-0001050107010600000105080701030002020401030102020400050407010530010505ff
-05d30001050107010001070b0300020204010301020204000504070105ff05ff050a0001
-050107010000070c0300020204010301020204000504070105ff05ff050a000105010701
-060d0300020204010301020204000504070105ff05ff050a000105010701000d03000202
-04010301020204000504070105ff05ff050a000105010701000d03000202040103010202
-04000504070105ff05ff050a0001050107010001050a0700030002020401030102020400
-0504070105ff05ff050a0001050107010001050a07000300020204010301020204000504
-070105ff05ff050a0001050107010001050a070003000202040103010202040005040701
-05ff05ff050a0001050107010001050a07000300020204010301020204000504070105ff
-05ff050a0001050107010001050a07000300020204010301020204000504070105ff05ff
-050a0001050107010001050a07000300020204010301020204000504070105ff05ff050a
-0001050107010001050a07000300020204010301020204000504070105ff05ff050a0001
-050107010001050a07000300020204010301020204000504070105ff05ff050a00010501
-07010001050a07000300020204010301020204000504070105ff05ff050a000105010701
-0001050a07000300020204010301020204000504070105ff05ff050a0001050107010001
-070b0300020204010301020204000504070105ff05ff050a0001050107010000070c0300
-020204010301020204000504070105ff05ff050a000105010701060d0300020204010301
-020204000504070105eb010005ff051d000105010701060d030002020401030102020400
-05040701052c0100050d0101051801000506010005250100050d010205030102051f0102
-050a0102051b01000502010205ff0517000105010701060d030002020401030102020400
-05040701052c0100050c0100051a0100052d0100050f01000505010005210100050c0100
-051a0100050201000502010005ff0516000105010701060d030002020401030102020400
-050407010501010205020100050201000501010005000101050201000500010105030102
-050201000500010105020104050a01000503010005020100050101000500010105030102
-050201040502010205030102050201000500010105040101050a01020502010005000101
-050301020505010005050100050401010503010205020100050201000502010205050100
-050c010005030102050301020502010005000101050501000506010005ff051600010501
-0701060d0300020204010301020204000504070105000100050201000501010005020100
-050101010501010005010101050101000501010005020100050101010501010005030100
-050a01040501010005020100050101010501010005010100050201000503010005060100
-050201000502010005010101050101000503010105090100050201000501010105010100
-050101000502010005040100050501000504010105020100050201000501010005020100
-050101000502010005040100050c01000502010005020100050101000502010005010101
-05010100050301000507010005ff0516000105010701060d030002020401030102020400
-050407010500010005050100050201000501010005050100050501000502010005010100
-0502010005030100050c0100050301000502010005010100050201000501010005070100
-0506010005020100050201000501010005020100050f0100050501000502010005010100
-050201000504010005050100050901000502010005010100050201000505010005040100
-050c01000502010005020100050101000502010005010100050201000503010005060100
-05ff0517000105010701060d030002020401030102020400050407010500010005050100
-05020100050101000505010005050104050101000502010005030100050c010005030100
-050201000501010005020100050101000507010005060100050201000502010005010100
-050201000510010205020100050201000501010405040100050501000509010405020100
-050001000503010305040100050c01000502010005020100050101000502010005010100
-05020100050201000506010005ff0518000105010701060d030002020401030102020400
-050407010500010005050100050201000501010005050100050501000505010005020100
-05030100050c010005030100050201000501010005020100050101000507010005060100
-050201000502010005010100050201000513010005010100050201000501010005080100
-05050100050901000506010005000100050201000502010005040100050c010005020100
-0502010005010100050201000501010005020100050201000505010005ff051900010501
-0701060d0300020204010301020204000504070105000100050201000501010005010101
-05010100050501000505010005020100050101000502010005030100050c010005030100
-050101010501010005020100050101000502010005030100050601000502010005020100
-050101000502010005030101050901000502010005010100050201000501010005020100
-050401000505010005040101050201000502010005030100050301000502010005040100
-050c01000502010005020100050101000502010005010101050101000501010005050100
-05ff051a000105010701060d030002020401030102020400050407010501010205030101
-05000100050101000505010005060102050201000502010005040101050a010005040101
-050001000501010005020100050201020505010105040100050301020502010005020100
-05030101050a010205020100050201000502010205050100050501000504010105030102
-050401000504010305040100050c01000503010205030102050201000500010105020100
-0505010405ff0516000105010701060d0300020204010301020204000504070105300105
-058c01050516010005ff0528000105010701060d03000202040103010202040005040701
-05e0010005ff0528000105010701060d0300020204010301020204000504070105e00100
-05ff0528000105010701060d0300020204010301020204000504070105ff05ff050a0001
-05010701060d0300020204010301020204000504070105ff05ff050a000105010701060d
-0300020204010301020204000504070105ff05ff050a000105010701060d030002020401
-0301020204000504070105ff05ff050a000105010701060d030002020401030102020400
-0504070105ff05ff050a000105010701060d0300020204010301020204000504070105ff
-05ff050a000105010701060d0300020204010301020204000504070105ff05ff050a0001
-05010701060d0300020204010301020204000504070105ff05ff050a000105010701060d
-0300020204010301020204000504070105ff05ff050a000105010701060d030002020401
-0301020204000504070105ff05ff050a000105010701060d030002020401030102020400
-0504070105ff05ff050a000105010701060d0300020204010301020204000504070105ff
-05ff050a000105010701060d0300020204010301020204000504070105ff05ff050a0001
-05010701060d0300020204010301020204000504070105ff05ff050a000105010701060d
-0300020204010301020204000504070105ff05ff050a000105010701060d030002020401
-0301020204000504070105ff05ff050a000105010701060d030002020401030102020400
-0504070105000100052b0100051f01020503010205ff05b1000105010701060d03000202
-04010301020204000504070105000100054b010005020100050101000502010005ff05b0
-000105010701060d03000202040103010202040005040701050001000500010105030102
-050301020502010005000101050a01020503010205020104050201020504010105090100
-05020100050101000502010005ff05b0000105010701060d030002020401030102020400
-050407010500010105010100050101000502010005010100050201000501010105010100
-050801000502010005040100050601000501010005020100050301010509010005020100
-050101000502010005ff05b0000105010701060d03000202040103010202040005040701
-050001000502010005010100050201000505010005010100050201000508010005080100
-050501000502010005020100051001020503010305ff05b0000105010701060d03000202
-040103010202040005040701050001000502010005010104050201030501010005020100
-05090102050501000504010005030104050f0100050201000505010005ff05b000010501
-0701060d0300020204010301020204000504070105000100050201000501010005050100
-050201000501010005020100050c01000504010005030100050401000513010005020100
-0505010005ff05b0000105010701060d0300020204010301020204000504070105000100
-050201000501010005020100050101000502010005010101050101000508010005020100
-050401000502010005050100050201000503010105090100050201000501010005020100
-05ff05b0000105010701060d030002020401030102020400050407010500010005020100
-05020102050301030501010005000101050a010205050100050201040502010205040101
-050a01020503010205ff05b1000105010701060d03000202040103010202040005040701
-051501000504010505ff05e8000105010701060d03000202040103010202040005040701
-0515010005ff05f3000105010701060d0300020204010301020204000504070105150100
-05ff05f3000105010701060d0300020204010301020204000504070105ff05ff050a0001
-05010701060d0300020204010301020204000504070105ff05ff050a000105010701060d
-0300020204010301020204000504070105ff05ff050a000105010701060d030002020401
-0301020204000504070105ff05ff050a000105010701060d030002020401030102020400
-0504070105ff05ff050a000105010701060d0300020204010301020204000504070105ff
-05ff050a000105010701060d0300020204010301020204000504070105ff05ff050a0001
-05010701060d0300020204010301020204000504070105ff05ff050a000105010701060d
-0300020204010301020204000504070105ff05ff050a000105010701060d030002020401
-0301020204000504070105ff05ff050a000105010701060d030002020401030102020400
-0504070105ff05ff050a000105010701060d0300020204010301020204000504070105ff
-05ff050a000105010701060d0300020204010301020204000504070105ff05ff050a0001
-05010701060d0300020204010301020204000504070105ff05ff050a000105010701060d
-0300020204010301020204000504070105ff05ff050a000105010701060d030002020401
-0301020204000504070105ff05ff050a000105010701060d030002020401030102020400
-05040701050901000511010005160100051e01040502010205ff05aa000105010701060d
-030002020401030102020400050407010509010005110100053601000505010005020100
-05ff05a9000105010701060d030002020401030102020400050407010501010205020104
-05020102050301020502010005010100050a010205030102050201040502010205040101
-050901000509010005ff05a9000105010701060d03000202040103010202040005040701
-050001000502010005030100050301000502010005010100050201000501010005000100
-050a01000502010005040100050601000501010005020100050301010509010305060100
-05ff05a9000105010701060d030002020401030102020400050407010500010005070100
-050701000501010005050101050b01000508010005050100050201000502010005130100
-0503010105ff05aa000105010701060d0300020204010301020204000504070105010102
-05040100050401030501010005050101050c010205050100050401000503010405130100
-0505010005ff05a9000105010701060d0300020204010301020204000504070105040100
-050301000503010005020100050101000505010005000100050e01000504010005030100
-0504010005130100050201000505010005ff05a9000105010701060d0300020204010301
-020204000504070105000100050201000503010005030100050201000501010005020100
-050101000501010005090100050201000504010005020100050501000502010005030101
-0509010005020100050101000502010005ff05a9000105010701060d0300020204010301
-020204000504070105010102050501010502010305020102050201000502010005090102
-05050100050201040502010205040101050a01020503010205ff05aa000105010701060d
-030002020401030102020400050407010522010505ff05e1000105010701060d03000202
-04010301020204000504070105ff05ff050a000105010701060d03000202040103010202
-04000504070105ff05ff050a000105010701060d03000202040103010202040005040701
-05ff05ff050a000105010701060d0300020204010301020204000504070105ff05ff050a
-000105010701060d0300020204010301020204000504070105ff05ff050a000105010701
-060d0300020204010301020204000504070105ff05ff050a000105010701060d03000202
-04010301020204000504070105ff05ff050a000105010701060d03000202040103010202
-04000504070105ff05ff050a000105010701060d03000202040103010202040005040701
-05ff05ff050a000105010701060d0300020204010301020204000504070105ff05ff050a
-000105010701060d0300020204010301020204000504070105ff05ff050a000105010701
-060d0300020204010301020204000504070105ff05ff050a000105010701060d03000202
-04010301020204000504070105ff05ff050a000105010701060d03000202040103010202
-04000504070105ff05ff050a000105010701060d03000202040103010202040005040701
-05ff05ff050a000105010701060d0300020204010301020204000504070105ff05ff050a
-000105010701060d0300020204010301020204000504070105ff05ff050a000105010701
-060d0300020204010301020204000504070105ff05ff050a000105010701060d03000202
-040103010202040005040701051201000511010005060100052601020503010205ff05aa
-000105010701060d030002020401030102020400050407010512010005110100052d0100
-05020100050101000502010005ff05a9000105010701060d030002020401030102020400
-050407010500010005000101050301020503010105000100050101000502010005020102
-05020104050201020503010205020100050001010503010205040101050d010005010100
-05ff05ad000105010701060d030002020401030102020400050407010500010105010100
-050101000502010005010100050101010501010005020100050101000502010005030100
-0506010005020100050201000501010105010100050101000502010005030101050d0100
-0501010005ff05ad000105010701060d0300020204010301020204000504070105000100
-050501000502010005010100050201000501010005020100050101000507010005060100
-0502010005020100050101000502010005010100051601000502010305ff05aa00010501
-0701060d0300020204010301020204000504070105000100050501040501010005020100
-050101000502010005010100050701000506010005020100050201000501010005020100
-0502010205120100050301000502010005ff05a9000105010701060d0300020204010301
-020204000504070105000100050501000505010005020100050101000502010005010100
-050701000506010005020100050201000501010005020100050501000510010005040100
-0502010005ff05a9000105010701060d0300020204010301020204000504070105000100
-050501000502010005010100050101010501010005010101050101000502010005030100
-050601000502010005020100050101000502010005010100050201000503010105090100
-050501000502010005ff05a9000105010701060d03000202040103010202040005040701
-050001000506010205030101050001000502010105000100050201020505010105040100
-0503010205020100050201000502010205040101050901040502010205ff05aa00010501
-0701060d0300020204010301020204000504070105ff05ff050a000105010701060d0300
-020204010301020204000504070105ff05ff050a000105010701060d0300020204010301
-020204000504070105ff05ff050a000105010701060d0300020204010301020204000504
-070105ff05ff050a000105010701060d0300020204010301020204000504070105ff05ff
-050a000105010701060d0300020204010301020204000504070105ff05ff050a00010501
-0701060d0300020204010301020204000504070105ff05ff050a000105010701060d0300
-020204010301020204000504070105ff05ff050a000105010701060d0300020204010301
-020204000504070105ff05ff050a000105010701060d0300020204010301020204000504
-070105ff05ff050a000105010701060d0300020204010301020204000504070105ff05ff
-050a000105010701060d0300020204010301020204000504070105ff05ff050a00010501
-0701060d0300020204010301020204000504070105ff05ff050a000105010701060d0300
-020204010301020204000504070105ff05ff050a000105010701060d0300020204010301
-020204000504070105ff05ff050a000105010701060d0300020204010301020204000504
-070105ff05ff050a000105010701060d0300020204010301020204000504070105ff05ff
-050a000105010701060d0300020204010301020204000504070105ff05ff050a00010501
-0701060d030002020401030102020400050407010532010305ff05d3000105010701060d
-03000202040103010202040005040701050101020505010005090100051b010005ff05d6
-000105010701060d030002020401030102020400050407010503010005100100051b0100
-05ff05d6000105010701060d030002020401030102020400050407010503010005030102
-050201000500010105020100050101000503010205040101050a010005ff05d600010501
-0701060d0300020204010301020204000504070105030100050501000502010105010100
-0501010005000100050301000502010005030101050a010005ff05d6000105010701060d
-030002020401030102020400050407010503010005050100050201000502010005010101
-050401000514010005ff05d6000105010701060d03000202040103010202040005040701
-0503010005050100050201000502010005010101050501020511010005ff05d600010501
-0701060d0300020204010301020204000504070105030100050501000502010005020100
-0501010005000100050701000510010005ff05d6000105010701060d0300020204010301
-020204000504070105030100050501000502010005020100050101000501010005020100
-0502010005030101050a010005ff05d6000105010701060d030002020401030102020400
-050407010503010005050100050201000502010005010100050201000502010205040101
-050a010005ff05d6000105010701060d0300020204010301020204000504070105320103
-05ff05d3000105010701060d0300020204010301020204000504070105ff05ff050a0001
-05010701060d0300020204010301020204000504070105ff05ff050a000105010701060d
-0300020204010301020204000504070105ff05ff050a000105010701060d030002020401
-0301020204000504070105120100052a01000506010305ff05bf000105010701060d0300
-02020401030102020400050407010511010005040101050a010205030102050b01010502
-01000508010005ff05bf000105010701060d030002020401030102020400050407010510
-010005040100050101000508010005020100050101000502010005090100050101000502
-01000507010005ff05bf000105010701060d03000202040103010202040005040701050f
-01000505010005010100050c0100050501000509010005010100050301000506010005ff
-05bf000105010701060d03000202040103010202040005040701050e0100050601000501
-0100050c0100050501000509010005010100050401000505010005ff05bf000105010701
-060d03000202040103010202040005040701050d01000507010005010100050b01000504
-0101050a010005010100050501000504010005ff05bf000105010701060d030002020401
-03010202040005040701050e01000506010005010100050a010005070100050901000501
-0100050401000505010005ff05bf000105010701060d0300020204010301020204000504
-0701050f0100050501000501010005090100050801000509010005010100050301000506
-010005ff05bf000105010701060d03000202040103010202040005040701051001000504
-010005010100050301010502010005050100050201000503010105030100050101000502
-01000507010005ff05bf000105010701060d030002020401030102020400050407010511
-0100050401010504010105020104050201020504010105040101050201000508010005ff
-05bf000105010701060d0300020204010301020204000504070105120100052a01000506
-010305ff05bf000105010701060d0300020204010301020204000504070105ff05ff050a
-000105010701060d0300020204010301020204000504070105ff05ff050a000105010701
-060d0300020204010301020204000504070105ff05ff050a000105010701060d03000202
-04010301020204000504070105ff05ff050a000105010701060d03000202040103010202
-04000504070105ff05ff050a000105010701060d03000202040103010202040005040701
-05ff05ff050a000105010701060d0300020204010301020204000504070105ff05ff050a
-000105010701060d0300020204010301020204000504070105ff05ff050a000105010701
-060d0300020204010301020204000504070105ff05ff050a000105010701060d03000202
-04010301020204000504070105ff05ff050a000105010701060d03000202040103010202
-04000504070105ff05ff050a000105010701060d03000202040103010202040005040701
-05ff05ff050a000105010701060d0300020204010301020204000504070105ff05ff050a
-000105010701060d0300020204010301020204000504070105ff05ff050a000105010701
-060d0300020204010301020204000504070105ff05ff050a000105010701060d03000202
-04010301020204000504070105ff05ff050a000105010701060d03000202040103010202
-04000504070105ff05ff050a000105010701060d03000202040103010202040005040701
-05ff05ff050a000105010701060d03000202040103010202040005040701050201000530
-010005040100051401010509010205ff05aa000105010701060d03000202040103010202
-040005040701050201000536010005130100050d010005ff05aa000105010701060d0300
-020204010301020204000504070105000104050101000500010105030102050201000500
-0101050a01020502010005020100050201020502010405030101050b0100050401020505
-0100050301020503010205ff059c000105010701060d0300020204010301020204000504
-070105020100050301010501010005010100050201000501010105010100050801000502
-010005010100050201000504010005040100050501010509010405010100050201000504
-01000502010005020100050101000502010005ff059b000105010701060d030002020401
-030102020400050407010502010005030100050901000501010005020100050801000502
-010005020100050001000505010005040100051301000507010005040100050201000505
-01000502010005ff059b000105010701060d030002020401030102020400050407010502
-010005030100050601030501010005020100050801040503010005060100050401000513
-01000504010305040100050301020502010405ff059b000105010701060d030002020401
-030102020400050407010502010005030100050501000502010005010100050201000508
-010005060100050001000505010005040100051301000503010005020100050401000506
-01000501010005ff059f000105010701060d030002020401030102020400050407010502
-010005030100050501000502010005010101050101000508010005020100050101000502
-0100050401000504010005050101050b0100050301000502010005040100050201000502
-0100050101000502010005ff059b000105010701060d0300020204010301020204000504
-07010503010105010100050601030501010005000101050a010205020100050201000504
-01000505010105030101050b01000504010305040100050301020503010205ff059c0001
-05010701060d03000202040103010202040005040701051501000504010505ff05e80001
-05010701060d030002020401030102020400050407010515010005ff05f3000105010701
-060d030002020401030102020400050407010515010005ff05f3000105010701060d0300
-020204010301020204000504070105ff05ff050a000105010701060d0300020204010301
-020204000504070105ff05ff050a000105010701060d0300020204010301020204000504
-070105ff05ff050a000105010701060d0300020204010301020204000504070105ff05ff
-050a000105010701060d0300020204010301020204000504070105ff05ff050a00010501
-0701060d0300020204010301020204000504070105ff05ff050a000105010701060d0300
-020204010301020204000504070105ff05ff050a000105010701060d0300020204010301
-020204000504070105ff05ff050a000105010701060d0300020204010301020204000504
-070105ff05ff050a000105010701060d0300020204010301020204000504070105ff05ff
-050a000105010701060d0300020204010301020204000504070105ff05ff050a00010501
-0701060d0300020204010301020204000504070105ff05ff050a000105010701060d0300
-020204010301020204000504070105ff05ff050a000105010701060d0300020204010301
-020204000504070105ff05ff050a000105010701060d0300020204010301020204000504
-0701057301010597010105350101053501010540010105190101050b0101050401010516
-000105010701060d0300020204010301020204000504070105040100052a010005400100
-05540100052a010005160100052e0103050301000536010005440100050b010305010103
-050401000503010305040100050501000515000105010701060d03000202040103010202
-0400050407010503010005040101050a010205030102050b010105020100053f0100050a
-0100050d010205030102051b01000512010005040101050a010205030102050b01010502
-0100051501000519010205110100050601000512010205030102050b0100050c0100050c
-0100051a0100050b0102050b0100050b0100050701000504010005060100050401000505
-01000515000105010701060d030002020401030102020400050407010502010005040100
-0501010005080100050201000501010005020100050901000501010005020100053e0100
-050a0100050f010005050100051b01000511010005040100050101000508010005020100
-050101000502010005090100050101000502010005140100051b01000511010005060100
-0514010005050100050a0101050c0100050c010005190101050d0100050b0100050b0100
-05070100050401000506010005040100050501000515000105010701060d030002020401
-03010202040005040701050101000505010005010100050c010005050100050901000501
-010005030100050501010509010005000101050301020503010205190100050401020502
-010005000101050301020505010005050100050a01020502010105000100050301010500
-0100051001000505010005010100050c0100050501000509010005010100050301000513
-010005040102050201000502010005020102050501000511010005060100050401020503
-010205050100050501000509010005000100050c01000504010205020104050201020502
-0101050001000509010005000100050d01000503010205040100050b0100050701000504
-01000506010005040100050501000515000105010701060d030002020401030102020400
-05040701050001000506010005010100050c010005050100050901000501010005040100
-050401010509010105010100050101000502010005010100050201000518010005030100
-050201000501010105010100050101000502010005040100050501000509010005020100
-0501010005000100050001000501010005010101050f01000506010005010100050c0100
-050501000509010005010100050401000512010005030100050201000501010005020100
-050101000502010005040100051101000506010005030100050201000501010005020100
-0504010005050100050b0100050c01000503010005020100050301000503010005020100
-050101000500010005000100050a0100050d0100050201000502010005030100050b0100
-05070100050401000506010005040100050501000515000105010701060d030002020401
-0301020204000504070101000507010005010100050a010105050100050a010005010100
-05050100050f0100050501000502010005010100051a0101050401000505010005020100
-050101000502010005040100050501000509010005050100050001000500010005010100
-05020100050e01000507010005010100050b010005040101050a01000501010005050100
-050f01010504010005020100050101000502010005050100050401000511010005040101
-05040100050901000504010005050100050b0100050a0101050801000503010005030100
-05020100050101000500010005000100050a0100050d0100050201000508010105090100
-05070100050501010504010005050101050401010513000105010701060d030002020401
-03010202040005040701050001000506010005010100050c010005030100050b01000501
-010005040100051001000505010405010100051c01000504010205020100050201000501
-01040504010005050100050901000505010005000100050001000501010005020100050f
-01000506010005010100050a010005070100050901000501010005040100051201000503
-010405020100050001000503010305040100051101000506010005030100050601030504
-010005050100050b0100050c010005040103050301000503010005020100050101000500
-010005000100050a0100050d01000503010205040100050b010005070100050401000506
-010005040100050501000515000105010701060d03000202040103010202040005040701
-050101000505010005010100050c010005020100050c0100050101000503010005110100
-0505010005050100051c0100050701000501010005020100050101000508010005050100
-050901000505010005000100050001000501010005020100051001000505010005010100
-050901000508010005090100050101000503010005130100050301000506010005000100
-050201000502010005040100051101000506010005030100050501000502010005040100
-05050100050b0100050c0100050301000502010005030100050301000502010005010100
-0500010005000100050a0100050d01000506010005030100050b01000507010005040100
-0506010005040100050501000515000105010701060d0300020204010301020204000504
-070105020100050401000501010005030101050201000502010005010100050701010503
-010005010100050201000506010105090100050501000502010005010100050201000518
-010005030100050201000501010005020100050101000502010005040100050501000509
-010005020100050101000500010005000100050101000501010105030101050b01000504
-010005010100050301010502010005050100050201000503010105030100050101000502
-010005060101050b01000503010005020100050301000503010005020100050401000504
-0101050a0100050601000503010005020100050101000502010005040100050501000504
-010105040100050501010504010005030100050201000503010005030100050201000501
-010005000100050001000503010105040100050501010505010005020100050201000503
-010005050101050301000507010005040100050601000504010005050100051500010501
-0701060d0300020204010301020204000504070105030100050401010504010105030102
-050201040503010105040101050201000507010105090100050601020503010205190100
-050401020502010005020100050201020505010005050100050a01020502010005000100
-05000100050201010500010005030101050c010005040101050401010502010405020102
-05040101050401010502010005070101050b010005040102050401000504010305040100
-05040101050a010005060100050401020503010305040100050501000504010105020104
-050301010504010005040103050401010502010205020100050001000500010005030101
-050201040503010105050100050301020504010005050101050301000507010005040100
-0506010005040100050501000515000105010701060d0300020204010301020204000504
-070105040100052a0100054001000525010505190100050d0100052a010005090100050b
-010005220100050a01030503010005220100050c01000504010005220100050c01000512
-010005060100050301030501010305040100050301030504010005050100051500010501
-0701060d03000202040103010202040005040701057301010541010105430101050d0101
-051e010105140101051e0101050b010105060101051e0101050b01010511010105050101
-05110101050b0101050401010516000105010701060d0300020204010301020204000504
-070105ff05ff050a000105010701060d0300020204010301020204000504070105ff0506
-0101055f010105630101051501010521000105010701060d030002020401030102020400
-0504070105040100052a0100051d010005b401000506010005040100053e010005120100
-05070100052a0100051501000501010005180100051301000523000105010701060d0300
-02020401030102020400050407010503010005040101050a010205030102050b01010502
-0100051c0100051f010405280100053f010005030100051f01000506010005030102052d
-01020503010205050100051201000506010005040101050a010205030102050b01010502
-0100051401000501010005010103050c010105030100051301000523000105010701060d
-030002020401030102020400050407010502010005040100050101000508010005020100
-0501010005020100050901000501010005020100051b010005210100052a0100053f0100
-05030100051f010005050100050301000500010005000100052e01000505010005040100
-051301000505010005040100050101000508010005020100050101000502010005090100
-050101000502010005130100050101000501010005020100050a01000505010005130100
-0523000105010701060d0300020204010301020204000504070105010100050501000501
-0100050c0100050501000509010005010100050301000505010105120100052101000504
-010205040101050a010205030102050301010500010005020102050a0102050301020502
-010005000101050201000502010005020102050201000500010105080101050101010502
-0102050301010500010005030101050b0100050401000504010005000100050401010500
-0100050201020502010005000101050a0102050301020505010005050100050301000514
-0100050401000505010005010100050c0100050501000509010005010100050301000511
-010505000100050201000502010205040100050501000513010005040102050201000500
-01010503010205020100050201000501010005000101000105010701060d030002020401
-03010202040005040701050001000506010005010100050c010005050100050901000501
-010005040100050401010512010005210100050301000502010005030101050901000502
-010005010100050201000501010005010101050101000502010005080100050201000501
-010005020100050101010501010005010100050201000501010005020100050101010501
-010005070101050101010501010005020100050101000501010105030101050b0100050a
-010005000100050301000501010105010100050201000501010105010100050801000502
-01000501010005020100050401000505010005190100050301000506010005010100050c
-010005050100050901000501010005040100051101000501010005010100050201000501
-010005020100050101040503010005130100050301000502010005010101050101000501
-0100050201000501010005020100050101010501000105010701060d0300020204010301
-020204000504070101000507010005010100050a010105050100050a0100050101000505
-010005180100052101000503010005020100050f01000505010005020100050101000502
-010005010100050201000508010005050100050201000501010005050100050201000501
-01000502010005010100050b01000500010105000100050101000505010005020100050f
-0101050c0102050201000502010005010100050201000501010005020100050801000509
-0100050401000505010005170101050301000507010005010100050a010105050100050a
-01000501010005050100050f010005010100050201030502010005020100050301000506
-0101050f0101050401000502010005010100050201000501010005050100050201000501
-01000502000105010701060d030002020401030102020400050407010500010005060100
-05010100050c010005030100050b01000501010005040100051901000521010005030100
-05020100050f010005050100050201000501010005020100050101040509010205020104
-0501010005060100050001000502010405010100050b0100050001010500010005020102
-050201000502010005110100050c01000500010005010100050201000501010405010100
-050201000508010005060103050401000505010005190100050301000506010005010100
-050c010005030100050b01000501010005040100050f0105050101000501010005020104
-050301000505010005130100050301040501010005020100050201020502010005020100
-050101000502000105010701060d03000202040103010202040005040701050101000505
-010005010100050c010005020100050c01000501010005030100053d0100050301000502
-0100050f0100050501000502010005010100050201000501010005100100050101000505
-010005060100050001000502010005050100050b01000503010005050100050101000502
-010005110100050c01000500010005010100050201000501010005050100050201000508
-01000505010005020100050401000505010005190100050401000505010005010100050c
-010005020100050c01000501010005030100051101000501010005020100050201000501
-010005070100050501000513010005030100050501000502010005050100050101000502
-0100050101000502000105010701060d0300020204010301020204000504070105020100
-050401000501010005030101050201000502010005010100050701010503010005010100
-050201000506010105350100050301000502010005030101050901000502010005010100
-050201000501010005010101050101000502010005080100050201000501010005020100
-0501010005070100050301000502010005010100050b0100050301000501010005020100
-050101000501010105030101050b0100050a010005000100050001000501010005010101
-050101000502010005010100050201000508010005020100050101000502010005040100
-05050100050b0101050b0100050501000504010005010100050301010502010005020100
-050101000507010105030100050101000502010005060101050901000501010005020100
-050201000501010005020100050301000505010005050101050b01000503010005020100
-050101000502010005010100050201000501010005010101050101000502000105010701
-060d03000202040103010202040005040701050301000504010105040101050301020502
-01040503010105040101050201000507010105120100052101000504010205040101050a
-010205030102050301010500010005020102050a01020503010205020100050701000504
-010205020100050b01000503010005020102050301010500010005030101050b0100050b
-010205030101050001000502010205020100050201000509010205030103050401000505
-0100050b0101050b01000506010005040101050401010503010205020104050301010504
-010105020100050701010509010005010100050201000502010005020102050401000505
-010005050101050b01000504010205020100050201000502010205030101050001000501
-01000502000105010701060d0300020204010301020204000504070105040100052a0100
-057501050544010005110100050c010005070100050e010505270100050b010005070100
-052a0100050901000527010005060100050b01000523000105010701060d030002020401
-0301020204000504070105ee01000502010005120101050f010005020100053a0101050d
-0101053a01010526010105050101050d01010521000105010701060d0300020204010301
-020204000504070105ef01020526010205ed000105010701060d03000202040103010202
-04000504070105730101052e0101058d01010504010105cc000105010701060d03000202
-04010301020204000504070105040100052a010005400100050401000501010005260100
-059101000505010005cb000105010701060d030002020401030102020400050407010503
-010005040101050a010205030102050b010105020100053f010005040100050101000501
-0103050c010105110100051501000509010205260102050c0100050b0100052001020504
-01000505010005cb000105010701060d0300020204010301020204000504070105020100
-050401000501010005080100050201000501010005020100050901000501010005020100
-053e010005040100050101000501010005020100050a01000513010005150100050b0100
-052801000519010005220100050401000505010005cb000105010701060d030002020401
-03010202040005040701050101000505010005010100050c010005050100050901000501
-010005030100050501010509010005000101050301020503010205190100050301050500
-010005020100050201020504010005130100050301010500010005030102050301010500
-01000501010005020100050401000503010205110102050201000500010105050100050a
-010205020100050001010502010405020102050201000500010105020100050001010503
-010205050100050401000505010005cb000105010701060d030002020401030102020400
-05040701050001000506010005010100050c010005050100050901000501010005040100
-050401010509010105010100050101000502010005010100050201000518010005040100
-050101000501010005020100050101000502010005010104051101000503010005000100
-050001000501010005020100050101000501010105010100050201000504010005020100
-05020100050f010005020100050101010501010005040100050c01000502010105010100
-050301000503010005020100050101010501010005010101050101000501010005020100
-05040100050401000505010005cb000105010701060d0300020204010301020204000504
-070101000507010005010100050a010105050100050a01000501010005050100050f0100
-050501000502010005010100051a01010504010005010100050201030502010005020100
-050301000511010105040100050001000500010005010100050201000501010005020100
-0501010005020100050401000502010005020100050f0100050201000501010005080100
-050c01000502010005020100050301000503010005020100050101000505010005020100
-0505010005040100050501010504010105c9000105010701060d03000202040103010202
-040005040701050001000506010005010100050c010005030100050b0100050101000504
-0100051001000505010405010100051c0100050201050501010005010100050201040503
-010005130100050301000500010005000100050101000502010005010100050201000501
-0100050201000504010005020104050f01040501010005080100050c0100050201000502
-010005030100050301040501010005050100050201000502010305040100050401000505
-010005cb000105010701060d030002020401030102020400050407010501010005050100
-05010100050c010005020100050c01000501010005030100051101000505010005050100
-051c01000503010005010100050201000502010005010100050701000513010005030100
-050001000500010005010100050201000501010005020100050101000502010005040100
-05020100051301000505010005080100050c010005020100050201000503010005030100
-050501000505010005020100050101000502010005040100050401000505010005cb0001
-05010701060d030002020401030102020400050407010502010005040100050101000503
-010105020100050201000501010005070101050301000501010005020100050601010509
-010005050100050201000501010005020100051801000503010005010100050201000502
-010005010100050201000503010005050101050b01000503010005000100050001000501
-010005020100050101000501010105010100050101010504010005020100050201000503
-010105090100050201000501010005080100050c01000502010005020100050301000503
-010005020100050101000505010005020100050101000502010005040100050401000505
-010005cb000105010701060d030002020401030102020400050407010503010005040101
-050401010503010205020104050301010504010105020100050701010509010005060102
-050301020519010005030100050101000502010005020100050201020504010005050101
-050b01000503010005000100050001000502010205030101050001000502010105000100
-050401000503010205040101050a01020502010005080100050c01000502010005020100
-050401010502010205020100050501000502010005020103050401000504010005050100
-05cb000105010701060d0300020204010301020204000504070105040100052a01000540
-010005220100050b010005300100051d0105053b01000505010005cb000105010701060d
-0300020204010301020204000504070105730101051e0101050d0101052c0101055e0101
-0504010105cc000105010701060d0300020204010301020204000504070105ff05ff050a
-000105010701060d0300020204010301020204000504070105ff05060101055f01010563
-0101051501010521000105010701060d0300020204010301020204000504070105040100
-052a0100051d010005b401000506010005040100053e01000512010005070100052a0100
-051501000501010005180100051301000523000105010701060d03000202040103010202
-0400050407010503010005040101050a010205030102050b010105020100051c0100051f
-010405280100053f010005030100051f01000506010005030102052d0102050301020505
-0100051201000506010005040101050a010205030102050b010105020100051401000501
-010005010103050c010105030100051301000523000105010701060d0300020204010301
-020204000504070105020100050401000501010005080100050201000501010005020100
-050901000501010005020100051b010005210100052a0100053f010005030100051f0100
-05050100050301000500010005000100052e010005050100050401000513010005050100
-050401000501010005080100050201000501010005020100050901000501010005020100
-05130100050101000501010005020100050a010005050100051301000523000105010701
-060d03000202040103010202040005040701050101000505010005010100050c01000505
-01000509010005010100050301000505010105120100052101000504010205040101050a
-010205030102050301010500010005020102050a01020503010205020100050001010502
-010005020100050201020502010005000101050801010501010105020102050301010500
-010005030101050b01000504010005040100050001000504010105000100050201020502
-010005000101050a01020503010205050100050501000503010005140100050401000505
-010005010100050c01000505010005090100050101000503010005110105050001000502
-010005020102050401000505010005130100050401020502010005000101050301020502
-0100050201000501010005000101000105010701060d0300020204010301020204000504
-0701050001000506010005010100050c0100050501000509010005010100050401000504
-010105120100052101000503010005020100050301010509010005020100050101000502
-010005010100050101010501010005020100050801000502010005010100050201000501
-010105010100050101000502010005010100050201000501010105010100050701010501
-01010501010005020100050101000501010105030101050b0100050a0100050001000503
-010005010101050101000502010005010101050101000508010005020100050101000502
-0100050401000505010005190100050301000506010005010100050c0100050501000509
-010005010100050401000511010005010100050101000502010005010100050201000501
-010405030100051301000503010005020100050101010501010005010100050201000501
-010005020100050101010501000105010701060d03000202040103010202040005040701
-01000507010005010100050a010105050100050a01000501010005050100051801000521
-01000503010005020100050f010005050100050201000501010005020100050101000502
-010005080100050501000502010005010100050501000502010005010100050201000501
-0100050b01000500010105000100050101000505010005020100050f0101050c01020502
-010005020100050101000502010005010100050201000508010005090100050401000505
-010005170101050301000507010005010100050a010105050100050a0100050101000505
-0100050f0100050101000502010305020100050201000503010005060101050f01010504
-010005020100050101000502010005010100050501000502010005010100050200010501
-0701060d03000202040103010202040005040701050001000506010005010100050c0100
-05030100050b0100050101000504010005190100052101000503010005020100050f0100
-050501000502010005010100050201000501010405090102050201040501010005060100
-050001000502010405010100050b01000500010105000100050201020502010005020100
-05110100050c010005000100050101000502010005010104050101000502010005080100
-05060103050401000505010005190100050301000506010005010100050c010005030100
-050b01000501010005040100050f01050501010005010100050201040503010005050100
-051301000503010405010100050201000502010205020100050201000501010005020001
-05010701060d03000202040103010202040005040701050101000505010005010100050c
-010005020100050c01000501010005030100053d01000503010005020100050f01000505
-010005020100050101000502010005010100051001000501010005050100050601000500
-01000502010005050100050b01000503010005050100050101000502010005110100050c
-010005000100050101000502010005010100050501000502010005080100050501000502
-0100050401000505010005190100050401000505010005010100050c010005020100050c
-010005010100050301000511010005010100050201000502010005010100050701000505
-010005130100050301000505010005020100050501000501010005020100050101000502
-000105010701060d03000202040103010202040005040701050201000504010005010100
-050301010502010005020100050101000507010105030100050101000502010005060101
-053501000503010005020100050301010509010005020100050101000502010005010100
-050101010501010005020100050801000502010005010100050201000501010005070100
-050301000502010005010100050b01000503010005010100050201000501010005010101
-05030101050b0100050a0100050001000500010005010100050101010501010005020100
-0501010005020100050801000502010005010100050201000504010005050100050b0101
-050b01000505010005040100050101000503010105020100050201000501010005070101
-050301000501010005020100050601010509010005010100050201000502010005010100
-05020100050301000505010005050101050b010005030100050201000501010005020100
-05010100050201000501010005010101050101000502000105010701060d030002020401
-030102020400050407010503010005040101050401010503010205020104050301010504
-0101050201000507010105120100052101000504010205040101050a0102050301020503
-01010500010005020102050a01020503010205020100050701000504010205020100050b
-01000503010005020102050301010500010005030101050b0100050b0102050301010500
-010005020102050201000502010005090102050301030504010005050100050b0101050b
-010005060100050401010504010105030102050201040503010105040101050201000507
-01010509010005010100050201000502010005020102050401000505010005050101050b
-010005040102050201000502010005020102050301010500010005010100050200010501
-0701060d0300020204010301020204000504070105040100052a01000575010505440100
-05110100050c010005070100050e010505270100050b010005070100052a010005090100
-0527010005060100050b01000523000105010701060d0300020204010301020204000504
-070105ee01000502010005120101050f010005020100053a0101050d0101053a01010526
-010105050101050d01010521000105010701060d03000202040103010202040005040701
-05ef01020526010205ed000105010701060d030002020401030102020400050407010573
-0101052e0101059401010504010105c5000105010701060d030002020401030102020400
-0504070105040100052a0100054001000504010005010100052601000598010005050100
-05c4000105010701060d030002020401030102020400050407010503010005040101050a
-010205030102050b010105020100053f0100050401000501010005010103050c01010511
-01000515010005090102051e0100050d010205030102050d0100050b0101051001020504
-0100050501000505010005c4000105010701060d03000202040103010202040005040701
-050201000504010005010100050801000502010005010100050201000509010005010100
-05020100053e010005040100050101000501010005020100050a01000513010005150100
-050b0100051e0100050f010005050100050d0100050a0100051401000504010005050100
-0505010005c4000105010701060d03000202040103010202040005040701050101000505
-010005010100050c01000505010005090100050101000503010005050101050901000500
-010105030102050301020519010005030105050001000502010005020102050401000513
-010005030101050001000503010205030101050001000501010005020100050401000503
-0102051101020502010005000101050301020505010005050100050a0101050001000502
-0102050401000504010205020100050201000504010005020104050301000505010005c4
-000105010701060d03000202040103010202040005040701050001000506010005010100
-050c01000505010005090100050101000504010005040101050901010501010005010100
-050201000501010005020100051801000504010005010100050101000502010005010100
-050201000501010405110100050301000500010005000100050101000502010005010100
-050101010501010005020100050401000502010005020100050f01000502010005010101
-050101000501010005020100050401000505010005090100050101010501010005020100
-050101040501010005020100050101000502010005040100050401000505010005050100
-05c4000105010701060d0300020204010301020204000504070101000507010005010100
-050a010105050100050a01000501010005050100050f0100050501000502010005010100
-051a01010504010005010100050201030502010005020100050301000511010105040100
-050001000500010005010100050201000501010005020100050101000502010005040100
-0502010005020100050f0100050501000502010005010100050201000504010005050100
-050901000502010005010100050201000503010005070100050101000502010005040100
-05040100050601010504010105c2000105010701060d0300020204010301020204000504
-0701050001000506010005010100050c010005030100050b010005010100050401000510
-01000505010405010100051c010005020105050101000501010005020104050301000513
-010005030100050001000500010005010100050201000501010005020100050101000502
-010005040100050201040510010205020100050201000501010405040100050501000509
-010005020100050101040503010005040103050101000502010005040100050401000505
-01000505010005c4000105010701060d0300020204010301020204000504070105010100
-0505010005010100050c010005020100050c010005010100050301000511010005050100
-05050100051c010005030100050101000502010005020100050101000507010005130100
-050301000500010005000100050101000502010005010100050201000501010005020100
-050401000502010005170100050101000502010005010100050801000505010005090100
-050201000501010005070100050301000502010005010100050201000504010005040100
-050501000505010005c4000105010701060d030002020401030102020400050407010502
-010005040100050101000503010105020100050201000501010005070101050301000501
-010005020100050601010509010005050100050201000501010005020100051801000503
-010005010100050201000502010005010100050201000503010005050101050b01000503
-010005000100050001000501010005020100050101000501010105010100050101010504
-010005020100050201000503010105090100050201000501010005020100050101000502
-010005040100050501000509010005010101050101000502010005030100050301000502
-010005010100050101010504010005040100050501000505010005c4000105010701060d
-030002020401030102020400050407010503010005040101050401010503010205020104
-050301010504010105020100050701010509010005060102050301020519010005030100
-050101000502010005020100050201020504010005050101050b01000503010005000100
-050001000502010205030101050001000502010105000100050401000503010205040101
-050a01020502010005020100050201020505010005050100050a01010500010005020102
-050401000504010305020101050001000504010005050101050301000505010005c40001
-05010701060d0300020204010301020204000504070105040100052a0100054001000522
-0100050b010005300100052b0105053401000505010005c4000105010701060d03000202
-04010301020204000504070105730101051e0101050d0101052c01010565010105040101
-05c5000105010701060d0300020204010301020204000504070105ff05ff050a00010501
-0701060d0300020204010301020204000504070105ff05060101055f0101056301010515
-01010521000105010701060d0300020204010301020204000504070105040100052a0100
-051d010005b401000506010005040100053e01000512010005070100052a010005150100
-0501010005180100051301000523000105010701060d0300020204010301020204000504
-07010503010005040101050a010205030102050b010105020100051c0100051f01040519
-010105040100050301020540010005030100051f01000506010005030102052d01020503
-010205050100051201000506010005040101050a010205030102050b0101050201000514
-01000501010005010103050c010105030100051301000504010205050100050b01000507
-000105010701060d03000202040103010202040005040701050201000504010005010100
-05080100050201000501010005020100050901000501010005020100051b010005210100
-051a0100050d01000540010005030100051f010005050100050301000500010005000100
-052e01000505010005040100051301000505010005040100050101000508010005020100
-050101000502010005090100050101000502010005130100050101000501010005020100
-050a0100050501000513010005060100051201000507000105010701060d030002020401
-03010202040005040701050101000505010005010100050c010005050100050901000501
-0100050301000505010105120100052101000504010205040101050b0100050401020505
-010005030102050a01020503010205020100050001010502010005020100050201020502
-010005000101050801010501010105020102050301010500010005030101050b01000504
-010005040100050001000504010105000100050201020502010005000101050a01020503
-010205050100050501000503010005140100050401000505010005010100050c01000505
-010005090100050101000503010005110105050001000502010005020102050401000505
-010005130100050601000503010205030102050201040505000105010701060d03000202
-040103010202040005040701050001000506010005010100050c01000505010005090100
-050101000504010005040101051201000521010005030100050201000503010105090104
-050401000505010005020100050201000508010005020100050101000502010005010101
-050101000501010005020100050101000502010005010101050101000507010105010101
-0501010005020100050101000501010105030101050b0100050a01000500010005030100
-050101010501010005020100050101010501010005080100050201000501010005020100
-050401000505010005190100050301000506010005010100050c01000505010005090100
-050101000504010005110100050101000501010005020100050101000502010005010104
-050301000513010005060100050501000502010005020100050301000507000105010701
-060d0300020204010301020204000504070101000507010005010100050a010105050100
-050a01000501010005050100051801000521010005030100050201000511010005060100
-050501000502010005020100050801000505010005020100050101000505010005020100
-050101000502010005010100050b01000500010105000100050101000505010005020100
-050f0101050c010205020100050201000501010005020100050101000502010005080100
-05090100050401000505010005170101050301000507010005010100050a010105050100
-050a01000501010005050100050f01000501010005020103050201000502010005030100
-05060101050f0101050701000505010005020100050701000507000105010701060d0300
-0202040103010202040005040701050001000506010005010100050c010005030100050b
-010005010100050401000519010005210100050301000502010005110100050601000505
-01000502010405090102050201040501010005060100050001000502010405010100050b
-0100050001010500010005020102050201000502010005110100050c0100050001000501
-010005020100050101040501010005020100050801000506010305040100050501000519
-0100050301000506010005010100050c010005030100050b01000501010005040100050f
-010505010100050101000502010405030100050501000513010005060100050501000503
-0102050401000507000105010701060d0300020204010301020204000504070105010100
-0505010005010100050c010005020100050c01000501010005030100053d010005030100
-050201000511010005060100050501000502010005100100050101000505010005060100
-050001000502010005050100050b01000503010005050100050101000502010005110100
-050c01000500010005010100050201000501010005050100050201000508010005050100
-05020100050401000505010005190100050401000505010005010100050c010005020100
-050c01000501010005030100051101000501010005020100050201000501010005070100
-0505010005130100050601000505010005060100050301000507000105010701060d0300
-020204010301020204000504070105020100050401000501010005030101050201000502
-010005010100050701010503010005010100050201000506010105350100050301000502
-010005030101050b01000506010005050100050201000502010005080100050201000501
-0100050201000501010005070100050301000502010005010100050b0100050301000501
-010005020100050101000501010105030101050b0100050a010005000100050001000501
-010005010101050101000502010005010100050201000508010005020100050101000502
-01000504010005050100050b0101050b0100050501000504010005010100050301010502
-010005020100050101000507010105030100050101000502010005060101050901000501
-010005020100050201000501010005020100050301000505010005050101050b01000506
-0100050501000502010005020100050301000507000105010701060d0300020204010301
-020204000504070105030100050401010504010105030102050201040503010105040101
-050201000507010105120100052101000504010205040101050b01000506010005050100
-05030102050a01020503010205020100050701000504010205020100050b010005030100
-05020102050301010500010005030101050b0100050b0102050301010500010005020102
-050201000502010005090102050301030504010005050100050b0101050b010005060100
-050401010504010105030102050201040503010105040101050201000507010105090100
-05010100050201000502010005020102050401000505010005050101050b010005060100
-0505010005030102050501010505000105010701060d0300020204010301020204000504
-070105040100052a0100057501050544010005110100050c010005070100050e01050527
-0100050b010005070100052a0100050901000527010005060100050b0100051e01040001
-05010701060d0300020204010301020204000504070105ee01000502010005120101050f
-010005020100053a0101050d0101053a01010526010105050101050d0101052100010501
-0701060d0300020204010301020204000504070105ef01020526010205ed000105010701
-060d0300020204010301020204000504070105730101052e010105ff0563000105010701
-060d0300020204010301020204000504070105040100052a010005400100050401000501
-010005260100052001030501010005010100058701000501010005ae000105010701060d
-030002020401030102020400050407010503010005040101050a010205030102050b0101
-05020100053f0100050401000501010005010103050c010105110100050a010005140100
-050401000501010005340102050401000503010405020102051001000508010005180100
-05010100050101000501010005ae000105010701060d0300020204010301020204000504
-070105020100050401000501010005080100050201000501010005020100050901000501
-010005020100053e010005040100050101000501010005020100050a010005130100050a
-010005140100050401000501010005330100050201000502010105030100050501000502
-0100050f0100052101000500010005000100050101000501010005ae000105010701060d
-03000202040103010202040005040701050101000505010005010100050c010005050100
-050901000501010005030100050501010509010005000101050301020503010205190100
-050301050500010005020100050201020504010005130100050401020502010005010100
-051101000504010005010100050a01020503010205020100050201000502010205030102
-050901000505010005000100050301000505010005020100050901020502010005000101
-050301020502010005020100050201020503010205020100050101000502010005010100
-05ae000105010701060d0300020204010301020204000504070105000100050601000501
-0100050c0100050501000509010005010100050401000504010105090101050101000501
-010005020100050101000502010005180100050401000501010005010100050201000501
-010005020100050101040511010005030100050201000501010005000100051201000512
-010005020100050101000502010005010100050201000501010005020100050101000502
-010005080100050701000503010305020100050201000508010005020100050101010501
-01000504010005020100050201000501010005020100050101000502010005bb00010501
-0701060d0300020204010301020204000504070101000507010005010100050a01010505
-0100050a01000501010005050100050f0100050501000502010005010100051a01010504
-010005010100050201030502010005020100050301000511010105040100050201000501
-010105130100051201000509010005010100050201000501010005020100050101000505
-010405010103050401000507010005020103050101040501010005050100050201000504
-01000502010005020100050501000501010005bf000105010701060d0300020204010301
-0202040005040701050001000506010005010100050c010005030100050b010005010100
-05040100051001000505010405010100051c010005020105050101000501010005020104
-050301000513010005030100050201000501010105130100051301020503010305020100
-050001000502010405020102050901000502010005030100050701000505010005080100
-0505010005020100050401000503010005000100050301030502010205bc000105010701
-060d03000202040103010202040005040701050101000505010005010100050c01000502
-0100050c01000501010005030100051101000505010005050100051c0100050301000501
-010005020100050201000501010005070100051301000503010005020100050101000500
-010005120100051601000501010005020100050201000500010005020100050901000508
-010005020100050301000503010005020100050501000508010005050100050201000504
-0100050301000500010005020100050201000505010005bb000105010701060d03000202
-040103010202040005040701050201000504010005010100050301010502010005020100
-050101000507010105030100050101000502010005060101050901000505010005020100
-050101000502010005180100050301000501010005020100050201000501010005020100
-0503010005050101050b01000503010005020100050101000501010005040101050a0100
-050d01010502010005020100050101000502010005030100050301000502010005010100
-050201000508010005020100050301000503010005020100050101000502010005080100
-050201000501010005020100050401000504010005030100050201000501010005020100
-0511010105a7000105010701060d03000202040103010202040005040701050301000504
-010105040101050301020502010405030101050401010502010005070101050901000506
-010205030102051901000503010005010100050201000502010005020102050401000505
-0101050b010005040102050201000502010005030101050a0100050d0101050301020503
-0103050301000504010205030102050a0102050201040502010205030102050a01020502
-010005020100050401000504010005040103050201020512010105a7000105010701060d
-0300020204010301020204000504070105040100052a01000540010005220100050b0100
-05140100050a01030597010005a7000105010701060d0300020204010301020204000504
-070105730101051e0101050d01010510010105a5010105a8000105010701060d03000202
-04010301020204000504070105ff05ff050a000105010701060d03000202040103010202
-04000504070105ff05ff050a000105010701000d03000202040103010202040005040701
-0507010005010100056401000501010005ff05950001050107010600000c030002020401
-03010202040005040701050701000501010005040100051201020521010105050100050b
-0100051001000501010005ff059500010501070106000001050807010300020204010301
-0202040005040701050701000501010005040100051401000520010005070100051d0100
-0501010005ff059500010501070106010001050707010300020204010301020204000504
-0701050701000501010005020104050201020503010205050100050a0101050001000502
-010205020100050001010504010005040101050001000509010205030102050201010500
-0100050201000501010005ff059500010501070106010001050607010600030002020401
-030102020400050407010510010005030100050201000501010005020100050401000509
-01000501010105010100050201000501010105010100050101040501010005010101050b
-0100050201000502010005010100050001000500010005ff059b00010501070106020001
-050507010600030002020401030102020400050407010510010005030100050201000501
-010005020100050401000509010005020100050101000502010005010100050201000503
-01000503010005020100050b01000506010005010100050001000500010005ff059b0001
-050107010602000105040701060103000202040103010202040005040701051001000503
-010005020100050101000502010005040100050901000502010005010104050101000502
-0100050301000503010005020100050b01000503010305010100050001000500010005ff
-059b00010501070106030001050307010601030002020401030102020400050407010510
-010005030100050201000501010005020100050401000509010005020100050101000505
-010005020100050301000503010005020100050b01000502010005020100050101000500
-01000500010005ff059b0001050107010603000105020701060203000202040103010202
-040005040701051001000503010005020100050101000502010005040100050901000501
-010105010100050201000501010005020100050301000503010005010101050301010505
-01000502010005020100050101000500010005000100050a010105ff058e000105010701
-060400010501070106020300020204010301020204000504070105110101050201020503
-010205050100050a01010500010005020102050201000502010005030100050401010500
-0100050301010505010005030103050101000500010005000100050a010105ff058e0001
-050107010604000105000701060303000202040103010202040005040701052901050505
-010005270100051a010005ff058e00010501070106050000070206030300020204010301
-0202040005040701053101000502010005240100050101000518010105ff058f00010501
-070106050000070106040300020204010301020204000504070100ff00ff000c05010701
-0606070106040300020204010301020204000504070000ff00ff000d0501070106060700
-060503000202040103010202040005ff05ff05150701000d030002020401030102020400
-05ff05ff05150700000e030002020401030102020400050207ff07ff0716050b03000202
-0401030102020400050207ff07ff07150000050b03000202040103010202040005020701
-060d0000060000ff0073067f0001060c0001050b03000202040103010202040005020701
-060b00010700060000ff00720700067f0003060a0001050b030002020401030102020400
-050207010609000207010600000105ff056f0701067f000506080001050b030002020401
-0301020204000502070106070003050007010600000105ff056f0701067f000105010003
-06060001050b030002020401030004040502070106050003050207010600000105ff056f
-0701067f00010503000306040001050b0300040403050502070106030003050407010600
-000105ff056f0701067f00010505000306020001050b0304040003010202040005020701
-06010003050607010600000105ff056f0701067f00010507000306000001050b03000202
-040103010202040005020705050807010600000105ff056f0701067f0001050807030001
-050b0300020204010301020204000502070106010703050607010600000105ff056f0701
-067f00010507070306000001050b03000202040103010202040005020701060307030504
-07010600000105ff056f0701067f00010505070306020001050b03000202040103010202
-04000502070106050703050207010600000105ff056f0701067f00010503070306040001
-050b0300020204010301020204000502070106070703050007010600000105ff056f0701
-067f00010501070306060001050b03000202040103010202040005020701060907040600
-000105ff056f0701067f0001070306080001050b03000202040103010202040005020701
-060b07020600000107ff0771067f00010701060a0001050b030002020401030102020400
-05020701060d07000600000007ff0772067f00000700060c0001050b0300020204010301
-020204000502070100ff00ff0014050b0300020204010301020204000502070000ff00ff
-0015050b03000202040103010202040005ff05ff052503000202040103010202040005ff
-05ff052503000202040103010202040005ff05ff052503000202040103010202040005ff
-05ff052503000202040103010202040005ff05ff052503000202040103010202040005ff
-05ff052503000202040103010202040005ff05ff052503000202040103010202040005ff
-05ff052503000202040103010202040005ff05ff052503000202040103010202040005ff
-05ff052503000202040103010202040005ff05ff052503000202040103010202040005ff
-05ff052503000202040103010202040003ff03ff0326020204010301021a0400030002ff
-02f304000300021a04010301021a0400030002ff02f304000300021a04010301021a0400
-030002ff02f304000300021a04010301041b030004ff04f40300041c030004ff04ff0430
-
-%%EndData
-end
-%%PageTrailer
-%%Trailer
-%%BoundingBox: 0 17 377 309
-%%EOF
diff --git a/lib/pman/doc/src/warning.gif b/lib/pman/doc/src/warning.gif
deleted file mode 100644
index 96af52360e..0000000000
--- a/lib/pman/doc/src/warning.gif
+++ /dev/null
Binary files differ
diff --git a/lib/pman/ebin/.gitignore b/lib/pman/ebin/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/pman/ebin/.gitignore
+++ /dev/null
diff --git a/lib/pman/info b/lib/pman/info
deleted file mode 100644
index 22003edcea..0000000000
--- a/lib/pman/info
+++ /dev/null
@@ -1,2 +0,0 @@
-group: tools
-short: A graphical process manager used to inspect Erlang processes.
diff --git a/lib/pman/priv/Makefile b/lib/pman/priv/Makefile
deleted file mode 100644
index a89278fd3a..0000000000
--- a/lib/pman/priv/Makefile
+++ /dev/null
@@ -1,58 +0,0 @@
-# ``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 via the world wide web 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 Utvecklings AB.
-# Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings
-# AB. All Rights Reserved.''
-#
-# $Id$
-#
-include $(ERL_TOP)/make/target.mk
-include $(ERL_TOP)/make/$(TARGET)/otp.mk
-
-include ../vsn.mk
-VSN = $(PMAN_VSN)
-
-# ----------------------------------------------------
-# Release directory specification
-# ----------------------------------------------------
-RELSYSDIR = $(RELEASE_PATH)/lib/pman-$(VSN)
-
-#
-# Macros
-#
-TOOLBAR_FILES = \
- pman.tool \
- pman.gif
-
-#
-# 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/pman/priv/pman.gif b/lib/pman/priv/pman.gif
deleted file mode 100644
index 4575a397d8..0000000000
--- a/lib/pman/priv/pman.gif
+++ /dev/null
Binary files differ
diff --git a/lib/pman/priv/pman.tool b/lib/pman/priv/pman.tool
deleted file mode 100644
index c04b7d00eb..0000000000
--- a/lib/pman/priv/pman.tool
+++ /dev/null
@@ -1,6 +0,0 @@
-{version,"0.1"}.
-{{tool,"Pman"},
- {start,{pman,start,[]}},
- {icon,"pman.gif"},
- {message,"Process Manager"},
- {html,"../doc/html/index.html"}}.
diff --git a/lib/pman/src/Makefile b/lib/pman/src/Makefile
deleted file mode 100644
index eb0413bdbc..0000000000
--- a/lib/pman/src/Makefile
+++ /dev/null
@@ -1,112 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1996-2012. 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=$(PMAN_VSN)
-
-# ----------------------------------------------------
-# Release directory specification
-# ----------------------------------------------------
-RELSYSDIR = $(RELEASE_PATH)/lib/pman-$(VSN)
-
-# ----------------------------------------------------
-# Common Macros
-# ----------------------------------------------------
-
-MODULES= \
- pman \
- pman_main \
- pman_shell \
- pman_relay \
- pman_relay_server \
- pman_module_info \
- pman_win \
- pman_buf \
- pman_buf_utils \
- pman_buf_buffer \
- pman_buf_converter \
- pman_buf_printer \
- pman_options \
- pman_process \
- pman_tool
-
-HRL_FILES= \
- assert.hrl \
- pman_buf.hrl \
- pman_options.hrl \
- pman_win.hrl
-
-ERL_FILES= $(MODULES:%=%.erl)
-
-TARGET_FILES = $(MODULES:%=$(EBIN)/%.$(EMULATOR)) $(APP_TARGET) $(APPUP_TARGET)
-
-APP_FILE = pman.app
-APP_SRC = $(APP_FILE).src
-APP_TARGET = $(EBIN)/$(APP_FILE)
-
-APPUP_FILE = pman.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
- $(vsn_verbose)sed -e 's;%VSN%;$(VSN);' $< > $@
-
-$(APPUP_TARGET): $(APPUP_SRC) ../vsn.mk
- $(vsn_verbose)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) $(ERL_FILES) $(HRL_FILES) $(TOOLBOX_FILES) "$(RELSYSDIR)/src"
- $(INSTALL_DIR) "$(RELSYSDIR)/ebin"
- $(INSTALL_DATA) $(TARGET_FILES) $(TARGET_TOOLBOX_FILES) "$(RELSYSDIR)/ebin"
-
-release_docs_spec:
-
diff --git a/lib/pman/src/assert.hrl b/lib/pman/src/assert.hrl
deleted file mode 100644
index ea3b68cd7c..0000000000
--- a/lib/pman/src/assert.hrl
+++ /dev/null
@@ -1,81 +0,0 @@
-%%
-%% %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%
-%%
-%%% Purpose : Assert macro
-
-
-%% ?ASSERT/2 - will simply return true if the first argument evaluates to true
-%% otherwise it will exit and output (via the error logger) the
-%% second string
-%%
-%% Arguments:
-%% Flag Expression that should evalueate to true or false
-%% String String to return as a part of the exit reason as well
-%% be to be sent to the error logger.
-%%
-%% Returns:
-%% true If the Flag expression evaluates to true
-%%
-%% Exits:
-%% {'EXIT', {assertion_failed, String}}
-%% If the Flag expression evaluates to something other than
-%% true.
-%%
-%% Usage notes:
-%% Please note that the Flag argument must be a valid expression that
-%% evaluates to true.
-%%
-%% Also, avoid any side effects in the Flag, as everything performed
-%% within the scope of the ?ASSERT macro will not be present when
-%% the code is not compiled with the debug_on flag.
-%%
-%% Side effects include the binding of a variable, sending of a
-%% message, etc.
-%%
-
--ifdef(debug_on).
--define(ASSERT(Flag, String),
- case Flag of
- true ->
- true;
- _ ->
- S2 =
- lists:flatten(
- io_lib:format(
- "=ASSERT====~nPid:~p, Module:~p, Line:~p~nTermination because assertion failed:~n~p",
- [self(),?MODULE, ?LINE,String])),
- error_logger:error_report(S2),
- exit({assertion_failed, String})
- end
- ).
-
--define(ALWAYS_ASSERT(String),
- S2 = lists:flatten(
- io_lib:format(
- "=ASSERT====~nPid:~p, Module:~p, Line:~p~nTermination because of unconditional assert:~n~p",
- [self(),?MODULE, ?LINE, String])),
- error_logger:error_report(S2),
- exit({always_assert, String})
- ).
--else.
--define(ASSERT(_Flag,_String), true).
--define(ALWAYS_ASSERT(_String), true).
--endif.
-
-
-
diff --git a/lib/pman/src/pman.app.src b/lib/pman/src/pman.app.src
deleted file mode 100644
index cc32a17296..0000000000
--- a/lib/pman/src/pman.app.src
+++ /dev/null
@@ -1,40 +0,0 @@
-%%
-%% %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, pman,
- [{description, "pman The Process Manager"},
- {vsn, "%VSN%"},
- {modules, [
- pman,
- pman_buf,
- pman_buf_buffer,
- pman_buf_converter,
- pman_buf_printer,
- pman_buf_utils,
- pman_main,
- pman_module_info,
- pman_options,
- pman_process,
- pman_relay,
- pman_relay_server,
- pman_shell,
- pman_tool,
- pman_win
- ]},
- {registered, []},
- {applications, [kernel, stdlib]}]}.
diff --git a/lib/pman/src/pman.appup.src b/lib/pman/src/pman.appup.src
deleted file mode 100644
index 7a435e9b22..0000000000
--- a/lib/pman/src/pman.appup.src
+++ /dev/null
@@ -1,19 +0,0 @@
-%%
-%% %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/pman/src/pman.erl b/lib/pman/src/pman.erl
deleted file mode 100644
index c8ea34b6b7..0000000000
--- a/lib/pman/src/pman.erl
+++ /dev/null
@@ -1,132 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-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%
-%%
-%%----------------------------------------------------------------------
-%%% Purpose : Exported API to the Pman graphical tool
-%%----------------------------------------------------------------------
-
--module(pman).
-
-
-%% ---------------------------------------------------------------
-%% The user interface exports
-%% ---------------------------------------------------------------
--export([start/0,
- start_notimeout/0,
- start/1,
- start_notimeout/1,
- proc/1,
- proc/3]).
-
-%% ---------------------------------------------------------------
-
-%% Timeout for the startup function.
-%% If no {initialization_complete, Pid} message has been received
-%% from the spawned init-function within ?STARTUP_TIMEOUT ms
-%% the start-function will call exit(Reason).
--define(STARTUP_TIMEOUT, 20000).
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% start/0
-
-start() ->
- start([], ?STARTUP_TIMEOUT). %Start w/o excluded modules
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% start_notimeout/0
-
-start_notimeout() ->
- start([],infinity). %Start w/o excluded modules
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% start/1
-
-start(LIModuleExcluded) ->
- start(LIModuleExcluded, ?STARTUP_TIMEOUT).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% start_notimeout/1
-
-start_notimeout(LIModuleExcluded) ->
- start(LIModuleExcluded, infinity).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% start/2 - Spawns the main Pman process, that will supervise
-%% all processes except those running code from the modules
-%% specified in LIModuleExcluded
-%%
-
-start(LIModuleExcluded, Timeout) ->
-
- OSModuleExcluded = ordsets:from_list(LIModuleExcluded),
-
- PidInit = spawn(pman_main, init, [self(), OSModuleExcluded]),
-
- %% Wait for a initialization completion message from
- %% the spawned process before returning its Pid.
- %%
-
- receive
- {initialization_complete, PidInit} ->
- PidInit
-
- %% (Conditional) Failure to start within the time limit will
- %% result in termination
-
- after
- Timeout ->
- exit(PidInit, kill),
- exit({startup_timeout, ?MODULE})
- end.
-
-
-
-%% ---------------------------------------------------------------
-%% If we want to trace just one process, we can call proc, giving it
-%% either the Pid, or the registered name, (Global or local).
-%%
-%% (???)
-%% Note that this function must not be used internally to create a
-%% trace window, since it is assumed that it is started from any
-%% process (esp. the shell) it will not have any supervisor process
-%% that shall be notified about it's exit/death.
-%%
-%% Returns: Trace loop Pid|udefined
-
-%% ---------------------------------------------------------------
-
-
-proc(undefined) ->
- exit(undefined);
-
-proc({shell,P}) when is_pid(P) ->
- pman_shell:start({{shell,P},self()});
-
-proc(P) when is_atom(P) ->
- proc(whereis(P));
-
-proc({global, N}) ->
- proc(global:whereis_name(N));
-
-proc(P) when is_pid(P) ->
- pman_shell:start({P,self()}).
-
-proc(X,Y,Z) ->
- proc(c:pid(X,Y,Z)).
-
diff --git a/lib/pman/src/pman_buf.erl b/lib/pman/src/pman_buf.erl
deleted file mode 100644
index d56ce184fa..0000000000
--- a/lib/pman/src/pman_buf.erl
+++ /dev/null
@@ -1,117 +0,0 @@
-%%
-%% %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%
-%%
-%%%----------------------------------------------------------------------
-%%% Purpose : This module is the exported interface to the buffering mechanism
-%%% used in PMAN to prevent the trace output to congest
-%%% the system.
-%%%
-%%% This module depends on the modules (direct or indirectly):
-%%% pman_buf.hrl
-%%% pman_buf_utils.erl
-%%% pman_buf_buffer.erl
-%%% pman_buf_converter.erl
-%%% pman_buf_printer.erl
-%%%
-%%%----------------------------------------------------------------------
-
--module(pman_buf).
-
-%%-compile(export_all).
--export([start/2,clear/3]).
-
-
--include("pman_buf.hrl").
-
-
-%% The buffering mechanism consists of three processes that
-%% work in a chain to prevent the process monitor from congesting
-%% output mechanism.
-%%
-%% Messages are buffered in the CONVERTER process before they are sent to
-%% to the BUFFER process where they are formatted before they are finally
-%% sent to either a file or the PRINTER process. The printer process
-%% outputs the messages in the graphical user interface.
-%%
-%%
-%%
-%% --> CONVERTER --> BUFFER --> PRINTER --> gui
-%% |
-%% |
-%% |
-%% V
-%%
-%% file
-%%
-
-
-
-
-
-%% ----------------------------------------------------------------
-%% The amount of data produced by a trace message may be large, and
-%% cause the run time system to run out of memory. To avoid this,
-%% the task of storing, cutting buffers, formating data and printing
-%% it is performed by three processes: The buffer, the converter and
-%% the printer.
-%%
-%% The converter accepts the raw data, a list
-%% of {trace,Msg} tuples. Having max priority, it assures that the
-%% amount of raw data stored never excedes ?BUFF_SIZE messages.
-%% (With the exception of the last batch received, which assures that
-%% the last trace message printed is never a buffer cut message.)
-%% Whenever there is space available in the buffer process, (The
-%% Buffer process stores max. ?BUFF_SIZE converted messages),
-%% the buffer asks for more unconverted messages, and ?PRINT_LEN messages
-%% are sent. They are converted by the buffer, and added to the list
-%% of messages to be sent.
-
-%% The printer process requests formatted messages from the buffer,
-%% and in chuncs of ?MAX_OUTPUT sends them to the buffer. If traces
-%% are to be dumped on file, due to the max priority, such is handled
-%% in the converter, and buffers are not cut.
-%%
-
-
-%% ---------------------------------------------------------------
-%% Initializes the buffering mechanism, which consist of three
-%% processes, each involved with a phase of the formattation and
-%% output of data to the process windows.
-
-start(Editor, FileName) ->
- Buffer_Pid = spawn_link(pman_buf_buffer,init,[Editor]),
- Converter_Pid =
- spawn_link(pman_buf_converter,init,[Buffer_Pid, FileName]),
- Buffer_Pid!{converter_pid, Converter_Pid},
- #buffer{converter=Converter_Pid,buffer=Buffer_Pid}.
-
-
-
-%% ---------------------------------------------------------------
-%% Kills the converter and the clears the buffer with formated data
-%% starting a new converter.
-
-clear(Buff,String, FileName) ->
- exit(Buff#buffer.converter,win_killed),
- Converter_Pid=spawn_link(pman_buf_converter,init,[Buff#buffer.buffer,
- FileName]),
- Buff#buffer.buffer!{clear,String,Converter_Pid },
- Buff#buffer{converter = Converter_Pid}.
-
-
-
diff --git a/lib/pman/src/pman_buf.hrl b/lib/pman/src/pman_buf.hrl
deleted file mode 100644
index 3f25dcc5f0..0000000000
--- a/lib/pman/src/pman_buf.hrl
+++ /dev/null
@@ -1,29 +0,0 @@
-%%
-%% %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%
-%%
-
-%%-compile(export_all).
-%%-export([Function/Arity, ...]).
-
--define(BUFF_SIZE,1000).
--define(EDITOR_MAX,10000).
--define(PRINT_LEN,50).
--define(MAX_OUTPUT,5000).
-
-
--record(buffer,{buffer,converter}).
diff --git a/lib/pman/src/pman_buf_buffer.erl b/lib/pman/src/pman_buf_buffer.erl
deleted file mode 100644
index ad92eb1f3e..0000000000
--- a/lib/pman/src/pman_buf_buffer.erl
+++ /dev/null
@@ -1,102 +0,0 @@
-%%
-%% %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%
-%%
-%%%----------------------------------------------------------------------
-%%% Purpose : The purpouse of the buffer process is to take
-%%% care of the data that is received by the converter
-%%% process and pass it on to the printer process in chunks
-%%% that can be handled.
-%%%
-%%% This module is a part of the buffering system, and
-%%% should not be used except through the API defined
-%%% in the pman_buf module.
-%%%
-%%%----------------------------------------------------------------------
-
--module(pman_buf_buffer).
-
-%%-compile(export_all).
--export([init/1]).
-
--include("pman_buf.hrl").
-
-
-
-%%
-%% Initialization function for the buffer process.
-%% To be started with spawn from the calling process.
-%%
-
-init(Editor) ->
- Printer_pid = spawn_link(pman_buf_printer,init,[Editor,self()]),
- receive
- {converter_pid,Pid} ->
- Pid!{buffer,accept},
- buffer_loop([],0,0,Printer_pid,Pid)
- end.
-
-
-
-%%
-%% Receive loop for the buffer process.
-%%
-
-buffer_loop(Buffer,Size,Acc,Printer,Converter) ->
- receive
- {save_buffer,Name} ->
- Printer!{save_buffer,Name},
- buffer_loop(Buffer,Size,Acc,Printer,Converter);
- {raw,Raw,Length} -> %%output to editor
- New_Size = Size + Length,
- if New_Size < ?BUFF_SIZE ->
- Converter!{buffer,accept};
- true -> ok
- end,
- Print = lists:map(fun(X) -> pman_buf_utils:textformat(X) end, Raw),
- New_Buff = lists:append(Buffer,Print),
- buffer_loop(New_Buff,New_Size,Acc,Printer,Converter);
- {clear,Text,N_Converter} ->
- Converter!{buffer,accept},
- Printer!clear,
- buffer_loop([Text],1,1,Printer,N_Converter);
- {printer,send} when Buffer /= [] ->
- if
- Acc > ?EDITOR_MAX ->
- Printer!clear,
- Printer !{buffer,"Cleared Buffer due to Size\n\n"},
- buffer_loop(Buffer,Size,1,Printer,Converter);
- true ->
- {Length,Rest,Print} = pman_buf_utils:split(Buffer,
- ?PRINT_LEN,
- 0,
- []),
- Printer ! {buffer,Print},
- New_Size = Size - Length,
- if New_Size < ?BUFF_SIZE ->
- Converter!{buffer,accept};
- true -> ok
- end,
- buffer_loop(Rest,New_Size,Acc+Length,Printer,Converter)
- end;
- {converter,file} ->
- Converter!{buffer,Buffer},
- self()!{raw,[to_file],1},
- buffer_loop([],0,Acc,Printer,Converter)
- end.
-
-
diff --git a/lib/pman/src/pman_buf_converter.erl b/lib/pman/src/pman_buf_converter.erl
deleted file mode 100644
index c8b3fe37aa..0000000000
--- a/lib/pman/src/pman_buf_converter.erl
+++ /dev/null
@@ -1,190 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. 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%
-%%
-%%----------------------------------------------------------------------
-%% Purpose : The purpouse of the converter process is to take
-%% care of the raw data that is received by the tracing
-%% process (a pman_shell process) and pass it on to
-%% the buffer process in chunks that can be handled.
-%%
-%% This module is a part of the buffering system, and
-%% should not be used except through the API defined
-%% in the pman_buf module.
-%%
-%%----------------------------------------------------------------------
-
--module(pman_buf_converter).
--compile([{nowarn_deprecated_function,{gs,start,0}}]).
-
-%%-compile(export_all).
--export([init/2]).
-
--include("pman_buf.hrl").
-
-
-%% ---------------------------------------------------------------
-%% Starts the process which received the raw data from the debugger,
-%% cuts and forwards it to the buffer in smaller chunks. High priority
-%% to avoid large message queues waiting to be processed.
-
-init(Buffer_Pid, FileName) ->
- process_flag(priority, max),
- converter_loop(Buffer_Pid,[],0,true,[], FileName).
-
-converter_loop(Buffer_Pid,Raw,Size,State,Last, FileName) ->
- receive
- {file,Shell} ->
- case init_file(lists:append(Raw,Last),
- FileName,
- Shell,
- Buffer_Pid) of
- true -> converter_loop(Buffer_Pid,
- [to_buffer],
- 1,
- State,
- [],
- FileName);
- false -> converter_loop(Buffer_Pid,
- Raw,
- Size,
- State,
- Last,
- FileName)
- end;
- {raw,Trace} ->
- {New_Raw,New_Size,New_State,New_Last} =
- converter_data(Trace, Buffer_Pid, Raw, Size, State, Last),
- converter_loop(Buffer_Pid,
- New_Raw,
- New_Size,
- New_State,
- New_Last,
- FileName);
- {buffer,accept} when Raw /= [] ->
- {Length,Rest,Print} = pman_buf_utils:split(Raw,?PRINT_LEN,0,[]),
- Buffer_Pid!{raw,Print,Length},
- converter_loop(Buffer_Pid,Rest,Size-Length,false,Last,FileName);
- {buffer,accept} when Last /= [] ->
- {New_Raw,New_Size,New_State,New_Last} =
- converter_data(Last,Buffer_Pid,Raw,Size,true,[]),
- converter_loop(Buffer_Pid,
- New_Raw,
- New_Size,
- New_State,
- New_Last,
- FileName);
- {buffer,accept} ->
- converter_loop(Buffer_Pid,Raw,Size,true,Last, FileName);
- {clear,Str} ->
- Buffer_Pid!{clear,Str},
- converter_loop(Buffer_Pid,[],0,State,Last,FileName)
- end.
-
-converter_data(Trace,Buffer_Pid,Raw,Size,State,Last) ->
- if
- ?BUFF_SIZE - Size > 0 ->
- {Len,Rest,New_Trace} = pman_buf_utils:split(Trace,
- ?BUFF_SIZE-Size,
- 0,[]),
- {New_Raw,New_Last} =
- case Rest of
- [] ->
- {lists:append(Raw,New_Trace),Last};
- [_|_] ->
- case Last of
- [] ->
- {lists:append(Raw,New_Trace),Rest};
- _ ->{lists:concat([Raw,New_Trace,[cut_buffer]]),
- Rest}
- end
- end,
- case State of true ->
- {Length,Cut_Raw,Print} = pman_buf_utils:split(New_Raw,
- ?PRINT_LEN,
- 0,[]),
- Buffer_Pid!{raw,Print,Length},
- {Cut_Raw,Size-Length,false,New_Last};
- _ ->
- {New_Raw,Size+Len,false,New_Last}
- end;
- true ->
- {Raw,Size,State,Trace}
- end.
-
-
-%% ---------------------------------------------------------------
-%% Initializes the environment for saving the trace to file. The
-%% actual saving is taken care of by the buffer process.
-
-init_file(Raw,FileName, Name,Buffer_Pid) ->
- case open_file(FileName, Name) of
- {false,T} ->
- pman_win:msg_win(T),
- false;
- {File,T} ->
- Buffer_Pid!{converter,file},
- pman_win:dialog_window(gs:start(),T),
- save_loop_init(File,Raw)
- end.
-
-open_file(FileName, _Shell) ->
-%% L = "pman_trace." ++ Shell,
- case file:open(FileName, [read,write]) of
- {error, _} ->
- Str = "ERROR: Could not create_file\n" ++ FileName,
- {false,Str};
- {ok,File} ->
- file:position(File, {eof, 0}),
- Str1 = " Appending trace log to file\n" ++ FileName,
- {File,Str1}
- end.
-
-
-save_loop_init(Fd,Raw) ->
- {Date, Time} = calendar:local_time(),
- {Year, Month, Day} = Date,
- {Hour, Minute, Second} = Time,
- io:format(Fd,"%%% ~n",[]),
- io:format(Fd,"%%% Trace output~n",[]),
- io:format(Fd,"%%% Started at ~4p-~2p-~2p ~2p:~2p:~2p~n",
- [Year, Month, Day,
- Hour, Minute, Second
- ]),
- io:format(Fd,"%%% ~n~n",[]),
-
- Print = lists:map(fun(X) -> pman_buf_utils:textformat(X) end, Raw),
- receive
- {buffer,Text} when is_list(Text) ->
- io:format(Fd,Text,[]),
- io:format(Fd,Print,[]),
- save_loop(Fd)
- end.
-
-save_loop(Fd) ->
- receive
- {raw,Raw} ->
- Print = lists:map(fun(X) -> pman_buf_utils:textformat(X) end, Raw),
- io:format(Fd,Print,[]),
- save_loop(Fd);
- buffer -> true
- end.
-
-
-
-
-
diff --git a/lib/pman/src/pman_buf_printer.erl b/lib/pman/src/pman_buf_printer.erl
deleted file mode 100644
index 3284c57559..0000000000
--- a/lib/pman/src/pman_buf_printer.erl
+++ /dev/null
@@ -1,91 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. 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(pman_buf_printer).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,start,0}}]).
-
-%%-compile(export_all).
--export([init/2]).
-
-
--include("pman_buf.hrl").
-
-%% ---------------------------------------------------------------
-%% Starts the part of the buffer which regulates the flow of data to
-%% be printed in the pid editors
-
-
-init(Editor,Buffer_pid) ->
- Buffer_pid!{printer,send},
- printer_loop(Editor,Buffer_pid).
-
-printer_loop(Editor,Buffer_pid)->
- receive
- {save_buffer,Name} ->
- gs:config(Editor,{save,Name}),
- TT = "Buffer saved in file\n" ++ Name,
- pman_win:dialog_window(gs:start(),TT),
- printer_loop(Editor,Buffer_pid);
- {buffer,Trace} ->
- case lists:flatlength(Trace) of
- Len when Len > ?MAX_OUTPUT ->
- printer_long(lists:flatten(Trace),Editor),
- Buffer_pid!{printer,send},
- printer_loop(Editor,Buffer_pid);
- _ ->
- Buffer_pid!{printer,send},
- print_trace(Editor,Trace),
- printer_loop(Editor,Buffer_pid)
- end;
- clear ->
- pman_win:configeditor(Editor, [{enable, true}]),
- pman_win:configeditor(Editor,clear),
- pman_win:configeditor(Editor, [{enable, false}]),
- printer_loop(Editor,Buffer_pid);
- _Other ->
- printer_loop(Editor,Buffer_pid)
- end.
-
-printer_long([],_) -> ok;
-printer_long(Trace,Editor) ->
- receive
- clear ->
- pman_win:configeditor(Editor, [{enable, true}]),
- pman_win:configeditor(Editor,clear),
- pman_win:configeditor(Editor, [{enable, false}])
- after 0 ->
- {_Length,Rest,Print} = pman_buf_utils:split(Trace,
- ?MAX_OUTPUT,
- 0,
- []),
- print_trace(Editor,Print),
- printer_long(Rest,Editor)
- end.
-
-
-
-%% ---------------------------------------------------------------
-%% Function which print trace messages on the window
-%% ---------------------------------------------------------------
-
-print_trace(Editor,Elements) ->
- pman_win:configeditor(Editor, [{enable, true}]),
- pman_win:configeditor(Editor, [{insert, {'end',Elements}}]),
- pman_win:configeditor(Editor, [{enable, false}]).
diff --git a/lib/pman/src/pman_buf_utils.erl b/lib/pman/src/pman_buf_utils.erl
deleted file mode 100644
index af3982665e..0000000000
--- a/lib/pman/src/pman_buf_utils.erl
+++ /dev/null
@@ -1,106 +0,0 @@
-%%
-%% %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(pman_buf_utils).
-
-%%-compile(export_all).
--export([textformat/1, split/4]).
-
-
-%% ---------------------------------------------------------------
-%% Funtion which format the trace message
-%% ---------------------------------------------------------------
-
-textformat(died) ->
- "\n\nProcess died\n";
-textformat({died, Pid}) ->
- io_lib:format("~w Process died.~n",[Pid]);
-textformat({shell_died, Old, New}) ->
- io_lib:format("~w Shell Process died. Restarted as ~w~n~n",[Old,New]);
-
-
-textformat(to_buffer) ->
- "\nAppending trace log to Buffer\n\n";
-textformat(to_file) ->
- "\nAppending trace log to File\n\n";
-textformat(cut_buffer) ->
- "\nCUT BUFFER\n\n";
-textformat({trace, From, 'receive', Msg}) ->
- io_lib:format("~w: rec ~s~n", [From,
- tuple_space(Msg)]);
-textformat({trace, From, send, Msg, To}) ->
- io_lib:format("~w: ! To: ~w Msg: ~s~n", [From,
- To,
- tuple_space(Msg)]);
-textformat({trace, From, call, Func}) ->
- io_lib:format("~w: call ~s~n",[From, ffunc(Func)]);
-textformat({trace, From, spawn, Data}) ->
- io_lib:format("~w: spawn ~p~n", [From, Data]);
-textformat({trace, From, link, Data}) ->
- io_lib:format("~w: link ~p~n", [From, Data]);
-textformat({trace, From, unlink, Data}) ->
- io_lib:format("~w: U-lnk ~p~n", [From, Data]);
-
-textformat({trace, From, Op, Data}) ->
- io_lib:format("~w: ~w ~p~n", [From, Op, Data]);
-
-textformat({print, Format, Args}) ->
- io_lib:format(Format, Args);
-textformat(Other) ->
- io_lib:format("~p~n",[Other]).
-
-
-
-
-
-ffunc({M,F, Argl}) ->
- io_lib:format("~w:~w(~s)", [M, F, fargs(Argl)]);
-ffunc(X) -> tuple_space(X).
-fargs([]) -> [];
-fargs([A]) -> tuple_space(A); %% last arg
-fargs([A|Args]) -> [tuple_space(A),", "|fargs(Args)].
-
-
-tuple_space(X) when is_tuple(X) -> print(size(X), X, "}");
-tuple_space(X) -> io_lib:format("~p",[X]).
-
-print(0 , _X, Buff) -> ["{"|Buff];
-print(1 , X, Buff) ->
- Str = tuple_space(element(1, X)),
- ["{",Str|Buff];
-print(Num, X, Buff) ->
- Str = tuple_space(element(Num, X)),
- print(Num-1, X, [", ",Str|Buff]).
-
-
-
-%% ----------------------------------------------------------------
-%% splits the list at element Size, returns Size, and the 2 lists
-%% If the list is not long enough, it returns {size(List),[],List}
-
-
-split([],_,Length,Buff) ->
- {Length,[],lists:reverse(Buff)};
-split(Rest,0,Length,Buff) ->
- {Length,Rest,lists:reverse(Buff)};
-split([L|List],Size,Length,Buff) ->
- split(List,Size-1,Length+1,[L|Buff]).
-
-
-
diff --git a/lib/pman/src/pman_main.erl b/lib/pman/src/pman_main.erl
deleted file mode 100644
index 2f51284293..0000000000
--- a/lib/pman/src/pman_main.erl
+++ /dev/null
@@ -1,789 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. 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(pman_main).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,read,2}}]).
-
-%% Main process and window
-
--export([init/2]).
-
--record(state, {win, % GS top window
- frame, % GS top frame
- grid, % GS process info grid
-
- size, % int() No. of displayed procs
- w, % int() Window width
- h, % int() Window height
-
- hide_system=false, % bool() Auto-hide system procs
- hide_new=false, % bool() Auto-hide new processes
-
- hide_modules, % ordset() Excluded modules
-
- hide_all=[], % [{node(), bool()}] Hide all
- hide_pids=[], % [{node(), Ordset}] Processes
- % explicitly to hide, per node
- show_pids=[], % [{node(), Ordset}] Processes
- % explicitly to show, per node
-
- shown_pids=[], % [{node(), Ordset}] Processes
- % actually shown, per node
-
- node, % node() Current node
- nodes=[], % [node()] All known nodes
-
- focus=1, % int() Grid line with focus
- focus_pid=undefined, % pid() | undefined Proc in focus
-
- noshell, % bool() Noshell mode on
-
- options}). % term() Trace options settings
-
-
--include("pman_win.hrl").
-
--define(REFRESH_TIME,5000).
-
--define(REQUIRES_FOCUS, % List of menus that should
- ['Trace Process', % be disabled if no process
- 'Kill', % is in focus
- 'Hide Selected Process',
- 'Module']).
-
-%%--Process init and loop-----------------------------------------------
-
-init(PidCaller, OSModuleExcluded) ->
- process_flag(trap_exit, true),
-
- %% Monitor all nodes in a distributed system
- case is_alive() of
-
- %% We have a distributed system
- true -> net_kernel:monitor_nodes(true);
-
- %% No distribution
- false -> ignore
- end,
- Nodes = [node()|nodes()],
-
- %% Create the main window
- %% For some extremely strange reason, the frame must be resized
- %% or the grid won't be visible...
- GridSize = length(processes()) + 61,
- {Window, Grid, Frame, Visible, W, H} =
- pman_win:pman_window(GridSize, OSModuleExcluded, Nodes),
- gse:resize(Frame, ?WIN_WIDTH, ?WIN_HEIGHT-?MENU_HEIGHT),
-
- Noshell = case pman_shell:find_shell() of
- noshell -> true;
- _ -> false
- end,
-
- State1 = #state{win=Window, frame=Frame, grid=Grid,
- size=Visible,
- w=W, h=H,
- hide_modules=OSModuleExcluded,
- node=node(),
- noshell=Noshell},
-
- State2 = lists:foldl(fun(Node, State) -> add_node(Node, State) end,
- State1,
- Nodes),
-
- State3 = refresh(State2),
-
- %% Notify caller that the process appears
- %% to have been started.
- PidCaller ! {initialization_complete, self()},
-
- %% Initiate a 'catch all' trace pattern so call tracing works
- erlang:trace_pattern({'_', '_', '_'}, true, [local]),
-
- %% Read default options file
- Options = restore_options(State3),
-
- loop(State3#state{options=Options}).
-
-add_node(Node, State) ->
- pman_win:add_menu(node, [Node], "Show"),
- State#state{hide_all=nl_update(Node, false, State#state.hide_all),
- hide_pids=nl_update(Node, [], State#state.hide_pids),
- show_pids=nl_update(Node, [], State#state.show_pids),
- shown_pids=nl_update(Node, [], State#state.shown_pids),
- nodes=[Node|State#state.nodes]}.
-
-%% Restore saved options from default file
-restore_options(State)->
- File = options_file(),
- case pman_options:read_from_file(File) of
- {ok, Options} ->
- Options;
- {error, ReasonStr, DefOptions} ->
- Parent = State#state.win,
- Msg = io_lib:format(
- "Problems reading default option file~n~s:~n~s",
- [File, ReasonStr]),
- tool_utils:notify(Parent, Msg),
- DefOptions
- end.
-
-options_file() ->
- {ok, [[Home]]} = init:get_argument(home),
- filename:join([Home, ".erlang_tools", "pman.opts"]).
-
-loop(State) ->
- receive
- {nodeup, Node} ->
- case nl_exists(Node, State#state.hide_all) of
- true ->
- pman_win:add_menu(node, [Node], "Show"),
- loop(State#state{nodes=[Node|State#state.nodes]});
- false ->
- loop(add_node(Node, State))
- end;
-
- {nodedown, Node} ->
- pman_win:remove_menu([Node]),
-
- Msg = io_lib:format("Node~n~p~ndown.", [Node]),
- spawn_link(tool_utils, notify, [State#state.win, Msg]),
-
- %% We remove Node from the list of nodes but not from
- %% the other lists of State, in case Node reappears later
- Nodes = lists:delete(Node, State#state.nodes),
- State2 = State#state{nodes=Nodes},
-
- %% If it was the shown node that went down,
- %% change overview to this node
- if
- Node==State#state.node ->
- State3 = execute_cmd({node,node()}, State2, [], []),
- loop(State3);
- true ->
- loop(State2)
- end;
-
- %% Ignore EXIT signals from help processes
- {'EXIT', _Pid, _Reason} ->
- loop(State);
-
- %% GS events
- {gs, _Obj, _Event, _Data, _Args} = Cmd ->
- case gs_cmd(Cmd, State) of
- stop ->
- exit(topquit);
- State2 ->
- loop(State2)
- end
-
- after ?REFRESH_TIME ->
- State2 = refresh(State),
- loop(State2)
- end.
-
-%% gs_cmd(Event, State) -> stop | State'
-gs_cmd(Event, State) ->
- case Event of
-
- %% --- Window manager commands ---
-
- %% Window is moved or resized
- {gs, _, configure, _Data, Args} ->
- configure(Args, State);
-
- %% Window closed, stop Pman
- {gs, _, destroy, _, _} ->
- stop;
-
- %% --- Dynamic commands ---
-
- %% Click in any object where the GS Data field is a 2-tuple
- {gs, _, click, Data, Args} when is_tuple(Data), size(Data)==2 ->
- execute_cmd(Data, State, [], Args);
-
- %% Single click in the grid sets focus to selected process
- {gs, _, click, {pidfunc,_,_}, [_,Row|_]} when is_integer(Row) ->
- focus(Row, State);
-
- %% Double click in the grid starts tracing of selected process
- {gs, _, doubleclick, {pidfunc,_,_}, [_Col,Row| _]} when is_integer(Row) ->
- execute_cmd('Trace Process', State, [], []);
-
- %% Click in named GS objects
- {gs, Cmd, click, Data, Args} when is_atom(Cmd);
- is_atom(element(1, Cmd)) ->
- execute_cmd(Cmd, State, Data, Args);
-
- %% --- Keyboard accelerator commands ---
-
- %% Move focus up and down
- {gs, _, keypress, [], ['Up',_,0,0]} ->
- execute_cmd(focus_previous, State, [], []);
- {gs, _, keypress, [], ['Down',_,0,0]} ->
- execute_cmd(focus_next, State, [], []);
-
- %% Other keyboard shortcuts
- {gs, _, keypress, [], ['Return',_,0,0]} ->
- execute_cmd('Trace Process', State, [], []);
- {gs, _, keypress, [], [Key,_,0,1]} ->
- execute_cmd(shortcut(Key), State, [], []);
-
- %% Ignore all other GS events
- _Other ->
- State
- end.
-
-%% Keyboard shortcuts
-
-%% File menu
-shortcut(o) -> 'Default Options';
-shortcut(e) -> 'Exit';
-shortcut(z) -> 'Exit';
-
-%% View menu
-shortcut(i) -> 'Hide All';
-shortcut(u) -> 'Hide Modules';
-shortcut(d) -> 'Hide Selected Process';
-shortcut(m) -> 'Module';
-shortcut(r) -> 'Refresh';
-
-%% Trace menu
-shortcut(k) -> 'Kill';
-shortcut(t) -> 'Trace Process';
-shortcut(s) -> 'Trace Shell';
-
-%% Help menu
-shortcut(h) -> 'Help';
-
-%% Keyboard command only
-shortcut(l) -> 'All Links';
-
-%% Process grid traversal
-shortcut(p) -> focus_previous;
-shortcut(n) -> focus_next;
-shortcut(_) -> dummy.
-
-%% configure([W,H,X,Y|_], State) -> State'
-%% Window has been moved or resized
-configure([W,H|_], State) ->
- if
- W==State#state.w, H==State#state.h ->
- ignore;
-
- true ->
- gse:resize(State#state.frame, W, H-?MENU_HEIGHT),
-
- Grid = State#state.grid,
- case abs(W - gs:read(Grid,width) - 6) of
- 0 ->
- ok; %% Avoid refreshing width if possible
- _Anything ->
- Cols = pman_win:calc_columnwidths(W-6),
- gs:config(Grid, Cols)
- end,
- pman_win:configwin(Grid, W, H)
- end,
- State.
-
-%% focus(Row, State) -> State'
-%% Row = int() Grid row
-%% User has selected a row in the grid.
-%% Row==1 means header row.
-focus(Row, State) ->
-
- Pid = case get_pid_in_focus(Row, State#state.grid) of
- {true, {pidfunc,Pid0,_}} ->
- pman_win:change_colour(State#state.grid,
- State#state.focus, Row),
- enable_pid_actions(),
- Pid0;
- false ->
- disable_pid_actions(),
- undefined
- end,
-
- State#state{focus=Row, focus_pid=Pid}.
-
-%% get_pid_in_focus(Row, Grid) -> {true, Data} | false
-%% Data = {pidfunc, Pid, Func}
-%% Func = {Mod,Name,Arity} | term()
-%% Return the data associated with the process in focus if there is one,
-get_pid_in_focus(1, _Grid) ->
- false;
-get_pid_in_focus(Row, Grid) ->
- case gs:read(Grid, {obj_at_row,Row}) of
- undefined -> false;
- GridLine ->
- Data = gs:read(GridLine, data),
- {true, Data}
- end.
-
-%% execute_cmd(Cmd, State, Data, Args) -> stop | State'
-
-%% Checkbutton "Hide System Processes"
-execute_cmd('Hide System', State, _Data, Args) ->
- [_Text, _Group, Bool|_Rest] = Args,
- State2 = State#state{hide_system=Bool},
- refresh(State2);
-
-%% Checkbutton "Auto-Hide New"
-execute_cmd('Auto Hide New', State, _Data, Args ) ->
- [_Text, _Group, Bool|_Rest] = Args,
- refresh(State#state{hide_new=Bool});
-
-%% File->Options...
-execute_cmd('Default Options', State, _Data, _Args) ->
- OldOptions = State#state.options,
- NewOptions = pman_options:dialog(State#state.win,
- "Default Trace Options",
- OldOptions),
- case NewOptions of
- {error, _Reason} ->
- State;
- Options ->
- State#state{options=Options}
- end;
-
-%% File->Save Options
-%% Save the set default options to the user's option file
-execute_cmd('Save Options', State, _Data, _Args)->
- Options = State#state.options,
- File = options_file(),
- Parent = State#state.win,
-
- case pman_options:save_to_file(Options, File) of
- ok ->
- tool_utils:notify(Parent, "Options saved to\n" ++ File);
- {error, ReasonStr} ->
- Msg = io_lib:format("Could not save options to~n~s:~n~s",
- [File, ReasonStr]),
- tool_utils:notify(Parent, Msg)
- end,
- State;
-
-%% File->Exit
-%% Exit the application
-execute_cmd('Exit', _State, _Data, _Args) ->
- stop;
-
-%% View->Hide All Processes
-execute_cmd('Hide All', State, _Data, _Args) ->
- Node = State#state.node,
- HideAll = nl_update(Node, true, State#state.hide_all),
- ShowPids = nl_del_all(State#state.node, State#state.show_pids),
- State2 = State#state{hide_all=HideAll, show_pids=ShowPids},
- refresh(State2, true);
-
-%% View->Hide modules...
-%% Opens a dialog where the user can select from a list of
-%% the loaded modules.
-%% The selected module is added to the list of hidden modules.
-execute_cmd('Hide Modules', State, _Data, _Args) ->
-
- %% Get all loaded modules that are not already hidden
- AllModules = lists:map(fun({Module, _File}) -> Module end,
- code:all_loaded()),
- ModulesSet = ordsets:subtract(ordsets:from_list(AllModules),
- State#state.hide_modules),
-
- %% Let the user select which of the loaded modules to exclude from
- %% the process overview
- Title = "Module selection",
- case pman_tool:select(State#state.win, Title, ModulesSet) of
- Modules when is_list(Modules) ->
- HideModules = ordsets:union(State#state.hide_modules,
- ordsets:from_list(Modules)),
- refresh(State#state{hide_modules=HideModules});
- cancelled -> State
- end;
-
-%% View->Hide Selected Process
-%% The process in focus should explicitly be hidden
-execute_cmd('Hide Selected Process', State, _Data, _Args) ->
- case State#state.focus_pid of
- undefined -> State;
- Pid ->
- Node = State#state.node,
- HidePids = nl_add(Node, Pid, State#state.hide_pids),
- ShowPids = nl_del(Node, Pid, State#state.show_pids),
- refresh(State#state{hide_pids=HidePids, show_pids=ShowPids})
- end;
-
-%% View->Module Info...
-%% Open window with module information.
-execute_cmd('Module', State, _Data, _Args) ->
- case get_pid_in_focus(State#state.focus, State#state.grid) of
- {true, {pidfunc, _Pid, {Module,_Name,_Arity}}} ->
- pman_module_info:start(Module);
- _ -> % false | {true, {pidfunc, Pid, Other}}
- ignore
- end,
- State;
-
-%% View->Refresh
-%% Refresh the main window.
-%% (Called automatically every ?REFRESH_TIME millisecond)
-execute_cmd('Refresh', State, _Data, _Args) ->
- refresh(State);
-
-%% View->Show All Processes
-%% Makes all processes visible except system processes and new
-%% processes, if those buttons are checked.
-%% Note: Also un-hides all hidden modules!
-execute_cmd('Show All', State, _Data, _Args) ->
- Node = State#state.node,
- HideAll = nl_update(Node, false, State#state.hide_all),
- HidePids = nl_del_all(State#state.node, State#state.hide_pids),
- ShowPids = nl_del_all(State#state.node, State#state.show_pids),
- State2 = State#state{hide_modules=ordsets:new(), hide_all=HideAll,
- hide_pids=HidePids, show_pids=ShowPids},
- refresh(State2, true);
-
-%% View->Show Processes...
-%% Open a list of all hidden processes, if the user selects one this
-%% process should explicitly be shown
-execute_cmd('Show Selected', State, _Data, _Args) ->
- Node = State#state.node,
-
- All = pman_process:r_processes(Node),
- Hidden = case nl_lookup(Node, State#state.hide_all) of
- true ->
- All;
- false ->
- Shown = nl_lookup(Node, State#state.shown_pids),
- ordsets:subtract(All, Shown)
- end,
-
- %% Selection window
- Title = "Select Processes to Show",
- Tuples =
- lists:map(fun(Pid) ->
- {M,F,A} = pman_process:function_info(Pid),
- Str = case pman_process:get_name(Pid) of
- " " ->
- io_lib:format("~p:~p/~p",
- [M, F, A]);
- Name ->
- io_lib:format("[~p] ~p:~p/~p",
- [Name, M, F, A])
- end,
- {Pid, Str}
- end,
- Hidden),
- case pman_tool:select(State#state.win, Title, Tuples) of
- Pids when is_list(Pids) ->
- HidePids = nl_del(Node, Pids, State#state.hide_pids),
- ShowPids = nl_add(Node, Pids, State#state.show_pids),
- refresh(State#state{hide_pids=HidePids,show_pids=ShowPids});
- cancelled -> State
- end;
-
-%% Trace->Kill
-execute_cmd('Kill', State, _Data, _Args) ->
- case State#state.focus_pid of
- Pid when is_pid(Pid) ->
- exit(Pid, kill);
- undefined ->
- ignore
- end,
- State;
-
-%% Trace->Selected Process
-execute_cmd('Trace Process', State, _Data, _Args) ->
- case State#state.focus_pid of
- Pid when is_pid(Pid) ->
- pman_shell:start({Pid,self()}, State#state.options);
- undefined ->
- ignore
- end,
- State;
-
-%% Trace->Shell Process
-execute_cmd('Trace Shell', State, _Data, _Args) ->
- case pman_shell:find_shell() of
- noshell ->
- State;
- Shell ->
- pman_shell:start({{shell,Shell},self()},
- State#state.options),
- State#state{noshell=false}
- end;
-
-%% Nodes->Show <Node>
-%% Change shown node
-execute_cmd({node,Node}, State, _Data, _Args) ->
- gse:config(State#state.win,
- [{title,lists:concat(["Pman: Overview on ", Node])}]),
- gse:disable(Node),
- catch gse:enable(State#state.node), % Menu may not exist any more
- refresh(State#state{node=Node}, true);
-
-%% Help->Help
-execute_cmd('Help', State, _Data, _Args) ->
- Win = State#state.win,
- HelpFile =
- filename:join([code:lib_dir(pman),"doc","html","index.html"]),
- tool_utils:open_help(Win, HelpFile),
- State;
-
-%% Keyboard shortcut Ctrl-l
-execute_cmd('All Links', State, _Data, _Args) ->
- case State#state.focus_pid of
- Pid when is_pid(Pid) ->
- case process_info(Pid, links) of
- {links, Pids} ->
- pman_shell:start_list(Pids, self(),
- State#state.options);
- undefined ->
- ignore
- end;
- undefined -> ignore
- end,
- State;
-
-%% Keyboard shortcuts for process grid traversal
-execute_cmd(focus_previous, State, _Data, _Args) ->
- focus(previous_row(State), State);
-execute_cmd(focus_next, State, _Data, _Args) ->
- focus(next_row(State), State);
-
-%% Keyboard combinations that are not shortcuts
-execute_cmd(dummy, State, _Data, _Args) ->
- State.
-
-%% Convenience functions for disabling/enabling menu items that require
-%% that a process is selected.
-disable_pid_actions() ->
- lists:foreach(fun(X) -> gse:disable(X) end, ?REQUIRES_FOCUS).
-
-enable_pid_actions() ->
- lists:foreach(fun(X) -> gse:enable(X) end, ?REQUIRES_FOCUS).
-
-%% refresh(State) -> State'
-%% refresh(State, ForceP) -> State'
-%% Refreshes the main window.
-refresh(State) ->
- refresh(State, false).
-refresh(#state{node=Node} = State, ForceP) ->
-
- %% Update shown processes
-
- %% First, get an ordset of all processes running at the current node
- All = pman_process:r_processes(Node),
-
- Shown = nl_lookup(Node, State#state.shown_pids),
- ExpShown = nl_lookup(Node, State#state.show_pids),
-
- {Show, State2} =
- case nl_lookup(Node, State#state.hide_all) of
-
- %% If the user has selected "Hide All Processes", only
- %% explicitly selected processes which still exist should
- %% be shown
- true ->
- {ordsets:intersection(ExpShown, All), State};
-
- false ->
- %% Compute which processes should be hidden according
- %% to the flags/menu items selected
- Hidden = hidden_pids(All, State),
-
- NotHidden = ordsets:subtract(All, Hidden),
-
- Show0 = case State#state.hide_new of
- %% If the user has selected "Auto-Hide New",
- %% then only those processes in NotHidden
- %% which are already shown, should be shown,
- %% together with explicitly selected
- %% processes which still exist
- true ->
- ordsets:union(
- ordsets:intersection(NotHidden,Shown),
- ordsets:intersection(ExpShown, All));
-
- %% Otherwise, show all processes in
- %% NotHidden, together with explicitly
- %% selected processes which still exist
- false ->
- ordsets:union(
- NotHidden,
- ordsets:intersection(ExpShown, All))
- end,
-
- ShownPids = nl_update(Node, Show0,
- State#state.shown_pids),
- {Show0, State#state{shown_pids=ShownPids}}
- end,
-
- NoOfHidden = length(All) - length(Show),
-
- if
- Show==Shown, not ForceP ->
- pman_win:update(NoOfHidden),
- State;
-
- true ->
- ShowInfo = display_info(Show),
- pman_win:update(State#state.grid, ShowInfo, NoOfHidden),
-
- %% Set the focus appropriately
- State3 = case State2#state.focus_pid of
- undefined ->
- disable_pid_actions(),
- State2;
- Pid ->
- Row = get_row(Pid, Show),
- focus(Row, State2)
- end,
-
- trace_shell_possible(State3),
-
- Size = length(Show),
- case Size of
- 1 -> gse:disable('Hide All');
- _ -> gse:enable('Hide All')
- end,
-
- State3#state{size=Size}
- end.
-
-%% hidden_pids(All, State) -> Hidden
-hidden_pids(All, State) ->
-
- %% Processes hidden because they are system processes
- HideSys = case State#state.hide_system of
- true ->
- lists:filter(
- fun(Pid) ->
- pman_process:is_system_process(Pid)
- end,
- All);
- false ->
- []
- end,
-
- %% Process hidden because they are executing code in a hidden module
- Mods = State#state.hide_modules,
- HideMod =
- lists:filter(fun(Pid) ->
- pman_process:is_hidden_by_module(Pid, Mods)
- end,
- All),
-
- %% Explicitly hidden processes
- HideExp = nl_lookup(State#state.node, State#state.hide_pids),
-
- %% All hidden processes
- ordsets:union([HideSys, HideMod, HideExp]).
-
-display_info(Pids) ->
- lists:map(fun(Pid) ->
- Func = pman_process:function_info(Pid),
- Name = pman_process:get_name(Pid),
- Msgs = pman_process:msg(Pid),
- Reds = pman_process:reds(Pid),
- Size = pman_process:psize(Pid),
- {Pid, Func, Name, Msgs, Reds, Size}
- end,
- Pids).
-
-get_row(Pid, List) ->
- get_row(Pid, List, length(List)+1).
-
-get_row(Pid, [Pid | _], Row) ->
- Row;
-get_row(Pid, [_ | T], Row) ->
- get_row(Pid, T, Row-1);
-get_row(_Pid, [], _Row) ->
- 1.
-
-next_row(#state{size=Size, focus=Row}) ->
- check_row(Row+1, Size).
-
-previous_row(#state{size=Size, focus=Row}) ->
- check_row(Row-1, Size).
-
-check_row(1, Size) ->
- Size+1;
-check_row(Row, Size) when Row==Size+2 ->
- 2;
-check_row(Row, _Size) ->
- Row.
-
-%% Check if node is running in noshell mode and if so disable the
-%% 'Trace Shell' menu option.
-trace_shell_possible(#state{noshell=true}) ->
- gse:disable('Trace Shell');
-trace_shell_possible(_) ->
- ok.
-
-%% -- Functions for manipulating {Node, Data} lists --
-
-%% nl_add(Node, Elem|Elems, NList) -> NList'
-nl_add(Node, Elems, [{Node, Ordset} | T]) when is_list(Elems) ->
- [{Node, ordsets:union(Elems, Ordset)} | T];
-nl_add(Node, Elem, [{Node, Ordset} | T]) ->
- [{Node, ordsets:add_element(Elem, Ordset)} | T];
-nl_add(Node, Elem, [H | T]) ->
- [H | nl_add(Node, Elem, T)];
-nl_add(Node, Elems, []) when is_list(Elems) ->
- [{Node, Elems}];
-nl_add(Node, Elem, []) ->
- [{Node, ordsets:add_element(Elem, ordsets:new())}].
-
-%% nl_del(Node, Elem|Elems, NList) -> NList'
-nl_del(Node, Elems, [{Node, Ordset} | T]) when is_list(Elems) ->
- [{Node, ordsets:subtract(Ordset, Elems)} | T];
-nl_del(Node, Elem, [{Node, Ordset} | T]) ->
- [{Node, ordsets:del_element(Elem, Ordset)} | T];
-nl_del(Node, Elem, [H | T]) ->
- [H | nl_del(Node, Elem, T)];
-nl_del(_Node, _Elem, []) ->
- [].
-
-%% nl_del_all(Node, NList) -> NList'
-nl_del_all(Node, [{Node, _Ordset} | T]) ->
- [{Node, ordsets:new()} | T];
-nl_del_all(Node, [H | T]) ->
- [H | nl_del_all(Node, T)];
-nl_del_all(_Node, []) ->
- [].
-
-%% nl_update(Node, Val, NList) -> NList'
-nl_update(Node, Val, [{Node, _OldVal} | T]) ->
- [{Node, Val} | T];
-nl_update(Node, Val, [H | T]) ->
- [H | nl_update(Node, Val, T)];
-nl_update(Node, Val, []) ->
- [{Node, Val}].
-
-%% nl_lookup(Node, NList) -> Val
-nl_lookup(Node, NList) ->
- {value, {_Node,Val}} = lists:keysearch(Node, 1, NList),
- Val.
-
-%% nl_exists(Node, NList) -> bool()
-nl_exists(Node, NList) ->
- case lists:keysearch(Node, 1, NList) of
- {value, _Val} ->
- true;
- false ->
- false
- end.
diff --git a/lib/pman/src/pman_module_info.erl b/lib/pman/src/pman_module_info.erl
deleted file mode 100644
index 944fd4a462..0000000000
--- a/lib/pman/src/pman_module_info.erl
+++ /dev/null
@@ -1,133 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. 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(pman_module_info).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,start,1}}]).
-
-%% Window with module information (View->Module Info...)
-
-%% External exports
--export([start/1]).
-
-%% Record for keeping the loop state for the
-%% module info process.
--record(state, {topwin, % GS identifier for top window
- editor, % GS identifier for editor
- module, % Name of the viewed module
- parent}). % Pid of the parent
-
-start(Module) ->
- Self = self(),
- spawn_link(fun() -> init(Module, Self) end).
-
-init(Module, Parent) ->
- process_flag(trap_exit, true),
-
- GS = gs:start([{kernel,true}]),
- Font = pman_win:font(GS),
-
- WinTitle = lists:flatten(io_lib:format("Pman - Module Info: ~p",
- [Module])),
- WinOptions = [{title,WinTitle}, {width,550}, {height, 400},
- {configure,true}, {keypress,true}, {destroy,true}],
- TopWindow = gse:window(GS, WinOptions),
-
- %% File menu
- MenuBar = gse:menubar(TopWindow, []),
- MBFile = gse:menubutton(MenuBar, [{label,{text," File "}},
- {font,Font}, {underline, 1}]),
- MenuFile = gse:menu(MBFile, []),
-
- gse:named_menuitem('Save buffer', MenuFile,
- [{label,{text,"Save buffer..."}},
- {font,Font}, {underline,0}]),
- gse:named_menuitem('Close', MenuFile,
- [{label,{text,"Close"}},
- {font,Font}, {underline,0}]),
-
- %% Output part of window
- Editor = gse:editor(TopWindow,
- [{font,Font},
- {x,3}, {y,40}, {width,546}, {height,348}]),
- gse:config(Editor, [{keypress,true},
- {insert,{'end',pman_win:module_data(Module)}}]),
- gse:config(Editor, [{enable,false},
- {vscroll,right}, {hscroll,bottom},
- {wrap,none}]),
- gse:map(TopWindow),
-
- State = #state{topwin=TopWindow, editor=Editor, module=Module,
- parent=Parent},
- loop(State).
-
-loop(State) ->
-
- receive
- %% Die if the parent dies
- {'EXIT', Pid, _Reason} when Pid==State#state.parent ->
- gse:destroy(State#state.topwin);
-
- %% Ignore other exit signals (from file dialog window)
- {'EXIT', _Pid, _Reason} ->
- loop(State);
-
- %% Window closed
- {gs, _TopWindow, destroy, [], []} ->
- ok;
-
- %% Window resized or moved
- {gs, _TopWindow, configure ,_Data, [W,H,_X,_Y|_]} ->
- gs:config(State#state.editor, [{width,W-3}, {height,H-40}]),
- loop(State);
-
- %% Close - destroy window and exit process
- {gs, 'Close', click, _Data, _Args} ->
- gse:destroy(State#state.topwin),
- ok;
-
- %% Save Buffer - make filename and save buffer to file
- {gs, 'Save buffer', click, _Data, _Args} ->
- save_buffer(State),
- loop(State);
-
- %% Keyboard accelerator commands
- {gs, _, keypress, [], [c,_,0,1]} -> % 'Close'
- gse:destroy(State#state.topwin),
- ok;
- {gs, _, keypress, [], [s,_,0,1]} -> % 'Save buffer'
- save_buffer(State),
- loop(State);
- {gs, _, keypress, _Data, _Args} ->
- loop(State)
- end.
-
-save_buffer(State) ->
- DefaultFile = atom_to_list(State#state.module) ++ ".module_info",
- Result = tool_utils:file_dialog([{type,save}, {file,DefaultFile}]),
- case Result of
- %% User selected a file, now save the result
- {ok, File, _Dir} ->
- gs:config(State#state.editor, {save,File}),
- Msg = "Module information saved in file\n" ++ File,
- tool_utils:notify(State#state.topwin, Msg);
-
- %% File dialog was cancelled in some way.
- {error, _Reason} ->
- ignore
- end.
diff --git a/lib/pman/src/pman_options.erl b/lib/pman/src/pman_options.erl
deleted file mode 100644
index 0765458fdc..0000000000
--- a/lib/pman/src/pman_options.erl
+++ /dev/null
@@ -1,395 +0,0 @@
-%%
-%% %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(pman_options).
-
-%% Window with trace options settings (File->Options...)
-
--export([dialog/3,
- read_from_file/1, save_to_file/2]).
-
--include("pman_options.hrl").
-
--define(WIN_WIDTH, 350).
--define(WIN_HEIGHT, 350).
-
--define(TOP_WINDOW, xx_pman_option_window_xx).
--define(TOP_FRAME, xx_pman_top_frame_xx).
-
--record(state, {resize_frame, % GS identifier for the main frame
- parent}). % Pid of parent
-
-%%--dialog/3------------------------------------------------------------
-%% Create a window, or return a value indicating that is is already
-%% created.
-
-dialog(ParentWin, Title, Options) ->
- Self = self(),
- Pid = spawn(fun() -> dialog(Self, ParentWin, Title, Options) end),
- receive
- {Pid, Value} ->
- Value % Options2 | {error,destroyed} | {error,cancelled}
- end.
-
-dialog(Parent, ParentWin, Title, Options) ->
-
- %% Check if the dialog has already been created, in that
- %% case, we can reuse it. Otherwise a new dialog is created.
- case gse:name_occupied(?TOP_WINDOW) of
- false -> make_window(ParentWin, Title);
- true -> ok
- end,
-
- %% Window has now been created or may be re-used
- update_window_from_options(Options),
-
- gse:resize(?TOP_FRAME, ?WIN_WIDTH, ?WIN_HEIGHT),
- gse:map(?TOP_WINDOW),
-
- loop(#state{resize_frame=?TOP_FRAME, parent=Parent}).
-
-loop(State) ->
- receive
- {gs, _Id, destroy, _Data, _Arg} ->
- State#state.parent ! {self(), {error,destroyed}};
-
- {gs, ?TOP_WINDOW, configure, _Data, [W, H |_]} ->
- gse:config(State#state.resize_frame,
- [{width,W},{height,H}]), % repack
- loop(State);
-
- {gs, ok_button, click, _Data, _Arg} ->
- Options = get_options_from_window(),
- gse:unmap(?TOP_WINDOW),
- State#state.parent ! {self(), Options};
-
- {gs, cancel_button, click, _Data, _Arg} ->
- gse:unmap(?TOP_WINDOW),
- State#state.parent ! {self(), {error,cancelled}};
-
- {gs, trace_spawn, click, _Data, [_Text,_,Value]} ->
- group_radio(Value, trace_spawn_all, [trace_spawn_all,
- trace_spawn_first]),
- loop(State);
-
- {gs, trace_link, click, _Data, [_Text,_,Value]} ->
- group_radio(Value, trace_link_all, [trace_link_all,
- trace_link_first]),
- loop(State);
-
- {gs, trace_in_window, click, _Data, _Arg} ->
- lists:foreach(fun(X) -> gse:disable(X) end,
- [trace_file, trace_file_browse]),
- loop(State);
-
- {gs, trace_to_file, click, _Data, [_Text,_,_Value]} ->
- lists:foreach(fun(X) -> gse:enable(X) end,
- [trace_file, trace_file_browse]),
- loop(State);
-
- {gs, trace_file_browse, click, _Data, _Arg} ->
- Result = tool_utils:file_dialog([{type,save},
- {file, "Untitled.log"}]),
- case Result of
- {error, _Reason} ->
- loop(State);
- {ok, Name,_State} ->
- gse:config(trace_file, [{text, Name}]),
- loop(State)
- end
- end.
-
--define(LBLOPTS, [{justify,left}, {align,w}]).
--define(BTNOPTS, [{justify,left}, {align,w}]).
-
-make_window(ParentWin, Title) ->
-
- Font = pman_win:font(),
-
- gse:named_window(?TOP_WINDOW, ParentWin, [{title,Title},
- {configure,true},
- {width, ?WIN_WIDTH},
- {height, ?WIN_HEIGHT}]),
-
- gse:named_frame(?TOP_FRAME, ?TOP_WINDOW,
- [{bw,3},
- {packer_x,[{stretch,1,175}, {stretch,1,175}]},
- {packer_y,[{stretch,3},{stretch,2},{stretch,1}]}]),
-
- F11 = gse:frame(?TOP_FRAME, [{bw,3},
- {pack_xy,{1,1}},
- {packer_x,[{stretch,1},
- {stretch,20},
- {stretch,2}]},
- {packer_y,[{stretch,2},
- {stretch,1},
- {stretch,1},
- {stretch,1},
- {stretch,1},
- {stretch,1},
- {stretch,1},
- {stretch,1}]}]),
-
- gse:label(F11,[{pack_xy,{2,1}},
- {label,{text,"Trace output options:"}},
- {font,Font} | ?LBLOPTS]),
-
- gse:named_checkbutton(trace_send, F11,
- [{pack_xy,{2,2}},
- {label,{text,"Trace send"}},
- {font,Font} | ?BTNOPTS]),
- gse:named_checkbutton(trace_receive, F11,
- [{pack_xy,{2,3}},
- {label,{text, "Trace receive"}},
- {font,Font} | ?BTNOPTS]),
- gse:named_checkbutton(trace_functions,F11,
- [{pack_xy,{2,4}},
- {label,{text, "Trace functions"}},
- {font,Font} | ?BTNOPTS]),
- gse:named_checkbutton(trace_events,F11,
- [{pack_xy,{2,5}},
- {label,{text, "Trace events"}},
- {font,Font} | ?BTNOPTS]),
-
- F21 = gse:frame(?TOP_FRAME, [{bw,3},
- {pack_xy,{2,1}},
- {packer_x,[{stretch,1},
- {stretch,2},
- {stretch,2},
- {stretch,20},
- {stretch,1}]},
- {packer_y,[{stretch,2},
- {stretch,1},
- {stretch,1},
- {stretch,1},
- {stretch,1},
- {stretch,1},
- {stretch,1},
- {stretch,1},
- {stretch,1}]}]),
-
- gse:label(F21, [{pack_xy,{{2,4},1}},
- {label,{text,"Inheritance options:"}},
- {font,Font} | ?LBLOPTS]),
-
- gse:named_checkbutton(trace_spawn, F21,
- [{pack_xy,{{2,4},2}},
- {data,trace_send},
- {label,{text,"Inherit on spawn"}},
- {font,Font} | ?BTNOPTS]),
- gse:named_radiobutton(trace_spawn_all, F21,
- [{pack_xy,{{3,4},3}},
- {group,spawn},
- {data,trace_receive},
- {label,{text, "All spawns"}},
- {font,Font} | ?BTNOPTS]),
- gse:named_radiobutton(trace_spawn_first, F21,
- [{pack_xy,{{3,4},4}},
- {group,spawn},
- {data,trace_receive},
- {label,{text,"First spawn only"}},
- {font,Font} | ?BTNOPTS]),
- gse:named_checkbutton(trace_link, F21,
- [{pack_xy,{{2,4},6}},
- {data,trace_send},
- {label,{text,"Inherit on link"}},
- {font,Font} | ?BTNOPTS]),
- gse:named_radiobutton(trace_link_all, F21,
- [{pack_xy,{{3,4},7}},
- {group,link},
- {data,trace_receive},
- {label,{text,"All links"}},
- {font,Font} | ?BTNOPTS]),
-
- gse:named_radiobutton(trace_link_first, F21,
- [{pack_xy,{{3,4},8}},
- {group,link},
- {data,trace_receive},
- {label,{text,"First link only"}},
- {font,Font} | ?BTNOPTS]),
-
- F12 = gse:frame(?TOP_FRAME, [{bw,3},
- {pack_xy,{{1,2},2}},
- {packer_x,[{stretch,1},
- {stretch,5}, % Label
- {stretch,1},
- {stretch,10}, % Field
- {stretch,1},
- {stretch,5}, % Button
- {stretch,1}]},
- {packer_y,[{stretch,2},
- {stretch,1},
- {stretch,1},
- {stretch,1}]}]),
-
- gse:label(F12, [{pack_xy,{{2,6},1}},
- {label,{text,"Trace output options:"}},
- {font,Font} | ?LBLOPTS]),
- gse:named_radiobutton(trace_in_window, F12,
- [{pack_xy,{{2,6},2}},
- {group, trace_dest},
- {label,{text,"In window"}},
- {font,Font} | ?BTNOPTS]),
- gse:named_radiobutton(trace_to_file, F12,
- [{pack_xy,{2,3}},
- {group, trace_dest},
- {label,{text,"To file"}},
- {font,Font} | ?BTNOPTS]),
- gse:named_entry(trace_file, F12, [{pack_xy,{4,3}}, {font,Font}]),
- gse:named_button(trace_file_browse, F12,
- [{pack_xy,{6,3}},
- {label,{text," Browse..."}},
- {font,Font} | ?BTNOPTS]),
-
- F13 = gse:frame(?TOP_FRAME, [{bw,3},
- {pack_xy,{{1,2},3}},
- {packer_x,[{stretch, 1},
- {fixed, 60},
- {stretch, 1},
- {fixed, 60},
- {stretch, 1}]},
- {packer_y,[{stretch,1},
- {fixed, 30},
- {stretch,1}]}]),
-
- gse:named_button(ok_button, F13, [{pack_xy,{2,2}},
- {label,{text,"OK"}},
- {font,Font}]),
- gse:named_button(cancel_button, F13, [{pack_xy,{4,2}},
- {label,{text,"Cancel"}},
- {font,Font}]).
-
-update_window_from_options(Options) ->
-
- %% Trace output
- gse:config(trace_send, [{select,Options#trace_options.send}]),
- gse:config(trace_receive,
- [{select,Options#trace_options.treceive}]),
- gse:config(trace_functions,
- [{select,Options#trace_options.functions}]),
- gse:config(trace_events, [{select,Options#trace_options.events}]),
-
- %% Trace inheritance
- case (Options#trace_options.inherit_on_all_spawn or
- Options#trace_options.inherit_on_1st_spawn) of
- true ->
- gse:select(trace_spawn),
- gse:config(trace_spawn_all,
- [{select,Options#trace_options.inherit_on_all_spawn}]),
- gse:config(trace_spawn_first,
- [{select,Options#trace_options.inherit_on_1st_spawn}]);
- false ->
- lists:foreach(fun(X) -> gse:disable(X) end,
- [trace_spawn_all,trace_spawn_first])
- end,
-
- case (Options#trace_options.inherit_on_all_link or
- Options#trace_options.inherit_on_1st_link) of
- true -> gse:select(trace_link),
- gse:config(trace_link_all,
- [{select,Options#trace_options.inherit_on_all_link}]),
- gse:config(trace_link_first,
- [{select, Options#trace_options.inherit_on_1st_link}]);
- false ->
- lists:foreach(fun(X) -> gse:disable(X) end,
- [trace_link_all,trace_link_first])
- end,
-
- %% Trace ouput destinations
- gse:config(trace_in_window,
- [{select,(not Options#trace_options.to_file)}]),
-
- gse:config(trace_to_file, [{select,Options#trace_options.to_file}]),
- gse:config(trace_file, [{text,Options#trace_options.file}]),
- case Options#trace_options.to_file of
- true ->
- ok;
- false ->
- lists:foreach(fun(X) -> gse:disable(X) end,
- [trace_file, trace_file_browse])
- end.
-
-get_options_from_window() ->
- #trace_options{send = gse:read(trace_send,select),
- treceive = gse:read(trace_receive,select),
- functions = gse:read(trace_functions,select),
- events = gse:read(trace_events,select),
- inherit_on_1st_spawn = gse:read(trace_spawn_first,select),
- inherit_on_all_spawn = gse:read(trace_spawn_all,select),
- inherit_on_1st_link = gse:read(trace_link_first,select),
- inherit_on_all_link = gse:read(trace_link_all,select),
- to_file = gse:read(trace_to_file,select),
- file = gse:read(trace_file,text)}.
-
-group_radio(Value, Default, GroupList) ->
- case Value of
- true ->
- gse:select(Default),
- lists:foreach(fun(X) -> gse:enable(X) end, GroupList);
- false ->
- lists:foreach(fun(X) -> gse:deselect(X) end, GroupList),
- lists:foreach(fun(X) -> gse:disable(X) end, GroupList)
- end.
-
-%%--read_from_file/(File)-----------------------------------------------
-%% Returns the options saved in File.
-%% If no options can be found, then the default options are
-%% returned.
-
-read_from_file(File) ->
- case file:consult(File) of
- {ok, [Term]} ->
- if
- is_record(Term, trace_options) ->
- {ok, Term};
- true ->
- {error, "unexpected contents", #trace_options{}}
- end;
- {ok, _Terms} ->
- {error, "unexpected contents", #trace_options{}};
- {error, Tuple} when is_tuple(Tuple) -> % {Line,Mod,Term}
- {error, "erroneous contents", #trace_options{}};
- {error, _Posix} ->
- %% The most probable reason is that the file does not
- %% exist, this is not an error so we simply return
- %% the default trace options instead
- {ok, #trace_options{}}
- end.
-
-%%--save_to_file(Options, File)-----------------------------------------
-
-save_to_file(Options, File) ->
- case file:open(File, [write]) of
- {ok, Fd} ->
- {{Year,Month,Day},{H,M,S}} = calendar:local_time(),
- io:format(Fd, "%%%~n", []),
- io:format(Fd, "%%% File: ~s~n", [File]),
- io:format(Fd, "%%% Date: ~w-~2..0w-~2..0w, ~2..0w:~2..0w:~2..0w~n",
- [Year,Month,Day,H,M,S]),
- io:format(Fd, "%%%~n", []),
- io:format(Fd, "%%% This file was created by Pman. ~n", []),
- io:format(Fd, "%%%~n", []),
- io:format(Fd, "%%% DO NOT EDIT! ~n", []),
- io:format(Fd, "%%%~n", []),
- io:format(Fd, "%%%~n", []),
- io:format(Fd, "~p.~n", [Options]),
- file:close(Fd),
- ok;
- {error, Posix} ->
- {error, file:format_error(Posix)}
- end.
diff --git a/lib/pman/src/pman_options.hrl b/lib/pman/src/pman_options.hrl
deleted file mode 100644
index 047b9866c3..0000000000
--- a/lib/pman/src/pman_options.hrl
+++ /dev/null
@@ -1,34 +0,0 @@
-%%
-%% %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%
-%%
-
-%%
-%% An options-record contains the return data from the option dialog.
-%%
-
--record(trace_options, {send=true,
- treceive=true,
- functions=true,
- events=true,
- to_file=false,
- file="",
- inherit_on_1st_spawn=false,
- inherit_on_all_spawn=true,
- inherit_on_1st_link=false,
- inherit_on_all_link=true}).
-
diff --git a/lib/pman/src/pman_process.erl b/lib/pman/src/pman_process.erl
deleted file mode 100644
index 276407a0f1..0000000000
--- a/lib/pman/src/pman_process.erl
+++ /dev/null
@@ -1,317 +0,0 @@
-%%
-%% %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%
-%%
-%%----------------------------------------------------------------------
-%% Purpose : A front-end to the erlang:process_info() functions, that
-%% can handle processes on different nodes in a transparent
-%% way.
-%% Also some convenience functions for process info, as well
-%% as some application specific functions for process
-%% classification.
-%%----------------------------------------------------------------------
-
--module(pman_process).
-
--export([pinfo/1, pinfo/2,
- r_processes/1,
- function_info/1,
- get_name/1, msg/1, reds/1, psize/1,
- is_running/1,
- is_pid_or_shell/1,
- get_pid/1,
- is_system_process/1,
- is_hidden_by_module/2
- ]).
-
-%% List of registered name that will make a prodcess a "SYSTEM"-process
--define(SYSTEM_REG_NAMES,
- [
- %% kernel
- application_controller,
- erl_reply,
- auth,
- boot_server,
- code_server,
- disk_log_server,
- disk_log_sup,
- erl_prim_loader,
- error_logger,
- file_server_2,
- fixtable_server,
- global_group,
- global_name_server,
- heart,
- inet_gethost_native,
- inet_gethost_native_sup,
- init,
- kernel_config,
- kernel_safe_sup,
- kernel_sup,
- net_kernel,
- net_sup,
- rex,
- user,
- os_server,
- ddll_server,
- erl_epmd,
- inet_db,
- pg2,
-
- %% stdlib
- timer_server,
- rsh_starter,
- take_over_monitor,
- pool_master,
- dets,
-
- %% sasl
- sasl_safe_sup, sasl_sup, alarm_handler, overload,
- release_handler,
-
- %% gs
- gs_frontend
- ]).
-
-%% List of module:function/arity calls that will make the caller a
-%% "SYSTEM"-process.
-%%
--define(SYSTEM_INIT_CALLS,
- [{application_master,init,4},
- {application_master,start_it,4},
- {inet_tcp_dist,accept_loop,2},
- {net_kernel,ticker,2},
- {supervisor_bridge,user_sup,1},
- {user_drv,server,2},
- {group,server,3},
- {kernel_config,init,1},
- {inet_tcp_dist,do_accept,6},
- {inet_tcp_dist,do_setup,6},
- {pman_main,init,2},
- {pman_buf_printer,init,2},
- {pman_buf_converter,init,2},
- {pman_buf_buffer,init,1},
- {gstk,init,1},
- {gstk_port_handler,init,2},
- {gstk,worker_init,1}
- ]).
-
-%% List of module:function/arity calls that will make the executing
-%% process a "SYSTEM"-process.
--define(SYSTEM_RUNNING_CALLS,
- [{file_io_server,server_loop,1},
- {global,loop_the_locker,1},
- {global,collect_deletions,2},
- {global,loop_the_registrar,0},
- {gs_frontend,request,2},
- {shell,get_command1,5},
- {shell,eval_loop,3},
- {io,wait_io_mon_reply,2},
- {pman_module_info,loop,1},
- {pman_options,dialog,3},
- {pman_options,loop,1},
- {pman_relay_server,loop,1},
- {pman_shell,monitor_loop,1},
- {pman_shell,safe_loop,2}
- ]).
-
-%% pinfo(Pid) -> [{Item, Info}] | undefined
-%% pinfo(Pid, Item) -> Info | undefined
-%% A version of process_info/1 that handles pid on remote nodes as well.
-pinfo({_, Pid}) -> % Handle internal process format
- pinfo(Pid);
-pinfo(Pid) when node(Pid)==node() ->
- process_info(Pid);
-pinfo(Pid) ->
- case rpc:call(node(Pid), erlang, process_info, [Pid]) of
- {badrpc, _} -> undefined;
- Res -> Res
- end.
-
-pinfo({_, Pid}, Item) -> % Handle internal process format
- pinfo(Pid, Item);
-pinfo(Pid, Item) when node(Pid)==node() ->
- case process_info(Pid, Item) of
- {Item, Info} -> Info;
- "" -> ""; % Item == registered_name
- undefined -> undefined
- end;
-pinfo(Pid, Item) ->
- case rpc:call(node(Pid), erlang, process_info, [Pid, Item]) of
- {badrpc, _} -> undefined;
- {Item, Info} -> Info;
- "" -> ""; % Item == registered_name
- undefined -> undefined
- end.
-
-%% function_info(Pid) -> {M, F, A}
-%% Returns the initial function for the specified process.
-function_info(Pid) ->
- case pinfo(Pid, current_function) of
- {Module, Function, Arity} ->
- {Module, Function, Arity};
- undefined ->
- {unknown, unknown, 0}
- end.
-
-%% r_processes(Node) -> Pids
-%% Return a list of all processes at Node.
-%%
-%% If there is a problem with getting information from a remote
-%% node, an empty list is returned.
-r_processes(Node) ->
- ordsets:from_list(r_processes1(Node)).
-
-r_processes1(Node) ->
- if
- Node==node() ->
- processes();
- true ->
- case rpc:block_call(Node, erlang, processes, []) of
- {badrpc, _} ->
- [];
- Pids -> Pids
- end
- end.
-
-%% is_running(Object) -> {true, {shell,Pid}} | {true, Pid} | false
-%% Object = {shell, Pid} | {link, Pid, ?} | Pid
-is_running({shell,Pid}) ->
- case is_running(Pid) of
- {true,Pid} ->
- {true,{shell,Pid}};
- false ->
- false
- end;
-is_running({link,Pid,_}) ->
- is_running(Pid);
-is_running(Pid) ->
- case is_pid_or_shell(Pid) of
- true ->
- case pinfo(Pid) of
- undefined -> false;
- _PInfo -> {true, Pid}
- end;
- false ->
- false
- end.
-
-%% is_pid_or_shell(Object) -> bool()
-%% Checks if the argument is an pid or a tuple {shell, Pid}.
-is_pid_or_shell({shell,Pid}) when is_pid(Pid) ->
- true;
-is_pid_or_shell(Pid) when is_pid(Pid) ->
- true;
-is_pid_or_shell(_) ->
- false.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% get_pid/1 - returns the Pid of the object provided that
-%% it is a proper process specifier.
-%%
-%% Arguments:
-%% Object A process specifier
-%%
-%% Returns:
-%% The Pid.
-
-get_pid({shell,Pid}) ->
- Pid;
-get_pid(Pid) when is_pid(Pid) ->
- Pid.
-
-%% is_system_process(Pid) -> bool()
-%% Returns true if Pid is a "system process".
-%% This is a prototype version, use file configuration later.
-is_system_process(Pid) ->
- catch is_system_process2(Pid).
-
-is_system_process2(Pid) ->
-
- %% Test if the registered name is a system registered name
- case pinfo(Pid, registered_name) of
- undefined -> ignore;
- "" -> ignore;
- Name ->
- case lists:member(Name, ?SYSTEM_REG_NAMES) of
- true -> throw(true);
- false -> ignore
- end
- end,
-
- %% Test if the start specification is a "system start function"
- MFAi = case pinfo(Pid, initial_call) of
- {proc_lib, init_p, 5} ->
- proc_lib:translate_initial_call(Pid); % {M,F,A} | Fun
- Res -> Res % {M,F,A} | undefined
- end,
- case lists:member(MFAi, ?SYSTEM_INIT_CALLS) of
- true -> throw(true);
- false -> ignore
- end,
-
- %% Test if the running specification is a "system running function"
- case pinfo(Pid, current_function) of
- undefined -> false;
- MFAc ->
- lists:member(MFAc, ?SYSTEM_RUNNING_CALLS)
- end.
-
-%% is_hidden_by_module(Pid, Modules) -> bool()
-%% Checks if Pid is to be hidden because it executes code from one
-%% of Modules
-is_hidden_by_module(Pid, Modules) ->
- case pinfo(Pid, current_function) of
- {Module, _Function, _Arity} ->
- lists:member(Module, Modules);
- undefined -> false
- end.
-
-%% get_name(Pid) -> Name | " "
-%% Returns the registered name of a process, if any, or " " otherwise.
-get_name(Pid) ->
- case pinfo(Pid, registered_name) of
- undefined -> " ";
- "" -> " ";
- Name -> Name
- end.
-
-%% msg(Pid) -> int()
-msg(Pid) ->
- case pinfo(Pid, messages) of
- undefined -> 0;
- Msgs -> length(Msgs)
- end.
-
-%% reds(Pid) -> int()
-reds(Pid) ->
- case pinfo(Pid, reductions) of
- undefined -> 0;
- Reds -> Reds
- end.
-
-%% psize(Pid) -> int()
-%% Returns the total process size (stack + heap).
-psize(Pid) ->
- Stack = pinfo(Pid, stack_size),
- Heap = pinfo(Pid, heap_size),
- case {Heap, Stack} of
- {undefined, undefined} -> 0;
- {undefined, Sz} -> Sz;
- {Sz, undefined} -> Sz;
- {Sz0, Sz1} -> Sz0 + Sz1
- end.
diff --git a/lib/pman/src/pman_relay.erl b/lib/pman/src/pman_relay.erl
deleted file mode 100644
index 289765492f..0000000000
--- a/lib/pman/src/pman_relay.erl
+++ /dev/null
@@ -1,127 +0,0 @@
-%%
-%% %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%
-%%
-%%----------------------------------------------------------------------
-%% Purpose : Interface function to relay calls (esp. trace calls)
-%% to processes on other nodes. Some of the calls
-%% are conditionally relayed.
-%%----------------------------------------------------------------------
-
--module(pman_relay).
-
-%%-compile(export_all).
--export([start/1,
- ok_to_trace/1,
- trac/3]).
-
-
--include("assert.hrl").
-
-%% --------------------------------------------------------------
-%% DISTRIBUTION
-%% --------------------------------------------------------------
-%% (???) Process dictionary alert!!!
-%%
-%% Since we are not allowed to do erlang:trace/3 on remote
-%% processe we create a help process at the remote node to
-%% do the job for us
-%% ---------------------------------------------------------------
-
-start(P) when is_pid(P), node(P)/=node() ->
-
- %% Remote supervision, relaying necessary
-
- put(relay, spawn_link(node(P), pman_relay_server, init, [self()]));
-
-
-start(_) ->
-
- %% Local supervision, no relaying
-
- ignore.
-
-
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% ok_to_trace/1 - Tests wheter we can actually start tracing
-%% a process.
-%%
-%% Arguments:
-%% Pid Pid of the process to trace (on local or remote node)
-%%
-%% Returns
-%% true If it is OK to trace the process
-%% false If the process is already traced, or some other
-%% condition prevents it from being traced.
-
-ok_to_trace(Pid) when node(Pid) == node()->
-
- %% Local trace, no relaying
-
- case catch erlang:trace(Pid, false, [send]) of
- 1 ->
- true;
- _Otherwise ->
- false
- end;
-ok_to_trace(Pid) ->
-
- %% Remote trace, relaying necessary
-
- PidRelay = get(relay),
- PidRelay ! {ok_to_trace, self(), Pid},
- receive
- {ok_to_trace, PidRelay} ->
- true;
- {not_ok_to_trace, PidRelay} ->
- false;
- _Otherwise ->
- ?ALWAYS_ASSERT("Unexpected message from relay process")
- after
- 5000 ->
- false
- end.
-
-
-
-
-
-
-%% ---------------------------------------------------------------
-%% Possibly send a request to do tracing to a remote node.
-%% ---------------------------------------------------------------
-
-trac(Pid, How, Flag) when node(Pid) == node() ->
-
- %% Local trace, no relaying necessary
-
-
- case catch erlang:trace(Pid, How, Flag) of
- 1 -> ok;
- _ -> pman_win:format("** Illegal trace request ** \n", [])
- end;
-
-trac(Pid, How, Flag) ->
-
-
-
- %% Remote trace, relaying necessary
-
- get(relay) ! {self(), erlang, trace, [Pid, How, Flag]}.
-
diff --git a/lib/pman/src/pman_relay_server.erl b/lib/pman/src/pman_relay_server.erl
deleted file mode 100644
index 2fcbb663bc..0000000000
--- a/lib/pman/src/pman_relay_server.erl
+++ /dev/null
@@ -1,57 +0,0 @@
-%%
-%% %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%
-%%
-%%%----------------------------------------------------------------------
-%%% Purpose : Relay server code.
-%%%----------------------------------------------------------------------
-
--module(pman_relay_server).
-
-%%-compile(export_all).
--export([init/1]).
-
-
-
-init(P) ->
- process_flag(trap_exit, true),
-
- loop(P).
-
-loop(P) ->
- receive
- {ok_to_trace, PidSender, PidToTrace} ->
- case catch erlang:trace(PidToTrace, false, [send]) of
- 1 ->
- PidSender ! {ok_to_trace, self()},
- loop(P);
- _Otherwise ->
- PidSender ! {not_ok_to_trace, self()}
- end;
-
- {P, M,F,A} ->
- case catch apply(M, F, A) of
- 1 -> ok;
- _Other -> P ! {print, "** Illegal trace request **\n", []}
- end,
- loop(P);
- {'EXIT', P, _Reason} ->
- exit(normal);
- Other -> %% Here is the normal case for trace i/o
- P ! Other,
- loop(P)
- end.
diff --git a/lib/pman/src/pman_shell.erl b/lib/pman/src/pman_shell.erl
deleted file mode 100644
index 2d2b8ce000..0000000000
--- a/lib/pman/src/pman_shell.erl
+++ /dev/null
@@ -1,827 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2012. 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%
-%%
-%%
-%% ---------------------------------------------------------------
-%% Purpose: Create a trace window with process
-%% information or a help window with information
-%% about pman.
-%%
-%% ---------------------------------------------------------------
-
--module(pman_shell).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,start,0}},
- {nowarn_deprecated_function,{gs,start,1}}]).
-
-%% ---------------------------------------------------------------
-%% The user interface exports
-%% ---------------------------------------------------------------
-
--export([start_list/3,
- start/2,
- start/1,
- find_shell/0]).
-
-%% ---------------------------------------------------------------
-%% Includes
-%% ---------------------------------------------------------------
--include("assert.hrl").
--include("pman_options.hrl").
--include("pman_buf.hrl").
-
-
-%% ---------------------------------------------------------------
-%% Internal record declarations
-%% ---------------------------------------------------------------
--record(pman_shell,{win,
- editor,
- pid,
- buffer,
- father,
- shell_flag, % boolean, true for shell
- trace_options, % Keeps trace options
- db}). % DB for trace windows
-
-
-%%
-%% Constants
-%%
-
--define (PMAN_DB, pman_db). % The pman db for trace windows
-
-
-
-%% ---------------------------------------------------------------
-%% start/1, start/2
-%%
-%% Starts a new trace shell process.
-%%
-%% start(Pid, DefaultOptions)
-%% Pid The Pid of the process to trace
-%% DefaultOptions The default trace options passed along from
-%% the calling process.
-%%
-%%
-%% start(Pid)
-%% Pid The Pid of the process to trace
-%%
-%% start(Pid) starts without using any default options except for those
-%% hardwired into the application. (See pman_options.hrl).
-%%
-%%
-%% Return: Both functions return a process id
-%% ---------------------------------------------------------------
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% start_list/3 - Starts a trace window for each of the processes
-%% in the list
-
-start_list(LIPid, Father, Options) ->
- StartFun = fun(Pid) ->
- start({Pid,Father}, Options)
- end,
- lists:foreach(StartFun, LIPid).
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% start/1 - Starts a trace window for the specified Pid.
-%%
-
-start(Pid) ->
- start(Pid, #trace_options{}).
-
-%%
-%% start/2
-%%
-
-start(Pid,DefaultOptions) when is_pid(Pid) ->
- start({Pid,self()}, DefaultOptions);
-
-start(Var,DefaultOptions) ->
- Db = db_start(),
- spawn_link(fun() -> internal(Var, DefaultOptions, Db) end).
-
-%% ---------------------------------------------------------------
-%% Initialize the enviroment for tracing/viewing Object
-%%
-%% Object can either be {shell,Shell} or a Pid.
-%% The main loop is then called, which handles trace and event
-%% requests. The window dies whenever Supervisor dies, while
-%% message windows die whenever their parent dies.
-%% ---------------------------------------------------------------
-
-internal({Object,Supervisor}, DefaultOptions, Db) ->
-
- %% (???) This call will cause minor problems when the window has been
- %% invoked with proc/1 from for instance the shell. The shell
- %% does not handle the exit-signals, so it will exit
- %% when the window is exited.
-
-
- %% First check that no other process is tracing the process we want
- %% to trace. There is no well defined way of doing this, so the
- %% code below is used instead. (???)
-
- pman_relay:start(Object), %(???) Uses proc. dict.
-
- Pid = pman_process:get_pid(Object),
-
- case pman_relay:ok_to_trace(Pid) of
-
- %% Tracing cannot be performed on the specified process
-
- false ->
- T = lists:flatten(io_lib:format("ERROR: Process ~p is already being~ntraced by some other process.~nOr there may be a problem communicating with it.",[Pid])),
- tool_utils:notify(gs:start(),T),
- exit(quit);
-
- %% Tracing can be performed, go ahead!
-
- true ->
-
- case db_insert_key (Db, Pid) of
- true ->
-
- link(Supervisor),
- process_flag(trap_exit, true),
-
- case catch pman_win:window(Object) of
- {'EXIT', badrpc} ->
- T = "ERROR: Could not access node",
- pman_win:dialog_window(gs:start(),T);
- {'EXIT', dead} ->
- T = "ERROR: The process is dead",
- pman_win:dialog_window(gs:start(),T);
- {'EXIT',_W} ->
- T = "ERROR: Untracable process \n(unexpected EXIT reason)",
- pman_win:dialog_window(gs:start(),T);
- {Win, Ed} ->
- init_monitor_loop(Win,
- Ed,
- Object,
- Supervisor,
- DefaultOptions,
- Db)
- end;
-
- false ->
- T = lists:flatten(io_lib:format("ERROR: Process ~p is already being~ntraced by some other process.",[Pid])),
- tool_utils:notify(gs:start(),T),
- exit(quit);
-
- Error ->
- Error
- end
-
- end.
-
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% init_monitor_loop/5
-
-init_monitor_loop(Win,Ed,Object,Supervisor, DefaultOptions, Db) ->
-
- process_flag(priority, max),
-
- %% Most default options come from the main window. Now we must set
- %% the default file name to something that is shows what process
- %% is being traced.
-
- %% Find out an appropriate file name to write the trace output
- %% to if the output should go to a file.
-
- FileName = case pman_process:is_pid_or_shell(Object) of
- true ->
- default_file_name(pman_process:get_pid(Object));
- false ->
- "NoName"
- end,
-
- Buff = pman_buf:start(Ed, FileName),
-
- case pman_process:is_running(Object) of
-
- %% We are tracing a shell process.
- {true,{shell,Pid}} ->
- safe_link(Pid),
- NewDefaultOptions =
- DefaultOptions#trace_options{file=FileName},
- perform_option_changes(Pid, NewDefaultOptions, Buff),
- monitor_loop(#pman_shell{win=Win, editor=Ed, pid=Pid, buffer=Buff,
- father = Supervisor,
- shell_flag = true,
- trace_options = NewDefaultOptions,
- db = Db});
-
- %% We are tracing an ordinary process.
- {true,Pid} ->
- safe_link(Pid),
- NewDefaultOptions =
- DefaultOptions#trace_options{file=FileName},
- perform_option_changes(Pid, NewDefaultOptions, Buff),
- monitor_loop(#pman_shell{win=Win, editor=Ed, pid=Pid, buffer=Buff,
- father = Supervisor,
- shell_flag = false,
- trace_options = NewDefaultOptions,
- db = Db});
-
- %% The process being traced is dead.
- false ->
- monitor_loop(#pman_shell{win=Win, editor=Ed, pid=nopid,
- buffer=Buff,
- father = Supervisor,
- shell_flag = false,
- trace_options= DefaultOptions,
- db = Db})
- end.
-
-%% ----------------------------------------------------------------
-%% What is the Pid of the shell on our node?
-%% ----------------------------------------------------------------
-
-find_shell() ->
- case shell:whereis_evaluator() of
- undefined -> % noshell
- noshell;
- Pid ->
- Pid
- end.
-
-%% ---------------------------------------------------------------
-%% Functions called in case of an exit message
-%% ---------------------------------------------------------------
-
-clean_up(Win, Buff,Pid) ->
-
- %% (???) Unlinks the traced process, but since we are using a safe link
- %% it is probably unnecessary.
-
- safe_unlink(Pid),
-
- %% Kill helper processes
-
- exit(Buff#buffer.converter, topquit),
- exit(Buff#buffer.buffer, topquit),
-
- gs:destroy(Win).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% exit_cmd/3 - Takes care of the necessary details when
-%% a linked process terminates.
-
-
-exit_cmd(Pid,_Reason, State) ->
- case State#pman_shell.shell_flag of
-
- %% This clause handles the case when a shell process dies.
- %% Since it is restarted and the intention is to continue tracing
- %% the restarted shell process, we need to handle it separately by
- %% finding the new shell process.
- true ->
-
- NewShell = find_shell(),
- safe_link(NewShell),
- pman_relay:start(NewShell),
-
- %% Update the window title with the new PID
- Title = pman_win:title({shell, NewShell}),
- Win = State#pman_shell.win,
- gse:config(Win,[{title,Title}]),
-
- pman_relay:trac(NewShell, true, flags()),
-
- B = State#pman_shell.buffer,
- B#buffer.converter!{raw,[{shell_died, Pid, NewShell}]},
-
-
-
- State#pman_shell{pid=NewShell};
-
- %% This clause handles the case when a traced process that is
- %% not a shell process dies.
- false ->
-
- B = State#pman_shell.buffer,
- B#buffer.converter!{raw,[{died, Pid}]},
-
- lists:foreach(fun(X) -> gse:disable(X) end,
- ['Options',
- 'Kill',
- 'LinksMenu']),
- State#pman_shell{pid=undefined}
- end.
-
-flags() ->
- [send, 'receive', call, procs,
- set_on_spawn, set_on_first_spawn, set_on_link, set_on_first_link].
-
-options_to_flaglists(Options) ->
- AssocList =
- [{Options#trace_options.send, send},
- {Options#trace_options.treceive, 'receive'},
- {Options#trace_options.inherit_on_1st_spawn, set_on_first_spawn},
- {Options#trace_options.inherit_on_all_spawn, set_on_spawn},
- {Options#trace_options.inherit_on_1st_link, set_on_first_link},
- {Options#trace_options.inherit_on_all_link, set_on_link},
- {Options#trace_options.events, procs},
- {Options#trace_options.functions,call}],
-
- TrueFun = fun ({Option,Flag}) ->
- case Option of
- true -> Flag;
- _Otherwise -> false
- end
- end,
- TrueFlags = mapfilter(TrueFun, AssocList),
-
- FalseFun = fun ({Option,Flag}) ->
- case Option of
- false -> Flag;
- _Otherwise -> false
- end
- end,
- FalseFlags = mapfilter(FalseFun, AssocList),
- {TrueFlags,FalseFlags}.
-
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% mapfilter/2 - Combines the functionality of lists:map and
-%% lists:filter. mapfilter applies the function argument to
-%% each element in the list. All returned values that are
-%% not false will occur in the resulting list.
-%%
-%% Arguments:
-%% Fun A fun that takes one argument
-%% List A list. Each element will become an argument to Fun.
-%%
-%% Returns:
-%% A list of all results from the map operation that are not false.
-%%
-
-mapfilter(Fun,[E|Es]) ->
- case apply(Fun,[E]) of
- false ->
- mapfilter(Fun,Es);
- Value -> [Value | mapfilter(Fun,Es)]
- end;
-mapfilter(_Fun, []) -> [].
-
-
-
-perform_option_changes(Pid,Options,Buffer) ->
-
- %% Notify the trace output functionality
- %% if the destination is supposed to go to a file...
-
- case Options#trace_options.to_file of
- true ->
- FName = Options#trace_options.file,
- Buffer#buffer.converter!{file,FName};
- false ->
- done
- end,
-
- %%...then set the trace flags of the traced process
-
- {OnFlags, OffFlags} = options_to_flaglists(Options),
- case catch begin
-
- %% (???) Note that the following calls cannot actually fail
- %% This may be a problem. And the catch appears unnecessary
- %% However, it may become necessary to let the
- %% pman_relay:trac/3 function retrun appropriate values.
- pman_relay:trac(Pid,true, OnFlags),
- pman_relay:trac(Pid,false, OffFlags)
- end of
- true ->
- ok;
- _ -> pman_win:format("** Illegal trace request ** \n", [])
- end.
-
-
-
-
-
-
-%% ---------------------------------------------------------------
-%% Take care of the command executed by the user.
-
-execute_cmd(Cmd,Shell_data) ->
- Window = Shell_data#pman_shell.win,
- Editor = Shell_data#pman_shell.editor,
- Shell = Shell_data#pman_shell.pid,
- Buffer = Shell_data#pman_shell.buffer,
- TraceOptions = Shell_data#pman_shell.trace_options,
-
- case Cmd of
- 'Close' ->
- db_delete_key (Shell_data#pman_shell.db, Shell_data#pman_shell.pid),
- clean_up(Window, Buffer, Shell),
- exit(quit);
- 'Destroy' ->
- db_delete_key (Shell_data#pman_shell.db, Shell_data#pman_shell.pid),
- exit(Buffer#buffer.buffer,topquit),
- safe_unlink(Shell),
- exit(Buffer#buffer.converter,topquit),
- exit(Buffer#buffer.buffer,topquit),
- exit(quit);
-
- 'Clear' when is_pid(Shell) ->
- New_buffer = pman_buf:clear(Buffer,pman_win:display(Shell),
- TraceOptions#trace_options.file),
- Shell_data#pman_shell{buffer = New_buffer};
- 'Save buffer' ->
- DefaultFile = "Pman_buffer." ++ default_file_name(Shell),
- Result = tool_utils:file_dialog([{type,save},
- {file,DefaultFile}]),
- case Result of
- {ok, UserFile, _State} ->
- Buffer#buffer.buffer!{save_buffer,UserFile};
- {error,_Reason} ->
- true
- end,
- Shell_data;
- 'Help' ->
- HelpFile = filename:join([code:lib_dir(pman), "doc", "html", "index.html"]),
- tool_utils:open_help(gs:start([{kernel, true}]), HelpFile),
- Shell_data;
- 'Kill' when is_pid(Shell) ->
- exit(Buffer#buffer.converter,killed),
- exit(Buffer#buffer.buffer,killed),
- lists:foreach(fun(X) -> gse:disable(X) end,
- ['TraceMenu',
- 'Clear']),
- catch exit(Shell, kill),
- Shell_data#pman_shell{pid = undefined};
- 'All Links' when is_pid(Shell) ->
- LIPid = pman_process:pinfo(Shell, links),
- ?ALWAYS_ASSERT("Just a brutal test"),
- start_list(LIPid,
- Shell_data#pman_shell.father,
- Shell_data#pman_shell.trace_options),
- Shell_data;
- 'Module' when is_pid(Shell) ->
- {ModuleName,_,_} = pman_process:function_info(Shell),
- pman_module_info:start(ModuleName),
- Shell_data;
- 'Options' when is_pid(Shell) ->
- case pman_options:dialog(Window,
- "Trace Options for Process",
- TraceOptions) of
- {error, _Reason} ->
- Shell_data;
- Options ->
- perform_option_changes(Shell, Options, Buffer),
- Shell_data#pman_shell{trace_options=Options}
- end;
-
- {trac,Choice,Bool} when is_pid(Shell) ->
- pman_relay:trac(Shell, Bool, [Choice]),
- Shell_data;
-
-
- {configure,{X,Y}} ->
- configure (Editor, X, Y),
- Shell_data;
-
- Pid when is_pid(Pid) ->
- pman_shell:start({Pid, Shell_data#pman_shell.father},
- Shell_data#pman_shell.trace_options),
- Shell_data;
- _Other ->
- ?ALWAYS_ASSERT("Received unexpected event"),
- Shell_data
- end.
-
-
-default_file_name(Shell) when is_pid(Shell) ->
- [A,B,C] = string:tokens(pid_to_list(Shell),[$.,$<,$>]),
- "pman_trace." ++ A ++ "_" ++ B ++ "_" ++ C;
-default_file_name(_OTHER) ->
- "shell".
-
-
-
-
-
-%% Key accellerators
-
-key(e) -> 'Clear';
-key(s) -> 'Save buffer';
-key(c) -> 'Close';
-key(a) -> 'All';
-key(r) -> 'Reset';
-key(m) -> 'Module';
-key(l) -> 'All Links';
-key(k) -> 'Kill';
-key(h) -> 'Help';
-key(z) -> 'Close';
-key(O) -> O.
-
-
-
-%% ---------------------------------------------------------------
-%% The main loop takes care of data coming in from the traces, as
-%% well as exit signals from proceses we are monitoring. Events
-%% caused by the user or window manager are also handled here.
-%% ---------------------------------------------------------------
-
-
-monitor_loop(Shell_data) ->
- receive
-
- %% WM destroy
- {gs,_Window,destroy,[],[]} -> %%Avoid links menus
- execute_cmd('Destroy', Shell_data);
-
-
- %% Handle EXIT signal from parent process
- {'EXIT', _Pid, topquit} ->
- clean_up(Shell_data#pman_shell.win,
- Shell_data#pman_shell.buffer,
- Shell_data#pman_shell.pid),
- exit(topquit);
-
- %% (???) Ignore "stray" EXIT signal from converter
- {'EXIT', _Pid, win_killed} ->
- monitor_loop(Shell_data);
-
-
- %% Handle EXIT signal from safely linked Pid
- %% This is received when a traced process dies.
- {'SAFE_EXIT', Pid, Reason} ->
- New_Shell_data = exit_cmd(Pid, Reason,Shell_data ),
- monitor_loop(New_Shell_data);
-
-
- %% Handle EXIT signal from processes where we expect
- %% some EXIT signals, such as the file_dialog opened, and possibly
- %% others.
-
- {'EXIT', _Pid, _Reason} ->
- monitor_loop(Shell_data);
-
- %% Handle incoming trace messages
- Message when is_tuple(Message) , element(1,Message) == trace->
- {L, Suspended} = collect_tracs([Message]),
- Buffer = Shell_data#pman_shell.buffer,
- Buffer#buffer.converter!{raw,L},
- lists:foreach(fun(P) -> erlang:resume_process(P) end, Suspended),
- monitor_loop(Shell_data);
-
-
- %% All other messages on the form {...,...,...}
- Message when is_tuple(Message) ->
- do_link_stuff(Shell_data),
-
- New_Shell_data = process_gs_event(Message,Shell_data),
- monitor_loop(New_Shell_data);
-
- %% Catch all for unexpected messages
- _Anything ->
- ?ALWAYS_ASSERT("Received unexpected event"),
- monitor_loop(Shell_data)
-
- end.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% process_event/1 - Error handling wrapper for gs_cmd
-
-process_gs_event(Message, Shell_data) ->
- case catch gs_cmd(Message,Shell_data) of
-
- %%
- %% Error exits from gs_cmd
-
- {'EXIT', badrpc} ->
- Text = "\nERROR: Could not access node",
- pman_win:msg_win(Text),
- Shell_data;
- {'EXIT', dead} ->
- Text = "\nERROR: The process is dead",
- pman_win:msg_win(Text),
- Shell_data;
-
- %% A controlled application initiated termination
- {'EXIT', quit} ->
- db_delete_key (Shell_data#pman_shell.db, Shell_data#pman_shell.pid),
- exit(quit);
-
-
- {'EXIT',Reason} ->
- db_delete_key (Shell_data#pman_shell.db, Shell_data#pman_shell.pid),
- io:format("Debug info, Reason: ~p~n",[Reason]),
- ?ALWAYS_ASSERT("Unexpected EXIT reason"),
- exit({unexpected_EXIT_reason,Reason});
-
- %%
- %% "Proper" exits from gs_cmd
-
- New_Shell_data ->
- New_Shell_data
- end.
-
-
-
-gs_cmd(Cmd, Shell_data) ->
- case Cmd of
-
- %%User Command
- {gs, Command, click, _Data, _Args} ->
- execute_cmd(Command,Shell_data);
-
- %%Key accellerator
- {gs,_Window,keypress,_D,[Key,_,0,1]} ->
- execute_cmd(key(Key),Shell_data);
-
- %%Window Resize
- {gs,_Window,configure,_,[X,Y|_]} ->
- execute_cmd({configure,{X,Y}},Shell_data);
-
-
- {gs, _Object, _Event, _Data, _Args} ->
- ?ALWAYS_ASSERT("Unhandled gs event"),
- Shell_data
-
- end.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% (???) do_link_stuff/1 - I have no clue.
-%%
-
-do_link_stuff(Shell_data) ->
-
- %% This appears to be code to execute for adding
- %% dynamic links menus.
-
- case Shell_data#pman_shell.pid of
- undefined ->
- ok;
- Pid ->
- case pman_process:pinfo(Pid, links) of
- Links when is_list(Links) ->
- pman_win:links_menus(Links);
- undefined ->
- ok
- end
- end.
-
-
-%% (???) Process dictionary used to safe Pid-Pid pairs.
-%%
-%% safe_link/1 - Spawns a process, that links to the Pid, and sends
-%% a message to the caller when the linked process dies.
-%%
-%% Since we (think we) need to link to the traced process, we want
-%% to do it in a way that has the smallest possible risk. The process
-%% that links to the Pid is small and simple, which is safer than if
-%% the calling process would link directly to the Pid.
-
-safe_link(Pid) when is_pid(Pid) ->
- Self = self(),
- PidSafe = spawn_link(fun() -> safe_init(Self, Pid) end),
- put(Pid, PidSafe).
-
-
-%% safe_unlink/1 - Removes a safe link
-%%
-
-safe_unlink(Pid) when is_pid(Pid) ->
- PidSafe = get(Pid),
- PidSafe ! {unlink, self(), Pid},
- erase(Pid);
-
-safe_unlink(_Anything)->
- true.
-
-%% safe_init/2 - Initialize a simple receive loop that controls safe linking
-%% to application processes.
-%%
-safe_init(Caller, Pid) ->
-
- process_flag(trap_exit, true),
- link(Pid),
-
- safe_loop(Caller, Pid).
-
-
-%% safe_loop/2 - Simply waits for an exit signal from the linked Pid,
-%% all other messages are disregarded.
-%%
-
-
-safe_loop(Caller, Pid) ->
- receive
- %% Linked process dies
- {'EXIT' , Pid, Reason} ->
- Caller ! {'SAFE_EXIT', Pid, Reason};
-
- %% Caller dies
- {'EXIT', Caller, _Reason} ->
- unlink(Pid);
-
-
- %% Unlink request
- {unlink, Caller, Pid} ->
- unlink(Pid);
-
- %% Ignore everything else
- _Anything ->
- safe_loop(Caller, Pid)
- end.
-
-
-
-configure (Editor, W, H) ->
- gs:config (Editor, [{width, W - 3},
- {height, H - 40}]).
-
-
-
-
-%%% The DB is used to avoid multiple trace windows
-%%% of the same process.
-
-%%% db_start /0
-%%%
-
-db_start() ->
- case ets:info(?PMAN_DB) of
- undefined -> ets:new(?PMAN_DB, [public, named_table]);
- _ -> ?PMAN_DB
- end.
-
-
-
-%%% db_insert_key /2
-%%%
-
-db_insert_key (Db, Pid) ->
- case ets:lookup (Db, Pid) of
- [] ->
- case catch ets:insert (Db, {Pid}) of
- true ->
- true;
-
- _Error ->
- error_insert_db
- end;
-
- _already_exists ->
- false
- end.
-
-
-
-%%% db_delete_key /2
-%%%
-
-db_delete_key (Db, Pid) ->
- ets:delete (Db, Pid).
-
-
-%% Function to collect all trace messages in the receive queue.
-%% Returns: {Messages,SuspendedProcesses}
-
-collect_tracs(Ack) -> collect_tracs(Ack, ordsets:new()).
-
-collect_tracs(Ack, Procs) ->
- receive
- Trac when is_tuple(Trac), element(1, Trac) == trace ->
- P = suspend(Trac, Procs),
- collect_tracs([Trac | Ack], P)
- after 0 ->
- {lists:reverse(Ack), ordsets:to_list(Procs)}
- end.
-
-suspend({trace,From,call,_Func}, Suspended) when node(From) == node() ->
- case ordsets:is_element(From, Suspended) of
- true -> Suspended;
- false ->
- case (catch erlang:suspend_process(From)) of
- true ->
- ordsets:add_element(From, Suspended);
- _ ->
- Suspended
- end
- end;
-suspend(_Other, Suspended) -> Suspended.
diff --git a/lib/pman/src/pman_tool.erl b/lib/pman/src/pman_tool.erl
deleted file mode 100644
index 36382745af..0000000000
--- a/lib/pman/src/pman_tool.erl
+++ /dev/null
@@ -1,146 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. 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(pman_tool).
--compile([{nowarn_deprecated_function,{gs,read,2}}]).
-
-%% Listbox selection window
-
--export([select/3]).
-
--record(state, {topwin,
- frame,
- listbox}).
-
-%% Constants
--define(WIN_WIDTH, 350).
--define(WIN_HEIGHT, 350).
-
-select(Win, Title, Choices) ->
- Self = self(),
- Pid = spawn_link(fun() -> init(Self, Win, Title, Choices) end),
- receive
- {Pid, Result} ->
- Result
- end.
-
-init(Pid, Win, Title, Choices) ->
-
- %% Create window
- State = create_window(Win, Title, Choices),
-
- gse:map(State#state.topwin),
-
- %% enter event loop
- loop(Pid, Choices, State).
-
-loop(Pid, Choices, State) ->
- receive
- {gs, _, destroy, _Data, _Args} ->
- Pid ! {self(), cancelled};
- {gs, _, configure, _Data, [W, H|_]} ->
- gse:resize(State#state.frame, W, H),
- loop(Pid, Choices, State);
- {gs, _, click, ok, _Args} ->
- case gs:read(State#state.listbox, selection) of
- [] ->
- Pid ! {self(), cancelled};
- Indices ->
- Selection = selection(Indices, Choices),
- Pid ! {self(), Selection}
- end;
- {gs, _, click, cancel, _Args} ->
- Pid ! {self(), cancelled};
- {gs, Obj, doubleclick, _Data, _Args} ->
- self() ! {gs, Obj, click, ok, []},
- loop(Pid, Choices, State);
- _GSEvent ->
- loop(Pid, Choices, State)
- end.
-
-selection(Indices, Choices) ->
- selection(0, Indices, Choices).
-
-selection(I, [I|Is], [{Val,_Str}|Vals]) ->
- [Val | selection(I+1, Is, Vals)];
-selection(I, [I|Is], [Val|Vals]) ->
- [Val | selection(I+1, Is, Vals)];
-selection(_I, [], _Vals) ->
- [];
-selection(I, Is, [_Val|Vals]) ->
- selection(I+1, Is, Vals).
-
-create_window(Win, Title, Choices) ->
- Font = pman_win:font(Win),
-
- %% Top window and a frame that covers it entirely, to allow
- %% usage of the packer for geometry management.
- Topwin = gse:window(Win, [{width, ?WIN_WIDTH},
- {height,?WIN_HEIGHT},
- {configure, true},
- {title, Title}]),
- Frame = gse:frame(Topwin, [{packer_x,[{stretch,1},
- {stretch,1}]},
- {packer_y,[{stretch,1},
- {stretch,5},
- {stretch,1}]}]),
-
- %% Caption above the list of items
- CaptionTxt = "Select one or more of the following:",
- gse:label(Frame, [{pack_x,{1,2}},
- {pack_y,{1,1}},
- {label,{text,CaptionTxt}}, {font,Font}]),
-
- %% List of selectable items
- Listbox = gse:listbox(Frame, [{pack_x,{1,2}},
- {pack_y,{2,2}},
- {selectmode,multiple},
- {doubleclick, true},
- {font,Font},
- {items, str_choices(Choices)}]),
-
- %% OK and Cancel buttons in a separate frame.
- F13 = gse:frame(Frame, [{bw,1},
- {pack_xy,{{1,2},3}},
- {packer_x,[{stretch,1},
- {fixed, 60},
- {stretch,1},
- {fixed, 60},
- {stretch,1}]},
- {packer_y,[{stretch,1},
- {fixed, 30},
- {stretch,1}]}]),
-
- gse:button(F13, [{pack_xy,{2,2}},
- {label,{text,"OK"}}, {font,Font},
- {data,ok}]),
- gse:button(F13, [{pack_xy,{4,2}},
- {label,{text,"Cancel"}}, {font,Font},
- {data,cancel}]),
-
- gse:resize(Frame, ?WIN_WIDTH, ?WIN_HEIGHT),
- #state{topwin=Topwin, frame=Frame, listbox=Listbox}.
-
-str_choices(Choices) ->
- lists:map(
- fun({Val, Str}) ->
- lists:flatten(io_lib:format("~p: ~s", [Val, Str]));
- (Term) ->
- lists:flatten(io_lib:format("~p", [Term]))
- end,
- Choices).
diff --git a/lib/pman/src/pman_win.erl b/lib/pman/src/pman_win.erl
deleted file mode 100644
index aec7dc4412..0000000000
--- a/lib/pman/src/pman_win.erl
+++ /dev/null
@@ -1,677 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2013. 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%
-%%
-%% ------------------------------------------------------------
-%% Purpose: window management and the gs interface
-%% ------------------------------------------------------------
-
--module(pman_win).
--compile([{nowarn_deprecated_function,{gs,button,2}},
- {nowarn_deprecated_function,{gs,canvas,2}},
- {nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,create,3}},
- {nowarn_deprecated_function,{gs,create,4}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,start,1}},
- {nowarn_deprecated_function,{gs,text,2}},
- {nowarn_deprecated_function,{gs,window,2}}]).
-
-%% ---------------------------------------------------------------
-%% The user interface exports
-%% ---------------------------------------------------------------
-
--export([pman_window/3, window/1, module_data/1, display/1, format/2,
- dialog_window/2, configeditor/2, configwin/3,
- update/1, update/3,
- msg_win/1, title/1,
- remove_menu/1, add_menu/3,
- change_colour/3, links_menus/1, calc_columnwidths/1]).
--export([font/0, font/1]).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Constants
-%%
--include("pman_win.hrl").
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% pman_window/3 - Create a GS window and components for the
-%% Pman overview window, the main window.
-%%
-%% Arguments:
-%% Size number of processes
-%% HiddenModules list of modules
-%% Nodes list of supervised nodes
-%%
-%% Return:
-%% {Win, Grid, Frame, Procnum, W, H} where
-%% Win The GS top window
-%% Grid The GS grid
-%% Procnum Number of displayed processes
-%%
-
-pman_window(Size, _HiddenModules, Nodes) ->
- GS = gs:start([{kernel,true}]),
- Font = font(GS),
- Win_Options = [{title, lists:concat(["Pman: Overview on ",node()])},
- {width, ?WIN_WIDTH}, {height, ?WIN_HEIGHT},
- {destroy, true},
- {keypress,true}],
- Win = gs:create(window, GS, Win_Options),
-
- %% Menu bar
- MenuBar = gs:create(menubar, Win, []),
- MBFile = gs:create(menubutton, MenuBar, [{label,{text," File "}},
- {font,Font},
- {underline,1}]),
- MBView = gs:create(menubutton, MenuBar, [{label,{text, " View "}},
- {font,Font},
- {underline,1}]),
- MBTrace = gs:create(menubutton, MenuBar, [{label,{text, " Trace "}},
- {font,Font},
- {underline,1}]),
- MBHelp = gs:create(menubutton, MenuBar, [{label, {text, " Help "}},
- {font,Font},
- {side,right},
- {underline,1}]),
-
- %% Addition of a menu for distribution
- add_node_menu(MenuBar, Nodes, Font),
-
- %% All menu buttons
- MenuFile = gs:create(menu, MBFile, []),
- MenuView = gs:create(menu, MBView, []),
- MenuTrace = gs:create(menu, MBTrace, []),
- MenuHelp = gs:create(menu, MBHelp, []),
-
- %% File menu
- gse:named_menuitem('Default Options', MenuFile,
- [{label,{text,"Options..."}}, {font,Font},
- {underline,0}]),
- gse:named_menuitem('Save Options',MenuFile,
- [{label,{text,"Save Options"}}, {font,Font}]),
- gse:named_menuitem('Exit', MenuFile,
- [{label,{text,"Exit"}}, {font,Font},
- {underline,0}]),
-
- %% View menu
- gse:named_menuitem('Hide All',MenuView,
- [{label, {text, "Hide All Processes"}},
- {font,Font},
- {underline,1}]),
-
- gse:named_menuitem('Hide Modules', MenuView,
- [{label, {text, "Hide Modules..."}},
- {font,Font},
- {underline,8}]),
-
- gse:named_menuitem('Hide Selected Process', MenuView,
- [{label, {text, "Hide Selected Process"}},
- {font,Font},
- {underline,2}]),
-
- gse:named_menuitem('Module',MenuView,
- [{label, {text, "Module Info..."}}, {font,Font},
- {underline,7}]),
-
- gse:named_menuitem('Refresh', MenuView,
- [{label, {text, "Refresh"}}, {font,Font},
- {underline,0}]),
-
- gse:named_menuitem('Show All',MenuView,
- [{label, {text, "Show All Processes"}},
- {font,Font}]),
-
- gse:named_menuitem('Show Selected',MenuView,
- [{label, {text, "Show Processes..."}},
- {font,Font}]),
-
- %% Trace menu
- gs:create(menuitem, 'Kill', MenuTrace, [{label,{text, "Kill"}},
- {font,Font},
- {underline,0}]),
-
- gs:create(menuitem, 'Trace Process', MenuTrace,
- [{label, {text, "Trace Selected Process"}}, {font,Font},
- {underline,0}]),
-
- gs:create(menuitem,'Trace Shell', MenuTrace,
- [{label, {text,"Shell Process"}}, {font,Font},
- {underline,0}]),
-
- %% Help menu
- gs:create(menuitem,'Help', MenuHelp, [{label, {text, "Help" }},
- {font,Font},
- {underline,0}]),
-
- %% Window contents
-
- %% Geometry managing frame
- Frame = gse:frame(Win, [{y,?MENU_HEIGHT},
- {packer_x,[{stretch, 1}]},
- {packer_y,[{stretch,10},
- {fixed,?CHECKBAR_HEIGHT}]}]),
-
-
-
- %% Grid
- Grid_Options = [
- {pack_x,1}, {pack_y,1},
- {fg,black},
- {vscroll,right},{hscroll,bottom},
- calc_columnwidths(739),
- {rows, {1,Size}}],
- Grid = gse:grid(Frame,Grid_Options),
-
-
- %% Checkbutton bar at the bottom of the window
-
- CheckBar = gse:frame(Frame, [{pack_x,1},
- {pack_y,2},
- {packer_x,[{stretch, 2, 100,300},
- {stretch, 2, 100,300},
- {stretch,1},
- {stretch, 2,100,300}]},
- {packer_y,[{stretch,1}]}]),
- gse:named_checkbutton('Hide System',CheckBar,
- [{pack_xy,{1,1}},
- {justify, left},
- {align,w},
- {width, 200},
- {font, Font},
- {label, {text, "Hide System Processes" }}]),
-
- gse:named_checkbutton('Auto Hide New',CheckBar,
- [{pack_xy,{2,1}},
- {width, 200},
- {justify, left},
- {align,w},
- {font, Font},
- {label, {text, "Auto-Hide New" }}]),
-
- gse:named_label('Number Hidden',CheckBar,
- [{pack_xy,{4,1}},
- {justify, left},
- {align,w},
- {width, 200},
- {font, Font},
- {label, {text, ?CPIDHIDDENTEXT }}]),
-
- %% Finalize it!
- gse:map(Win),
- gse:config(Win,[raise]),
- gse:config(Win,[{configure,true}]),
-
-
- {Win, Grid, Frame, length(processes())+1, ?WIN_WIDTH, ?WIN_HEIGHT}.
-
-
-%% Calculate columnwidths in respect to the size of the window.
-
-calc_columnwidths(Width) ->
- if
- Width =< 739 ->
- {columnwidths,[75,215,146,90,105,105]};
- true ->
- S = (Width - 75)/(215+146+90+105+105),
- {columnwidths,[75,round(215*S),round(146*S),round(90*S),
- round(105*S),round(105*S)]}
- end.
-
-%% ---------------------------------------------------------------
-%% Create a trace window
-%%
-%% Process, a process id or an atom
-%%
-%% Return: A window and a editor
-%% ---------------------------------------------------------------
-
-
-window(Process) ->
- GS = gs:start([{kernel,true}]),
- Font = font(GS),
- Win_Options = [{title,title(Process)}, {width,550}, {keypress,true},
- {configure,true},
- {destroy,true},{height, 400}],
- Win = gs:create(window,GS,Win_Options),
-
- MenuBar = gs:create(menubar, Win, []),
-
- %% File menu
- MBFile = gs:create(menubutton,MenuBar,[{label,{text," File "}},
- {font,Font},
- {underline, 1}]),
- MenuFile = gs:create(menu, MBFile, []),
- make_menus(pman_process:is_running(Process), MenuBar, MenuFile,
- Font),
-
- gse:named_menuitem('Save buffer',MenuFile,
- [{label,{text, "Save buffer..."}},
- {font,Font},
- {underline,0}]),
- gse:named_menuitem('Close',MenuFile,
- [{label, {text, "Close"}},
- {font,Font},
- {underline,0}]),
-
-
- Editor = gs:create(editor,Win,[{x,3}, {y,40},
- {width,546}, {height,348},
- {font,Font}]),
- gs:config(Editor, [{keypress, true},{insert, {'end', display(Process)}}]),
- gs:config(Editor, [{enable, false},{vscroll, right}, {hscroll, bottom},
- {wrap,none}]),
- gs:config(Win, [{map, true}]),
- {Win, Editor}.
-
-%% ---------------------------------------------------------------------
-%% Menu Help Fuctions
-%% ---------------------------------------------------------------------
-
-
-links_menus(Links) ->
- gs:destroy('Links'),
- gs:create(menu,'Links','LinksMenu',[]),
- Flag = case links_menus(Links,[]) of
- [] -> false;
- Pids ->
- add_menu('Links', Pids, "Trace"),
- true
- end,
- gse:config('LinksMenu',[{enable,Flag}]).
-
-links_menus([],Pids) -> Pids;
-links_menus([Pid|Links],Pids) when is_pid(Pid) ->
- links_menus(Links,[Pid|Pids]);
-links_menus([_Port|Links],Pids) ->
- links_menus(Links,Pids).
-
-
-%% Create the node menu.
-
-add_node_menu(MenuBar, Nodes, Font) ->
- MBNode = gs:create(menubutton, MenuBar, [{label,{text, " Nodes "}},
- {font,Font},
- {underline, 1}]),
- gs:create(menu, node, MBNode, []),
- add_menu(node, Nodes, "Show", Font),
- gse:disable(node()).
-
-
-%% ---------------------------------------------------------------------
-%% Add Menus in the list under Menu menuitem.
-
-add_menu(Menu, Names, Tag) ->
- add_menu(Menu, Names, Tag, font()).
-
-add_menu(_Menu, [], _Tag, _Font) -> ok;
-add_menu(Menu, [Name|Names], Tag, Font) ->
- Title = io_lib:format("~s ~p",[Tag, Name]),
- gs:create(menuitem,Name,Menu,[{label,{text,Title}},
- {font,Font},
- {data,{Menu,Name}}]),
- add_menu(Menu, Names, Tag, Font).
-
-%% ---------------------------------------------------------------------
-%% Remove a specific menu item, or a whole menu, or a list of both.
-%%
-
-remove_menu(List) when is_list(List)->
- lists:foreach(fun(X) -> gs:destroy(X) end, List);
-
-remove_menu(Object) ->
- gse:destroy(Object).
-
-
-%% ---------------------------------------------------------------------
-%% If the trace window opened is supposed to trace a real pid, let us
-%% add the trace menu, and other items specific to tracing. If not,
-%% the only menus available are the ones in the default defined in
-%% window(Pid).
-
-make_menus(false, _, _, _) -> ok;
-make_menus({true,Pid}, MenuBar, MenuFile, Font) ->
- MBView = gs:create(menubutton,'ViewMenu',MenuBar,
- [{underline,1},
- {label,{text," View "}}, {font,Font},
- {side,left}]),
- MenuView = gs:create(menu, MBView, []),
-
- MBTrace = gs:create(menubutton,'TraceMenu',MenuBar,
- [{underline,1},
- {label,{text," Trace "}}, {font,Font},
- {side,left}]),
- MenuTrace = gs:create(menu, MBTrace, []),
-
-
- MBHelp = gs:create(menubutton,'HelpMenu',MenuBar,
- [{underline,1},
- {label,{text," Help "}}, {font,Font},
- {side,right}]),
- MenuHelp = gs:create(menu, MBHelp, []),
-
- %% File menu
- gse:named_menuitem('Options', MenuFile,
- [{label, {text, "Options..."}}, {font,Font},
- {underline,0}]),
-
- %% Trace menu
- gse:named_menuitem('All Links', MenuTrace,
- [{label, {text, "All Linked Processes"}},
- {font,Font},
- {underline,0}]),
- gse:named_menuitem('LinksMenu', MenuTrace,
- [{underline,0},
- {label, {text, "Linked Process..."}},
- {font,Font},
- {itemtype, cascade},
- {enable,false}]),
- gs:create(menu,'Links','LinksMenu',[]),
- case pman_process:pinfo(Pid, links) of
- Links when is_list(Links) ->
- links_menus(Links);
- undefined ->
- lists:foreach(fun(X) -> gse:disable(X) end,['LinksMenu'])
- end,
- gse:named_menuitem('Kill', MenuTrace,
- [{label, {text, "Kill"}}, {font,Font},
- {underline,0}]),
-
- %% View menu
- gse:named_menuitem('Clear', MenuView,
- [{label, {text, "Clear buffer"}}, {font,Font},
- {underline,0}]),
-
- gse:named_menuitem('Module', MenuView,
- [{label, {text, "Module Info"}}, {font,Font},
- {underline,0}]),
-
- %% Help menu
- gse:named_menuitem('Help', MenuHelp,
- [{label, {text, "Help"}}, {font,Font},
- {underline,0}]).
-
-%% ---------------------------------------------------------------------
-%% Configurate the actual editor
-%%
-%% Editor, actual editor
-%% Options, actual options for the editor
-%%
-%% Return: A configurated editor with the actual options
-%% ---------------------------------------------------------------------
-
-configeditor(Editor, Options) ->
- gs:config(Editor, Options).
-
-%% ---------------------------------------------------------------------
-%% Configure the actual window after it has been resized.
-%% ---------------------------------------------------------------------
-
-configwin(Object, W, H) ->
- Dx = abs(W - gs:read(Object,width) - 4),
- Dy = abs(H - gs:read(Object,height) - 42),
- if
- Dx + Dy =/= 0 ->
- gs:config(Object,[{width,W - 4}]);
- true -> ok
- end.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% update/1, 3
-update(NoOfHidden) ->
- Str = lists:flatten(io_lib:format(?CPIDHIDDENTEXT++"~w",
- [NoOfHidden])),
- gse:config('Number Hidden', [{label, {text,Str}}]).
-
-update(Grid, ShowInfoR, NoOfHidden) ->
-
- %% We reverse the list because we want the processes to appear with
- %% the newest (=highest) pid first in the list.
- ShowInfo = lists:reverse(ShowInfoR),
-
- %% Set the length of the grid
- CGridline = length(ShowInfo) + 1,
- gs:config(Grid, [{rows, {1,CGridline}}]),
-
- %% Add the header line
- add_gridline(Grid,
- 1,
- {'Pid','Current Function','Name','Msgs','Reds','Size'},
- []),
-
- update(NoOfHidden),
-
- %% Recurse through the ordset of pids
- update_r(Grid, ShowInfo, 2).
-
-update_r(Grid, [], Row) ->
- delete_gridlines(Grid, Row);
-update_r(Grid, [{Pid,Func,Name,Msgs,Reds,Psize}|ShowInfo], Row) ->
- {M, F, A} = Func,
- FuncText = lists:flatten(io_lib:format("~w:~w/~w", [M, F, A])),
- add_gridline(Grid,
- Row,
- {Pid, FuncText, Name, Msgs, Reds, Psize},
- [{data,{pidfunc,Pid,Func}}]),
- update_r(Grid, ShowInfo, Row+1).
-
-add_gridline(Grid, Row, Tuple, LIOptSpec) ->
- {Pid, FuncText, Name, Msgs, Reds, Psize} = Tuple,
- LIOpt = [{click,true},
- {doubleclick,true},
- {fg, colour(Row)},
- {text,{1,Pid}},
- {text,{2,FuncText}},
- {text,{3,Name}},
- {text,{4,Msgs}},
- {text,{5,Reds}},
- {text,{6,Psize}} |LIOptSpec],
- case gs:read(Grid, {obj_at_row, Row}) of
- undefined ->
- gse:gridline(Grid,[{row, Row}|LIOpt]);
- GridLine ->
- gs:config(GridLine,LIOpt)
- end.
-
-delete_gridlines(Grid, Row) ->
- case gs:read(Grid, {obj_at_row, Row}) of
- undefined ->
- ok;
- GridLine ->
- gs:destroy(GridLine),
- delete_gridlines(Grid, Row+1)
- end.
-
-colour(1) ->
- ?HEADER_COLOUR;
-colour(_Row) ->
- ?UNSELECTED_COLOUR.
-
-%% Interchange colours between two rows
-change_colour(Grid, Row, Row) ->
- Gitem = gs:read(Grid, {obj_at_row,Row}),
- gs:config(Gitem, {fg,?SELECTED_COLOUR});
-change_colour(Grid, From, To) ->
- Gitem_to = gs:read(Grid, {obj_at_row,To}),
- Gitem_fr = gs:read(Grid, {obj_at_row,From}),
- gs:config(Gitem_to, {fg,?SELECTED_COLOUR}),
- gs:config(Gitem_fr, {fg,colour(From)}).
-
-%% --------------------------------------------------------------
-%% Create a title for the window
-%% Return: the title
-%% --------------------------------------------------------------
-
-title({module, Mod}) ->
- lists:flatten([io_lib:format("Pman: Module info ~p", [Mod])]);
-
-title({shell, Sh} ) ->
- lists:flatten([io_lib:format("Pman: Shell process ~p on ~p",
- [Sh,node(Sh)])]);
-
-title(Sh) ->
- lists:flatten([io_lib:format("Pman: Process ~p on ~p",
- [Sh, node(Sh)]),name(Sh)]).
-name(Pid) ->
- case pman_process:pinfo(Pid, registered_name) of
- undefined -> "";
- Name ->
- lists:flatten([io_lib:format("[~p]", [Name])])
- end.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% module_data/1 - %% Returns the module information for a
-%% module, on a format suitable to insert into a GS editor.
-%%
-%% Arguments:
-%% ModuleName The module
-%%
-%% Returns:
-%% A string with module information.
-%%
-
-module_data(ModuleName) ->
- vformat("", catch apply(ModuleName, module_info, [])).
-
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% display/1 -
-%%
-
-display({_,Pid,_}) -> display(Pid);
-display({_,Pid}) -> display(Pid);
-display(Pid) when is_pid(Pid) ->
- case pman_process:pinfo(Pid) of
- undefined ->
- format('Process is dead~n',[]);
- Other ->
- proc_format(Other)
- end.
-
-%% --------------------------------------------------------------
-%% Format functions for the shell and help window.
-%% --------------------------------------------------------------
-
-vformat(Pad, {M,F,A}) when is_atom(F) ->
- Pad2 = lists:append(Pad,mkpad(io_lib:format("~w:~w",[M,F]))),
- lists:flatten([format("~p:~p", [M,F]),argformat(Pad2, A)]);
-
-vformat(Pad, [H|T]) ->
- kvformat(Pad, [H|T],"[");
-
-vformat(_Pad, X) -> format("~p~n", [X]).
-
-format(Format) -> format(Format, []).
-
-format(Format, Args) ->
- io_lib:format(Format, Args).
-
-
-kvformat(S, [Item],Buff) ->
- lists:reverse([format("\n~s~p]\n",[S,Item])|Buff]);
-
-kvformat(S,[H|T],Buff) ->
- kvformat(S,T,[format("\n~s~p, ",[S,H])|Buff]);
-
-kvformat(_,[],Buff) ->
- lists:reverse(["]\n"|Buff]).
-
-argformat(_Pad,A) when is_integer(A) ->
- format("/~p\n", [A]);
-argformat(_,A) ->
- lists:flatten([format("/~p\n", [length(A)]),
- format("args: \n"),
- argformat2(" ", A)]).
-
-argformat2(Pad, Arglist) ->
- Chars = lists:flatten(io_lib:format("~p",[Arglist])),
- if
- length(Chars) < (70 - length(Pad)) ->
- format("~s~s\n", [Pad, Chars]);
- true ->
- argformat3(Pad, Arglist)
- end.
-
-argformat3(_,[]) -> format("\n");
-argformat3(Pad, [H|T]) ->
- Chars = truncate(65,io_lib:format("~s~p",[Pad, H])),
- format("~s,\n", [Chars]),
- argformat3(Pad, T).
-
-pformat(false) -> [];
-pformat({value,{_, 0}}) -> [];
-pformat({value,{_, []}}) -> [];
-pformat({value, {Key, Vals}}) ->
- Pad = mkpad(io_lib:format("~p ",[Key])),
- format(lists:flatten(["~p: " ,vformat(Pad, Vals), "~n"]), [Key]).
-
-truncate(0, _Chars) -> ".....";
-truncate(I, [H|T]) -> [H|truncate(I-1, T)];
-truncate(_I, []) -> [].
-
-mkpad([_|T]) -> [32|mkpad(T)];
-mkpad([]) -> [].
-
-proc_format(Pi) -> %% process_info struct
- X1 = pformat(lists:keysearch(initial_call, 1, Pi)),
- X2 = pformat(lists:keysearch(current_function, 1,Pi)),
- X3 = pformat(lists:keysearch(messages, 1,Pi)),
- X4 = pformat(lists:keysearch(dictionary,1, Pi)),
- X5 = pformat(lists:keysearch(heap_size, 1,Pi)),
- X6 = pformat(lists:keysearch(stack_size, 1,Pi)),
- X7 = pformat(lists:keysearch(reductions, 1,Pi)),
- X8 = pformat(lists:keysearch(links, 1,Pi)),
- X9 = pformat(lists:keysearch(trap_exit, 1,Pi)),
- lists:flatten([X1, X2, X3, X4, X5,X6,X7,X8,X9]).
-
-
-%% Using the tool_utils function for presenting messages.
-dialog_window(GSParent, Text) ->
- spawn_link(tool_utils, notify, [GSParent, Text]).
-
-%% Create a window with a dismiss button.
-msg_win(Text) ->
- spawn_link(fun() -> display_msg_win(Text) end).
-
-display_msg_win(Text) ->
- GS = gs:start([{kernel,true}]),
- Font = font(GS),
- Win = gs:window(GS, [{width,200}, {height,75}, {destroy,true},
- {title,"Pman Message"}]),
- Can = gs:canvas(Win, [{width,200}, {height, 75},{x,0},{y,0}]),
- gs:text(Can, [{text,Text}, {coords,[{10,0}]}, {justify,center}]),
- Btn = gs:button(Win, [{label,{text,"Dismiss"}}, {font,Font},
- {width,100}, {x,50}, {y,40}]),
- gs:config(Win, {map,true}),
- receive
- {gs, Btn, click, _, _} ->
- ok
- end.
-
-%% Choose default font
-font() ->
- font(gs:start([{kernel,true}])).
-
-font(GS) ->
- case gs:read(GS, {choose_font, {screen,[],12}}) of
- Font when element(1, Font)==screen ->
- Font;
- _ ->
- gs:read(GS, {choose_font, {courier,[],12}})
- end.
diff --git a/lib/pman/src/pman_win.hrl b/lib/pman/src/pman_win.hrl
deleted file mode 100644
index 8a2778d5b7..0000000000
--- a/lib/pman/src/pman_win.hrl
+++ /dev/null
@@ -1,39 +0,0 @@
-%%
-%% %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(WIN_HEIGHT, 390).
--define(WIN_WIDTH, 745).
-
--define(MENU_HEIGHT, 40).
--define(CHECKBAR_HEIGHT, 40).
-
--define(CPIDHIDDENTEXT, "# Hidden: ").
-
--define(HEADER_COLOUR, blue).
--define(UNSELECTED_COLOUR, black).
--define(SELECTED_COLOUR, white).
-
-
-
-
-
-
-
-
-
diff --git a/lib/pman/vsn.mk b/lib/pman/vsn.mk
deleted file mode 100644
index 92fb9df222..0000000000
--- a/lib/pman/vsn.mk
+++ /dev/null
@@ -1 +0,0 @@
-PMAN_VSN = 2.7.1.4
diff --git a/lib/sasl/test/release_handler_SUITE.erl b/lib/sasl/test/release_handler_SUITE.erl
index 5293381af0..a3db2b23db 100644
--- a/lib/sasl/test/release_handler_SUITE.erl
+++ b/lib/sasl/test/release_handler_SUITE.erl
@@ -1793,18 +1793,18 @@ no_dot_erlang(Conf) ->
case os:cmd(Erl ++ Args) of
"DOT_ERLANG_READ" ++ _ -> ok;
Other1 ->
- io:format("Failed: ~s~n",[Erl ++ Args]),
+ io:format("Failed: ~ts~n",[Erl ++ Args]),
io:format("Expected: ~s ++ _~n",["DOT_ERLANG_READ "]),
- io:format("Got: ~s~n",[Other1]),
+ io:format("Got: ~ts~n",[Other1]),
exit(failed_to_start, test_error)
end,
NO_DOT_ERL = " -boot no_dot_erlang",
case os:cmd(Erl ++ NO_DOT_ERL ++ Args) of
"TESTOK" ++ _ -> ok;
Other2 ->
- io:format("Failed: ~s~n",[Erl ++ Args]),
+ io:format("Failed: ~ts~n",[Erl ++ Args]),
io:format("Expected: ~s~n",["TESTOK"]),
- io:format("Got: ~s~n",[Other2]),
+ io:format("Got: ~ts~n",[Other2]),
exit(failed_to_start, no_dot_erlang)
end
after
diff --git a/lib/test_server/src/ts_lib.erl b/lib/test_server/src/ts_lib.erl
index 52bb346043..9f56f59fed 100644
--- a/lib/test_server/src/ts_lib.erl
+++ b/lib/test_server/src/ts_lib.erl
@@ -145,16 +145,13 @@ suite_order(sasl) -> 16;
suite_order(tools) -> 18;
suite_order(runtime_tools) -> 19;
suite_order(parsetools) -> 20;
-suite_order(pman) -> 21;
suite_order(debugger) -> 22;
-suite_order(toolbar) -> 23;
suite_order(ic) -> 24;
suite_order(orber) -> 26;
suite_order(inets) -> 28;
suite_order(asn1) -> 30;
suite_order(os_mon) -> 32;
suite_order(snmp) -> 38;
-suite_order(mnesia_session) -> 42;
suite_order(mnesia) -> 44;
suite_order(system) -> 999; %% IMPORTANT: system SHOULD always be last!
suite_order(_) -> 200.
diff --git a/lib/toolbar/AUTHORS b/lib/toolbar/AUTHORS
deleted file mode 100644
index c5a649d938..0000000000
--- a/lib/toolbar/AUTHORS
+++ /dev/null
@@ -1,3 +0,0 @@
-Original Authors and Contributors:
-
-Gunilla Arendt \ No newline at end of file
diff --git a/lib/toolbar/Makefile b/lib/toolbar/Makefile
deleted file mode 100644
index 5326457976..0000000000
--- a/lib/toolbar/Makefile
+++ /dev/null
@@ -1,36 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1996-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 doc/src
-
-include vsn.mk
-VSN = $(TOOLBAR_VSN)
-
-SPECIAL_TARGETS =
-
-# ----------------------------------------------------
-# Default Subdir Targets
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_subdir.mk
diff --git a/lib/toolbar/doc/html/.gitignore b/lib/toolbar/doc/html/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/toolbar/doc/html/.gitignore
+++ /dev/null
diff --git a/lib/toolbar/doc/man3/.gitignore b/lib/toolbar/doc/man3/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/toolbar/doc/man3/.gitignore
+++ /dev/null
diff --git a/lib/toolbar/doc/pdf/.gitignore b/lib/toolbar/doc/pdf/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/toolbar/doc/pdf/.gitignore
+++ /dev/null
diff --git a/lib/toolbar/doc/src/Makefile b/lib/toolbar/doc/src/Makefile
deleted file mode 100644
index 2239421556..0000000000
--- a/lib/toolbar/doc/src/Makefile
+++ /dev/null
@@ -1,115 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1997-2012. 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=$(TOOLBAR_VSN)
-APPLICATION=toolbar
-
-# ----------------------------------------------------
-# Release directory specification
-# ----------------------------------------------------
-RELSYSDIR = $(RELEASE_PATH)/lib/$(APPLICATION)-$(VSN)
-
-# ----------------------------------------------------
-# Target Specs
-# ----------------------------------------------------
-XML_APPLICATION_FILES = ref_man.xml
-XML_REF3_FILES = toolbar.xml
-
-XML_PART_FILES = part.xml part_notes.xml
-XML_CHAPTER_FILES = toolbar_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 = \
- bar.gif \
- create_tool.gif \
- note.gif
-
-# ----------------------------------------------------
-
-HTML_FILES = $(XML_APPLICATION_FILES:%.xml=$(HTMLDIR)/%.html) \
- $(XML_PART_FILES:%.xml=$(HTMLDIR)/%.html)
-
-INFO_FILE = ../../info
-
-MAN3_FILES = $(XML_REF3_FILES:%.xml=$(MAN3DIR)/%.3)
-
-HTML_REF_MAN_FILE = $(HTMLDIR)/index.html
-
-TOP_PDF_FILE = $(PDFDIR)/$(APPLICATION)-$(VSN).pdf
-
-# ----------------------------------------------------
-# FLAGS
-# ----------------------------------------------------
-XML_FLAGS +=
-DVIPS_FLAGS +=
-
-# ----------------------------------------------------
-# Targets
-# ----------------------------------------------------
-$(HTMLDIR)/%.gif: %.gif
- $(INSTALL_DATA) $< $@
-
-docs: pdf html man
-
-$(TOP_PDF_FILE): $(XML_FILES)
-
-pdf: $(TOP_PDF_FILE)
-
-html: gifs $(HTML_REF_MAN_FILE)
-
-man: $(MAN3_FILES)
-
-gifs: $(GIF_FILES:%=$(HTMLDIR)/%)
-
-debug opt:
-
-clean clean_docs:
- rm -rf $(HTMLDIR)/*
- rm -f $(MAN3DIR)/*
- rm -f $(TOP_PDF_FILE) $(TOP_PDF_FILE:%.pdf=%.fo)
- rm -f errs core *~
-
-# ----------------------------------------------------
-# Release Target
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_release_targets.mk
-
-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) $(MAN3DIR)/* "$(RELEASE_PATH)/man/man3"
-
-release_spec:
-
diff --git a/lib/toolbar/doc/src/bar.gif b/lib/toolbar/doc/src/bar.gif
deleted file mode 100644
index c249d891dd..0000000000
--- a/lib/toolbar/doc/src/bar.gif
+++ /dev/null
Binary files differ
diff --git a/lib/toolbar/doc/src/bar.ps b/lib/toolbar/doc/src/bar.ps
deleted file mode 100644
index 850ebdbee5..0000000000
--- a/lib/toolbar/doc/src/bar.ps
+++ /dev/null
@@ -1,846 +0,0 @@
-%!PS-Adobe-2.0 EPSF-2.0
-%%Title: /home/kent/otp/toolbar/doc/bar.ps
-%%Creator: XV Version 3.10a Rev: 12/29/94 - by John Bradley
-%%BoundingBox: 165 346 447 446
-%%Pages: 1
-%%DocumentFonts:
-%%EndComments
-%%EndProlog
-
-%%Page: 1 1
-
-% remember original state
-/origstate save def
-
-% build a temporary dictionary
-20 dict begin
-
-% define string to hold a scanline's worth of data
-/pix 282 string def
-
-% define space for color conversions
-/grays 282 string def % space for gray scale line
-/npixls 0 def
-/rgbindx 0 def
-
-% lower left corner
-165 346 translate
-
-% size of image (on paper, in 1/72inch coords)
-282.02400 100.00800 scale
-
-282 100 8 % dimensions of data
-[282 0 0 -100 0 100] % mapping matrix
-{currentfile pix readhexstring pop}
-image
-
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c000
-c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffff7300
-c0ffc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c07300
-c0ffc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c07300
-c0ffc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c07300
-c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-14141414141414141414141414141414141414141414141414c0c0c07300
-c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-14141414141414141414141414141414141414141414141414c0c0c07300
-c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414ffffffffffffffffffffffffffffff00ffffffffffffffffffffff
-ffffffff001414ffffffffffffffffffffffffffffff001414c0c0c07300
-c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414ffc0c0c0c0c0c0c0c0c0c0c0c0c07300ffc0c0c0c0c0c0c0c0c0c0
-c0c0c073001414ffc0c0c0c0c0c0c0c0c0c0c0c0c073001414c0c0c07300
-c0ffc0c0c01414141457575757571414141414141457141414141414ffffffffffff1414
-14141414ffff1414141414141414141414141414141414141414141414141414ffffffff
-ffffffff1414141414141414141414141414ffff14141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414ffc0c0c0c0c0c0c0c0c0c0c0c0c07300ffc0c00000000000000000
-00c0c073001414ffc0c0c0c0c0c0c0c0c0c0c0c0c073001414c0c0c07300
-c0ffc0c0c01414141414575757575714141414145714141414141414ffff141414141414
-14141414ffff1414141414141414141414141414141414141414141414141414141414ff
-ff1414141414141414141414141414141414ffff14141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414ffc0c0c0c0c0c0c0c0c0c0c0c0c07300ffc0c00000000000000000
-00c0c073001414ffc0c0c00000c0c0c0c00000c0c073001414c0c0c07300
-c0ffc0c0c01414141414145757575757141414571414141414141414ffff1414141414ff
-ff14ffffffff1414ffffffff1414ffff14ffff141414ffff14ffff1414141414141414ff
-ff14141414ffffffff141414ffffffff1414ffff1414ffffffff14141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414ffc0c0c0c0c0c0c0c0c0c0c0c0c07300ffc0c000c0c0c0c0c0c0c0
-00c0c073001414ffc0c0c0c00000c0c00000c0c0c073001414c0c0c07300
-c0ffc0c0c01414141414141457575757571457141414141414141414ffff1414141414ff
-ffffffffffff14ffff1414ffff14ffffff14ffff14ffff14ffffff1414141414141414ff
-ff141414ffff1414ffff14ffff1414ffff14ffff14ffff1414ffff141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414ffc0c0c0c0c0c0c0c0c0c0c0c0c07300ffc0c000c0c0c0c0c0c0c0
-00c0c073001414ffc0c0c0c0c000000000c0c0c0c073001414c0c0c07300
-c0ffc0c0c01414141414141414575757145714141414141414141414ffffffffffff14ff
-ffff1414ffff1414141414ffff14ffff1414ffff14ffff1414ffff1414141414141414ff
-ff141414ffff1414ffff14ffff1414ffff14ffff14ffffff141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414ffc0c0c0c0c0c0c0c0c0c0c0c0c07300ffc0c000c0c0c0c0c0c0c0
-00c0c073001414ffc0c0c0c0c0c00000c0c0c0c0c073001414c0c0c07300
-c0ffc0c0c01414141414141414145714575757141414141414141414ffff1414141414ff
-ff141414ffff1414ffffffffff14ffff1414ffff14ffff1414ffff1414141414141414ff
-ff141414ffff1414ffff14ffff1414ffff14ffff141414ffffff14141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414ffc0c0c0c0c0c0c0c0c0c0c0c0c07300ffc0c000c0c0c0c0c0c0c0
-00c0c073001414ffc0c0c0c0c000000000c0c0c0c073001414c0c0c07300
-c0ffc0c0c01414141414141414571457575757571414141414141414ffff1414141414ff
-ff141414ffff14ffff1414ffff14ffff1414ffff14ffff1414ffff1414141414141414ff
-ff141414ffff1414ffff14ffff1414ffff14ffff14141414ffffff141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414ffc0c0c0c0c0c0c0c0c0c0c0c0c07300ffc0c000c0c0c0c0c0c0c0
-00c0c073001414ffc0c0c0c00000c0c00000c0c0c073001414c0c0c07300
-c0ffc0c0c01414141414141457141414575757575714141414141414ffff1414141414ff
-ff141414ffff14ffff1414ffff14ffff1414ffff14ffff14ffffff1414141414141414ff
-ff141414ffff1414ffff14ffff1414ffff14ffff14ffff1414ffff141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414ffc0c0c0000000000000c0c0c0c07300ffc0c000c0c0c0c0c0c0c0
-00c0c073001414ffc0c0c00000c0c0c0c00000c0c073001414c0c0c07300
-c0ffc0c0c01414141414145714141414145757575757141414141414ffffffffffff14ff
-ff141414ffff1414ffffff14ffffffff1414ffff1414ffff14ffff1414141414141414ff
-ff14141414ffffffff141414ffffffff1414ffff1414ffffffff14141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414ffc0c0c0000000000000c0c0c0c07300ffc0c00000000000000000
-00c0c073001414ffc0c0c0c0c0c0c0c0c0c0c0c0c073001414c0c0c07300
-c0ffc0c0c014141414145714141414141414575757575714141414141414141414141414
-14141414141414141414141414141414141414141414141414ffff141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414ffc0c0c0c0c0c0c0c0c0c0c0c0c07300ffc0c0c0c0c0c0c0c0c0c0
-c0c0c073001414ffc0c0c0c0c0c0c0c0c0c0c0c0c073001414c0c0c07300
-c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414ffff1414ffff141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414ff737373737373737373737373737300ff73737373737373737373
-73737373001414ff7373737373737373737373737373001414c0c0c07300
-c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414
-14141414141414141414141414141414141414141414ffffffff14141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414000000000000000000000000000000000000000000000000000000
-00000000001414000000000000000000000000000000001414c0c0c07300
-c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-14141414141414141414141414141414141414141414141414c0c0c07300
-c0ffc0c0c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffc0c0c07300
-c0ffc0c0c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffff82c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d90000000000d9d9d9d9d900d9d9d9d9000000d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d90000000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d90000
-00d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9
-d9d9d9d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-00d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9
-d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d900d9d9d9d9d9d9d9000000d9d9d9d9d9d900d9d9d9d90000
-00d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9000000d9d9d9d9000000d9d9d9d9d9d9
-00d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9
-000000d9d9d9d9d9d900d9d9d900d90000d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d900d9d9d9d9d9d9d9d9d900d9d9d9d9d9d900d9d9d900d9d9
-d900d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9
-00d9d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d900
-d9d9d900d9d9d9d9d900d9d9d90000d9d900d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d900000000d9d9d9d9d9d900d9d9d9d9d9d900d9d9d900d9d9
-d900d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9
-00d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d90000000000d9d900
-d9d9d900d9d9d9d9d900d9d9d900d9d9d900d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d900d9d9d9d9d9d9d9d9d900d9d9d9d9d9d900d9d9d9000000
-0000d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9
-00d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d900
-00000000d9d9d9d9d900d9d9d900d9d9d900d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d900d9d9d9d9d9d9d9d9d900d9d9d9d9d9d900d9d9d900d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9
-00d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d900
-d9d9d9d9d9d9d9d9d900d9d9d900d9d9d900d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d900d9d9d9d9d9d9d9d9d900d9d9d9d9d9d900d9d9d900d9d9
-d900d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9
-00d9d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d900
-d9d9d900d9d9d9d9d900d9d9d90000d9d900d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d900d9d9d9d9d9d9d9d9d900d9d9d9d9d9d900d9d9d9d90000
-00d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9000000d9d9d9d9000000d9d9d9d9d9d9
-00d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9
-000000d9d9d9d9d9d900d9d9d900d90000d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffff8282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-82828282828282828282828282828282828282828282828282c0c0c07300
-c0ffc0c0c0ff828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-82828282828282828282828282828282828282828282828282c0c0c07300
-c0ffc0c0c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffff57c0c0c07300
-c0ffc0c0c0ffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d957c0c0c07300
-c0ffc0c0c0ffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d957c0c0c07300
-c0ffc0c0c0ffd9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebe
-bed9ffffd9d9d4d4d4d4d4d9d9d9dbbdd0dbd9d9d9d9d9d9d9dec7a9ded9d9d5d4d4d4d9
-ffffd9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffff
-d9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9
-bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d97d7d
-7d7d7d7d7474747474747474727272747474747474747474747474d9ffffd9d9bebebebe
-bebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d95757bebebebe
-bebebebebebebebebebebebebebebebebebebebebe5757d957c0c0c07300
-c0ffc0c0c0ffd9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebe
-bed9ffffd9d9d4d4d4d4d4d9d9d9dcd0a9dadad9dbdbd9d9dcd0a9d0dcd9d9d5d4d4d4d9
-ffffd9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffff
-d9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9
-bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d97d7d
-7d7d7d747474747472727272727272727272747474747474747474d9ffffd9d9bebebebe
-bebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9575757bebebe
-bebebebebebebebebebebebebebebebebebebebe575757d957c0c0c07300
-c0ffc0c0c0ffd9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebe
-bed9ffffd9d9d4d4d4d4d4d9d9dad0c3bdb3dadcd4d5dbdbc7b3d0e1d5d9d9d5d4d4d4d9
-ffffd9d9bebebebebebebebebebe000000000000000000bebebebebebebebebebed9ffff
-d9d9bebebebebed7d7d7bebebebebebebebebebebebebebebebebebebebebed9ffffd9d9
-bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d97d7d
-7d7d74747474727272727272727272777777727274747474747474d9ffffd9d9bebebebe
-bebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9be575757bebe
-bebebebebebebebebebebebebebebebebebebe57575757d957c0c0c07300
-c0ffc0c0c0ffd9d9bebebe000000000000000000000000000000000000007dbebebebebe
-bed9ffffd9d9d4d4d4d4d4d9d9dcc79ce1bda9bd6f60a9bdbddbe5a9a9d0dad5d4d4d4d9
-ffffd9d9bebebebebebebebebebe007f7f7f7f7f7f7f00bebebebebebebebebebed9ffff
-d9d9bebebebed7d7d7d7d7bebebebebebebebebebebebebebebebebebebebed9ffffd9d9
-bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d97d7d
-7d7d747474727272727272727277779e769e777772727474747474d9ffffd9d9bebebebe
-bebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9bebe575757be
-bebebebebebebebebebebebebebebebebebe57575757bed957c0c0c07300
-c0ffc0c0c0ffd9d9bebe007d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d007dbebebebe
-bed9ffffd9d9d4d4d4d4d4d9d9dbd083bde5bd8f536f9cc3dedea96fa9bddcd5d4d4d4d9
-ffffd9d9bebebebebebebebebebe007f7f7f7f7f7f7f00bebebebebebebebebebed9ffff
-d9d9bebebed7d7d7d7d7d7d7bebebebebebebebebebebebebebebebebebebed9ffffd9d9
-bebebebe000000000000000000000000000000000000000000bebebebed9ffffd9d97d7d
-7d747472727272727272727777779e9e7695897777727274747474d9ffffd9d9bebebebe
-000000000000bebebebebebebebebe000000000000bebebebed9ffffd9d9bebebe575757
-bebebebebe00000000000000bebebebebe57575757bebed957c0c0c07300
-c0ffc0c0c0ffd9d9bebe007d00000000000000000000000000000000007d007dbebebebe
-bed9ffffd9d9d4d4d4d4d4d9d9d9e1b379ded6831f6083d0e58379deded9d9d5d4d4d4d9
-ffffd9d9bebebebebebebebebebe000000000000000000bebebebebebebebebebed9ffff
-d9d9bebebed7d7d7d7d7d7d7bebebebebebebebebebebebebebebebebebebed9ffffd9d9
-bebebebe005151515100515151510051515151005151515100bebebebed9ffffd9d97d7d
-7d7472727272727272727777779e9e7697a6829e77777272747474d9ffffd9d9bebebebe
-002727272700bebebebebebebebebe005757575700bebebebed9ffffd9d9bebebebe5757
-57bebebe0000ffffffffff000000bebe57575757bebebed957c0c0c07300
-c0ffc0c0c0ffd9d9bebe007d00272727272727272727272727272727007d007dbebebebe
-bed9ffffd9d9d4d4d4d4d4d9d9d9dcd03cc3d948531f3cdcda60c3ded9d9d9d5d4d4d4d9
-ffffd9d9bebebebebebebebebebebebebebe00bebebebebebebebebebebebebebed9ffff
-d9d9bebebed7d7d7d7d7d7d7bebebebebebebebebebebebebebebebebebebed9ffffd9d9
-bebebebe005151515100515151510051515151005151515100bebebebed9ffffd9d97d7d
-7474727272727272727777777789899d00008d899e777272727474d9ffffd9d9bebebebe
-002727272700bebebebebebebebebe005757575700bebebebed9ffffd9d9bebebebebe57
-5757be0000ffffffffffffffff00be57575757bebebebed957c0c0c07300
-c0ffc0c0c0ffd9d9bebe007d0027ffff2727ff2727ffff2727ffff27007d007dbebebebe
-bed9ffffd9d9d4d4d4d4d4d9d9d9d9ea79a99c489c3c11a99c83e5d9d9d9d9d5d4d4d4d9
-ffffd9d9bebebebebebebebebebebebebebe00bebebebebebebebebebebebebebed9ffff
-d9d9bebebebed7d7d7d7d7bebebebebebebebebebebebebebebebebebebebed9ffffd9d9
-bebebebe005151515100515151510051515151005151515100bebebebed9ffffd9d97d7d
-7472727272727272777777897f8d7f7f40007f9782827772727274d9ffffd9d9bebebebe
-002727272700bebebebebebebebebe005757575700bebebebed9ffffd9d9bebebebebebe
-57575700ffffffffffffffffffff57575757bebebebebed957c0c0c07300
-c0ffc0c0c0ffd9d9bebe007d00272727272727272727272727272727007d007dbebebebe
-bed9ffffd9d9d4d4d4d4d4d9d9d9d9e1a9606f1f532a116f48bdded9d9d9d9d5d4d4d4d9
-ffffd9d9bebebebebebe00000000000000000000000000000000bebebebebebebed9ffff
-d9d9bebebebebed7d7d7bebebebebebebebebebebebed7d7d7bebebebebebed9ffffd9d9
-bebebebe005151515100515151510051515151005151515100bebebebed9ffffd9d97d7d
-7272727272727277779e9e897f005600000000007f959e72727274d9ffffd9d9bebebebe
-002727272700bebebebebebebebebe005757575700bebebebed9ffffd9d9bebebebebebe
-be575757ffff00ffffffff00ff57575700bebebebebebed957c0c0c07300
-c0ffc0c0c0ffd9d9bebe007d0027ffff2727ff2727ffff2727ffff27007d007dbebebebe
-bed9ffffd9d9d4d4d4d4d4d9d9d9d9d9ea9c3648362a1148d0ded9d9d9d9d9d5d4d4d4d9
-ffffd9d9bebebebebebe00bebebebebebebebebebebebebebe00bebebebebebebed9ffff
-d9d9bebebebebebebe00bebebebebebebebebebebed7d7d7d7d7bebebebebed9ffffd9d9
-bebebebe000000000000000000000000000000000000000000bebebebed9ffffd9d97d74
-727272727272779e9e9e8976970000000000000000009e77727272d9ffffd9d9bebebebe
-000000000000bebebebe0000000000000000000000bebebebed9ffffd9d9bebebebebebe
-0000575757ffff00ffff00ff575757000000bebebebebed957c0c0c07300
-c0ffc0c0c0ffd9d9bebe007d00272727272727272727272727272727007d007dbebebebe
-bed9ffffd9d9d4d4d4d4d4d9d9d9dae5a9534883363c1f1fb3dedcd9d9d9d9d5d4d4d4d9
-ffffd9d9bebebebebebe00bebebebebebebebebebebebebebe00bebebebebebebed9ffff
-d9d9bebebebebebebe00bebebebebebebebebebed7d7d7d7d7d7d7bebebebed9ffffd9d9
-bebebebe00515151510051ffff510051000051005151515100bebebebed9ffffd9d97d72
-727272779e8982828282827d000000000000000000008977727272d9ffffd9d9bebebebe
-007f7f7f7f00bebebebe0027272727007f7f7f7f00bebebebed9ffffd9d9bebebebebebe
-000000575757ffffffffff57575700000000bebebebebed957c0c0c07300
-c0ffc0c0c0ffd9d9bebe007d0027ffff2727ff2727ffff2727ffff27007d007dbebebebe
-bed9ffffd9d9d4d4d4d4d4d9d9d9e59c36606083603c2a1f5379dbdbd9d9d9d5d4d4d4d9
-ffffd9d9bebe000000000000000000bebebebebebe000000000000000000bebebed9ffff
-d9d9bebebebebebebebe00bebebebebebebebebed7d7d7d7d7d7d7bebebebed9ffffd9d9
-bebebebe005151515100ffffffff0000000000005151515100bebebebed9ffffd9d97d72
-727777779e893197958d8d89000000000000000000008977727272d9ffffd9d9bebebebe
-007f7f7f7f00bebebebe0027272727007f7f7f7f00bebebebed9ffffd9d9bebebebebebe
-00ff0000575757000000575757000000ff00bebebebebed957c0c0c07300
-c0ffc0c0c0ffd9d9bebe007d00272727272727272727272727272727007d007dbebebebe
-bed9ffffd9d9d4d4d4d4d4d9d9e1a953bd79608f8348302ab34879dedad9d9d5d4d4d4d9
-ffffd9d9bebe005757575757575700bebebebebebe007f7f7f7f7f7f7f00bebebed9ffff
-d9d9bebebebebebebebe00bebebebebebebebebed7d7d7d7d7d7d7bebebebed9ffffd9d9
-bebebebe005151515100ffffffff0000000000005151515100bebebebed9ffffd9d97d72
-7777779e9e823800006e7f00000000000000000000008977727272d9ffffd9d9bebebebe
-007f7f7f7f00bebebebe0027272727007f7f7f7f00bebebebed9ffffd9d9bebebebebe00
-ffff00000057575700575757000000ffffff00bebebebed957c0c0c07300
-c0ffc0c0c0ffd9d9bebe007d0027ffff2727ff2727ffff2727ffff27007d007dbebebebe
-bed9ffffd9d9d4d4d4d4d4d9dbdb53b3ea6f798f7930301fd4a92ad0dcd9d9d5d4d4d4d9
-ffffd9d9bebe005757575757575700bebebebebebe007f7f7f7f7f7f7f00bebebed9ffff
-d9d9bebebebebebebebebe00bebebebebebebebebed7d7d7d7d7bebebebebed9ffffd9d9
-bebebebe00515151510051ffff510051000051005151515100bebebebed9ffffd9d97d77
-77778989567f000000000000000000000000000000009e77727272d9ffffd9d9bebebebe
-007f7f7f7f00bebebebe0027272727007f7f7f7f00bebebebed9ffffd9d9bebebebebe00
-ffffff000000575757575700000000ffffff00bebebebed957c0c0c07300
-c0ffc0c0c0ffd9d9bebe007d00272727272727272727272727272727007d007dbebebebe
-bed9ffffd9d9d4d4d4d4d4d9e1a99cdee58f6f9c6f303c1fb3e560bde1d9d9d5d4d4d4d9
-ffffd9d9bebe000000000000000000bebebebebebe000000000000000000bebebed9ffff
-d9d9bebebebebebebebebe00bebebebebebebebebe00d7d7d7bebebebebebed9ffffd9d9
-bebebebe000000000000000000000000000000000000000000bebebebed9ffffd9d97d9e
-8282768d9500000000000000000000000000000000899e77777272d9ffffd9d9bebebebe
-000000000000000000000000000000000000000000bebebebed9ffffd9d9bebebebebe00
-ffffffff00000057575700000000ffffffff00bebebebed957c0c0c07300
-c0ffc0c0c0ffd9d9bebe007d00272727272727272727272727272727007d007dbebebebe
-bed9ffffd9d9d4d4d4d4d4dbd06fd4e19c48608f532a3630bdeaa953d0ded9d5d4d4d4d9
-ffffd9d9bebebebebebebebebebebebebebebebebebebebebe00bebebebebebebed9ffff
-d9d9bebebebebebebebebebe00bebebebebebebe00bebebebebebebebebebed9ffffd9d9
-bebebebe005151515100510000510051ffff51005151515100bebebebed9ffffd9d97d9e
-8282768d9500000000000000000000000000000000899e77777272d9ffffd9d9bebebebe
-005757575700d7d7d7d7005757575700ffffffff00bebebebed9ffffd9d9bebebebebe00
-ffffffffff0057575757570000ffffffffff00bebebebed957c0c0c07300
-c0ffc0c0c0ffd9d9bebe007d00000000000000000000000000000000007d007dbebebebe
-bed9ffffd9d9d4d4d4d4d5de6f79ea9c112a606f6f3c11116fc7ea606fdad9d5d4d4d4d9
-ffffd9d9bebebebebebebebebebebebebebebebebebebebebe00bebebebebebebed9ffff
-d9d9bebebebebebebebebebe00bebebebebebe00bebebebebebebebebebebed9ffffd9d9
-bebebebe0051515151000000000000ffffffff005151515100bebebebed9ffffd9d97d77
-77778989567f000000000000000000000000000000009e77727272d9ffffd9d9bebebebe
-005757575700d7d7d7d7005757575700ffffffff00bebebebed9ffffd9d9bebebebebe00
-ffff00ffffff575700575757ffffff00ffff00bebebebed957c0c0c07300
-c0ffc0c0c0ffd9d9bebe007d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d007dbebebebe
-bed9ffffd9d9d4d4d4d4d6d053c7c71f1f3c484848361f034860a9d57983d9d6d4d4d4d9
-ffffd9d9bebebebebebebebebe00000000000000000000000000bebebebebebebed9ffff
-d9d9bebebebebebebebebebebe00bebebebebe00bebebebebebebebebebebed9ffffd9d9
-bebebebe0051515151000000000000ffffffff005151515100bebebebed9ffffd9d97d72
-7777779e9e823800006e7f00000000000000000000008977727272d9ffffd9d9bebebebe
-005757575700d7d7d7d7005757575700ffffffff00bebebebed9ffffd9d9bebebebebe00
-ffff00ffff570057ffff575757ffff00ffff00bebebebed957c0c0c07300
-c0ffc0c0c0ffd9d9bebebe000000000000000000000000000000000000007d7d7dbebebe
-bed9ffffd9d9d4d4d4d4d6d0a9da601130363648111f111160303cc7d09cd4d6d4d4d4d9
-ffffd9d9bebebebebebebebebe00bebebebebebebebebebebe00bebebebebebebed9ffff
-d9d9bebebebebebebebebebebe00be7f7f7f00bebebebebebebebebebebebed9ffffd9d9
-bebebebe005151515100510000510051ffff51005151515100bebebebed9ffffd9d97d72
-727777779e893197958d8d89000000000000000000008977727272d9ffffd9d9bebebebe
-005757575700d7d7d7d7005757575700ffffffff00bebebebed9ffffd9d9bebebebebe00
-ffff000057005700ffff005757570000ffff00bebebebed957c0c0c07300
-c0ffc0c0c0ffd9d9be00000000000000000000000000000000000000000000007dbebebe
-bed9ffffd9d9d4d4d4d4d4d9e5bd111f489c1f2a11030330bd79366fe5dedad5d4d4d4d9
-ffffd9d9bebebebebe000000000000000000bebebe000000000000000000bebebed9ffff
-d9d9bebebebebebebebebebebebe7f7f7f7f7fbebebebebebebebebebebebed9ffffd9d9
-bebebebe000000000000000000000000000000000000000000bebebebed9ffffd9d97d72
-727272779e8982828282827d000000000000000000008977727272d9ffffd9d9bebebebe
-000000000000000000000000000000000000000000bebebebed9ffffd9d9bebebebebebe
-00ffff570057ff0000000000575757ffffff00bebebebed957c0c0c07300
-c0ffc0c0c0ffd9d9be007d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d007dbebe
-bed9ffffd9d9d4d4d4d4d4d9e58f0379d6d653111f11116fead41f83e5dad9d5d4d4d4d9
-ffffd9d9bebebebebe007f7f7f7f7f7f7f00bebebe005757575757575700bebebed9ffff
-d9d9bebebebebebebebebebebe7f7f7f7f7f7f7fbebebebebebebebebebebed9ffffd9d9
-bebebebe005151515100515151510051515151005151515100bebebebed9ffffd9d97d74
-727272727272779e9e9e8976970000000000000000009e77727272d9ffffd9d9bebebebe
-00d7d7d7d700ffffffff007f7f7f7f002727272700bebebebed9ffffd9d9bebebebebebe
-00ff5757570000000000000000575757ff00bebebebebed957c0c0c07300
-c0ffc0c0c0ffd9d9be007d7d007d007d007d007d007d007d007d007d007d7d007d7dbebe
-bed9ffffd9d9d4d4d4d4d4d9e57903c7e5e5831103032ac3ea8f48d0dcd9d9d5d4d4d4d9
-ffffd9d9bebebebebe007f7f7f7f7f7f7f00bebebe005757575757575700bebebed9ffff
-d9d9bebebebebebebebebebebe7f7f7f7f7f7f7fbebebebebebebebebebebed9ffffd9d9
-bebebebe005151515100515151510051515151005151515100bebebebed9ffffd9d97d7d
-7272727272727277779e9e897f005600000000007f959e72727274d9ffffd9d9bebebebe
-00d7d7d7d700ffffffff007f7f7f7f002727272700bebebebed9ffffd9d9bebebebebebe
-be57575700000000000000000000575757bebebebebebed957c0c0c07300
-c0ffc0c0c0ffd9d9be007d00be00be00be00be00be00be00be00be00be007d007d7dbebe
-bed9ffffd9d9d4d4d4d4d4d9debd2a60dee1d060112a9ceac3368fe5d9d9d9d5d4d4d4d9
-ffffd9d9bebebebebe000000000000000000bebebe000000000000000000bebebed9ffff
-d9d9bebebebebebebebebebebe7f7f7f7f7f7f7fbebebebebebebebebebebed9ffffd9d9
-bebebebe005151515100515151510051515151005151515100bebebebed9ffffd9d97d7d
-7472727272727272777777897f8d7f7f40007f9782827772727274d9ffffd9d9bebebebe
-00d7d7d7d700ffffffff007f7f7f7f002727272700bebebebed9ffffd9d9bebebebebebe
-57575700ff0000ff0000ff0000ffff575757bebebebebed957c0c0c07300
-c0ffc0c0c0ffd9d9be007d7d007d007d007d007d007d007d007d007d007d7d00007dbebe
-bed9ffffd9d9d4d4d4d4d4d9d9e1c34860d9e5d6a9c3e5c7481fd0ded9d9d9d5d4d4d4d9
-ffffd9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffff
-d9d9bebebebebebebebebebebebe7f7f7f7f7fbebebebebebebebebebebebed9ffffd9d9
-bebebebe005151515100515151510051515151005151515100bebebebed9ffffd9d97d7d
-7474727272727272727777777789899d00008d899e777272727474d9ffffd9d9bebebebe
-00d7d7d7d700ffffffff007f7f7f7f002727272700bebebebed9ffffd9d9bebebebebe57
-5757be0000ffffffffffffffffff00be575757bebebebed957c0c0c07300
-c0ffc0c0c0ffd9d9be007d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d0000bebe
-bed9ffffd9d9d4d4d4d4d4d9d9d9e1d65360d4e1deded453308fe1d9d9d9d9d5d4d4d4d9
-ffffd9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffff
-d9d9bebebebebebebebebebebebebe7f7f7fbebebebebebebebebebebebebed9ffffd9d9
-bebebebe000000000000000000000000000000000000000000bebebebed9ffffd9d97d7d
-7d7472727272727272727777779e9e7697a6829e77777272747474d9ffffd9d9bebebebe
-000000000000000000000000000000000000000000bebebebed9ffffd9d9bebebebe5757
-57bebebe00ffffffffffffff0000bebebe575757bebebed957c0c0c07300
-c0ffc0c0c0ffd9d9be007d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d0000bebe
-bed9ffffd9d9d4d4d4d4d4d9d9d9d9dee13c60d9dbdebd7960d0dcd9d9d9d9d5d4d4d4d9
-ffffd9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffff
-d9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9
-bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d97d7d
-7d747472727272727272727777779e9e7695897777727274747474d9ffffd9d9bebebebe
-bebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9bebebe575757
-bebebebebe00000000000000bebebebebebe575757bebed957c0c0c07300
-c0ffc0c0c0ffd9d9be0000000000000000000000000000000000000000000000007dbebe
-bed9ffffd9d9d4d4d4d4d4d9d9dadee19c2a8fc7dcd9dcde83bde1d9d9d9d9d5d4d4d4d9
-ffffd9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffff
-d9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9
-bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d97d7d
-7d7d747474727272727272727277779e769e777772727474747474d9ffffd9d9bebebebe
-bebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9bebe575757be
-bebebebebebebebebebebebebebebebebebebe575757bed957c0c0c07300
-c0ffc0c0c0ffd9d9bebebe7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7dbebe
-bed9ffffd9d9d4d4d4d4d4d9dad0bd9c9cb3dedbd9d9d9dbd083c3dcd9d9d9d5d4d4d4d9
-ffffd9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffff
-d9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9
-bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d97d7d
-7d7d74747474727272727272727272777777727274747474747474d9ffffd9d9bebebebe
-bebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9be575757bebe
-bebebebebebebebebebebebebebebebebebebebe575757d957c0c0c07300
-c0ffc0c0c0ffd9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebe
-bed9ffffd9d9d4d4d4d4d4d9dbd09ca9e5e1dad9d9d9d9d9debda9d6dad9d9d5d4d4d4d9
-ffffd9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffff
-d9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9
-bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d97d7d
-7d7d7d747474747472727272727272727272747474747474747474d9ffffd9d9bebebebe
-bebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9575757bebebe
-bebebebebebebebebebebebebebebebebebebebebe5757d957c0c0c07300
-c0ffc0c0c0ffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d957c0c0c07300
-c0ffc0c0c057575757575757575757575757575757575757575757575757575757575757
-5757ff575757575757575757575757575757575757575757575757575757575757575757
-ff575757575757575757575757575757575757575757575757575757575757575757ff57
-5757575757575757575757575757575757575757575757575757575757575757ff575757
-575757575757575757575757575757575757575757575757575757575757ff5757575757
-57575757575757575757575757575757575757575757575757575757ff57575757575757
-5757575757575757575757575757575757575757575757575757ff575757575757575757
-57575757575757575757575757575757575757575757575757c0c0c07300
-c0ffc0c0c0bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbf
-bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbf
-bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbf
-bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbf
-bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbf
-bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbf
-bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbf
-bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfc0c0c07300
-c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300
-c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300
-c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300
-c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300
-c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300
-c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300
-c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300
-c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300
-c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300
-c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300
-c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300
-c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300
-c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300
-c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300
-c0ffc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c07300
-c0ffc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c07300
-c0ffc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c07300
-c07373737373737373737373737373737373737373737373737373737373737373737373
-737373737373737373737373737373737373737373737373737373737373737373737373
-737373737373737373737373737373737373737373737373737373737373737373737373
-737373737373737373737373737373737373737373737373737373737373737373737373
-737373737373737373737373737373737373737373737373737373737373737373737373
-737373737373737373737373737373737373737373737373737373737373737373737373
-737373737373737373737373737373737373737373737373737373737373737373737373
-737373737373737373737373737373737373737373737373737373737300
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000
-
-showpage
-
-% stop using temporary dictionary
-end
-
-% restore original state
-origstate restore
-
-%%Trailer
diff --git a/lib/toolbar/doc/src/book.xml b/lib/toolbar/doc/src/book.xml
deleted file mode 100644
index e5584cf925..0000000000
--- a/lib/toolbar/doc/src/book.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE book SYSTEM "book.dtd">
-
-<book xmlns:xi="http://www.w3.org/2001/XInclude">>
- <header titlestyle="normal">
- <copyright>
- <year>1997</year><year>2013</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>Toolbar</title>
- <prepared>Joakim Greben&ouml;</prepared>
- <docno></docno>
- <date>1997-05-02</date>
- <rev>1.0.2</rev>
- <file>book.sgml</file>
- </header>
- <insidecover>
- </insidecover>
- <pagetext>Toolbar</pagetext>
- <preamble>
- <contents level="2"></contents>
- </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/toolbar/doc/src/create_tool.gif b/lib/toolbar/doc/src/create_tool.gif
deleted file mode 100644
index b55bb809d3..0000000000
--- a/lib/toolbar/doc/src/create_tool.gif
+++ /dev/null
Binary files differ
diff --git a/lib/toolbar/doc/src/create_tool.ps b/lib/toolbar/doc/src/create_tool.ps
deleted file mode 100644
index 8d6961bb9f..0000000000
--- a/lib/toolbar/doc/src/create_tool.ps
+++ /dev/null
@@ -1,5050 +0,0 @@
-%!PS-Adobe-2.0 EPSF-2.0
-%%Title: /home/kent/otp/toolbar/doc/create_tool.ps
-%%Creator: XV Version 3.10a Rev: 12/29/94 - by John Bradley
-%%BoundingBox: 165 29 575 446
-%%Pages: 1
-%%DocumentFonts:
-%%EndComments
-%%EndProlog
-
-%%Page: 1 1
-
-% remember original state
-/origstate save def
-
-% build a temporary dictionary
-20 dict begin
-
-% define string to hold a scanline's worth of data
-/pix 410 string def
-
-% define space for color conversions
-/grays 410 string def % space for gray scale line
-/npixls 0 def
-/rgbindx 0 def
-
-% lower left corner
-165 29 translate
-
-% size of image (on paper, in 1/72inch coords)
-409.96800 417.02400 scale
-
-410 417 8 % dimensions of data
-[410 0 0 -417 0 417] % mapping matrix
-{currentfile pix readhexstring pop}
-image
-
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c000
-c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffff7300
-c0ffc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c07300
-c0ffc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c07300
-c0ffc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c07300
-c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414c0c0c07300
-c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414c0c0c07300
-c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-1414141414141414141414141414141414141414141414141414141414ffffffffffffff
-ffffffffffffffff00ffffffffffffffffffffffffffffff001414ffffffffffffffffff
-ffffffffffff001414c0c0c07300
-c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-1414141414141414141414141414141414141414141414141414141414ffc0c0c0c0c0c0
-c0c0c0c0c0c0c07300ffc0c0c0c0c0c0c0c0c0c0c0c0c073001414ffc0c0c0c0c0c0c0c0
-c0c0c0c0c073001414c0c0c07300
-c0ffc0c0c014141414575757575714141414141414571414141414141414ffffffff1414
-14141414141414141414141414141414141414ffff14141414141414141414141414ffff
-ffffffffffff1414141414141414141414141414ffff141414141414ffffffffffffffff
-14ffff141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-1414141414141414141414141414141414141414141414141414141414ffc0c0c0c0c0c0
-c0c0c0c0c0c0c07300ffc0c0000000000000000000c0c073001414ffc0c0c0c0c0c0c0c0
-c0c0c0c0c073001414c0c0c07300
-c0ffc0c0c0141414141457575757571414141414571414141414141414ffff1414ffff14
-14141414141414141414141414141414141414ffff141414141414141414141414141414
-14ffff1414141414141414141414141414141414ffff141414141414ffff141414141414
-14ffff141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-1414141414141414141414141414141414141414141414141414141414ffc0c0c0c0c0c0
-c0c0c0c0c0c0c07300ffc0c0000000000000000000c0c073001414ffc0c0c00000c0c0c0
-c00000c0c073001414c0c0c07300
-c0ffc0c0c01414141414145757575757141414571414141414141414ffff1414141414ff
-ff14ffff14ffffffff141414ffffffff1414ffffffff1414ffffffff1414141414141414
-14ffff14141414ffffffff141414ffffffff1414ffff141414141414ffff14141414ffff
-14ffff1414ffffffff141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-1414141414141414141414141414141414141414141414141414141414ffc0c0c0c0c0c0
-c0c0c0c0c0c0c07300ffc0c000c0c0c0c0c0c0c000c0c073001414ffc0c0c0c00000c0c0
-0000c0c0c073001414c0c0c07300
-c0ffc0c0c01414141414141457575757571457141414141414141414ffff1414141414ff
-ffffffffffff1414ffff14ffff1414ffff1414ffff1414ffff1414ffff14141414141414
-14ffff141414ffff1414ffff14ffff1414ffff14ffff141414141414ffff14141414ffff
-14ffff14ffff1414ffff1414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-1414141414141414141414141414141414141414141414141414141414ffc0c0c0c0c0c0
-c0c0c0c0c0c0c07300ffc0c000c0c0c0c0c0c0c000c0c073001414ffc0c0c0c0c0000000
-00c0c0c0c073001414c0c0c07300
-c0ffc0c0c01414141414141414575757145714141414141414141414ffff1414141414ff
-ffff1414ffff1414ffff1414141414ffff1414ffff1414ffff1414ffff14141414141414
-14ffff141414ffff1414ffff14ffff1414ffff14ffff141414141414ffffffffff14ffff
-14ffff14ffff1414ffff1414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-1414141414141414141414141414141414141414141414141414141414ffc0c0c0c0c0c0
-c0c0c0c0c0c0c07300ffc0c000c0c0c0c0c0c0c000c0c073001414ffc0c0c0c0c0c00000
-c0c0c0c0c073001414c0c0c07300
-c0ffc0c0c01414141414141414145714575757141414141414141414ffff1414141414ff
-ff141414ffffffffffff1414ffffffffff1414ffff1414ffffffffffff14141414141414
-14ffff141414ffff1414ffff14ffff1414ffff14ffff141414141414ffff14141414ffff
-14ffff14ffffffffffff1414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-1414141414141414141414141414141414141414141414141414141414ffc0c0c0c0c0c0
-c0c0c0c0c0c0c07300ffc0c000c0c0c0c0c0c0c000c0c073001414ffc0c0c0c0c0000000
-00c0c0c0c073001414c0c0c07300
-c0ffc0c0c01414141414141414571457575757571414141414141414ffff1414141414ff
-ff141414ffff1414141414ffff1414ffff1414ffff1414ffff1414141414141414141414
-14ffff141414ffff1414ffff14ffff1414ffff14ffff141414141414ffff14141414ffff
-14ffff14ffff141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-1414141414141414141414141414141414141414141414141414141414ffc0c0c0c0c0c0
-c0c0c0c0c0c0c07300ffc0c000c0c0c0c0c0c0c000c0c073001414ffc0c0c0c00000c0c0
-0000c0c0c073001414c0c0c07300
-c0ffc0c0c0141414141414145714141457575757571414141414141414ffff1414ffffff
-ff141414ffff1414ffff14ffff1414ffff1414ffff14ffffff1414ffff14141414141414
-14ffff141414ffff1414ffff14ffff1414ffff14ffff141414141414ffff14141414ffff
-14ffff14ffff1414ffff1414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-1414141414141414141414141414141414141414141414141414141414ffc0c0c0000000
-000000c0c0c0c07300ffc0c000c0c0c0c0c0c0c000c0c073001414ffc0c0c00000c0c0c0
-c00000c0c073001414c0c0c07300
-c0ffc0c0c014141414141457141414141457575757571414141414141414ffffffff14ff
-ff14141414ffffffff141414ffffff14ffff1414ffff1414ffffffff1414141414141414
-14ffff14141414ffffffff141414ffffffff1414ffff141414141414ffff14141414ffff
-14ffff1414ffffffff141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-1414141414141414141414141414141414141414141414141414141414ffc0c0c0000000
-000000c0c0c0c07300ffc0c0000000000000000000c0c073001414ffc0c0c0c0c0c0c0c0
-c0c0c0c0c073001414c0c0c07300
-c0ffc0c0c014141414145714141414141414575757575714141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-1414141414141414141414141414141414141414141414141414141414ffc0c0c0c0c0c0
-c0c0c0c0c0c0c07300ffc0c0c0c0c0c0c0c0c0c0c0c0c073001414ffc0c0c0c0c0c0c0c0
-c0c0c0c0c073001414c0c0c07300
-c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-1414141414141414141414141414141414141414141414141414141414ff737373737373
-737373737373737300ff7373737373737373737373737373001414ff7373737373737373
-737373737373001414c0c0c07300
-c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141400000000000000
-000000000000000000000000000000000000000000000000001414000000000000000000
-000000000000001414c0c0c07300
-c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414c0c0c07300
-c0ffc0c0c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffc0c0c07300
-c0ffc0c0c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffff82c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d982828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-8282828282828282828282828282828282828282828282828282828282828282828282d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d982828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-82828282828282828282828282828282828282828282828282828282828282828282ffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d90000000000d9d9d9
-d9d900d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9
-000000d9d9d9d9d9d900d9d9d9d9000000d9d9d9d9d9d9d9d9d9d900d90000d9d9d9d900
-0000d9d9d90000d900d9d9d9d9000000d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d900d9d9d9d9000000d9d9d900d90000d9d9d9
-d9000000d9d9d9d9d9d900d9d9d90000d900d9d9d900d9d9d900d9d90000000000d9d9d9
-000000d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d90000000000d9d9d900
-0000d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9
-d9d900d9d9d9d9d9d900d9d9d900d9d9d900d9d9d9d9d9d9d9d9d90000d9d900d9d900d9
-d9d900d9d900d900d900d9d900d9d9d900d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d900d9d9d9d900d9d9d900d9d90000d9d900d9d9
-00d9d9d900d9d9d9d900d9d9d9d900d900d900d9d900d9d9d900d9d9d9d900d9d9d9d900
-d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900d9
-d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900000000d9d9d9d9
-d9d900d9d9d9d9d9d900d9d9d900d9d9d900d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d9
-d9d900d9d900d900d900d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d900d9d9d9d900d9d9d9d9d9d900d9d9d9d9d9d9
-00d9d9d9d9d9d9d9d900d9d9d9d900d900d900d9d9d900d9d900d9d9d9d900d9d9d9d900
-d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900d9
-d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9
-d9d900d9d9d9d9d9d900d9d9d90000000000d9d9d9d9d9d9d9d9d900d9d9d900d9d9d900
-000000d9d900d900d900d9d90000000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d900d9d9d9d9d9d9000000d9d9d900d9d9d9d9d9d9
-00d9d9d9d9d9d9d900d9d9d9d9d900d900d900d9d9d900d9d900d9d9d9d900d9d9d9d900
-d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900d9
-d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9
-d9d900d9d9d9d9d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d900d9
-d9d900d9d900d900d900d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d900d9d9d9d9d9d9d9d9d900d9d900d9d9d9d9d9d9
-00d9d9d9d9d9d9d900d9d9d9d9d900d900d900d9d9d9d900d900d9d9d9d900d9d9d9d900
-d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900d9
-d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9
-d9d900d9d9d9d9d9d900d9d9d900d9d9d900d9d9d9d9d9d9d9d9d900d9d9d900d9d900d9
-d9d900d9d900d900d900d9d900d9d9d900d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d900d9d9d9d9d9d900d9d9d900d9d900d9d9d9d9d9d9
-00d9d9d900d9d900d9d9d9d9d9d900d900d900d9d9d9d90000d9d9d9d9d900d9d9d9d900
-d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d90000d9d9d9d9d900d9d9d9d900d9
-d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9
-d9d900d9d9d9d9d9d900d9d9d9d9000000d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d900
-000000d9d900d900d900d9d9d9000000d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d900d9d9d9d9d9d9d9000000d9d9d900d9d9d9d9d9d9
-d9000000d9d9d900d9d9d9d9d9d900d900d900d9d9d9d9d900d9d9d9d9d9d90000d9d9d9
-000000d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9d90000d9d9d9d9d9d90000d9d9d900
-0000d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d900d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282ffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d982ffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffff8282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282c0c0c07300
-c0ffc0c0c0ff828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282c0c0c07300
-c0ffc0c0c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffc0c0c07300
-c0ffc0c0c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffff82c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d982828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-8282828282828282828282828282828282828282828282828282828282828282828282d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d982828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-82828282828282828282828282828282828282828282828282828282828282828282ffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d90000000000d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d900d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d900d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9
-000000d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d900d90000d9d9d9d900
-0000d9d9d90000d900d9d9d9d9000000d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d90000d9d90000d9d900d9d9d900d9d9d9d9d9d9d9d9d9
-d9000000d9d9d900d9d9d900d9d900d90000d9d9d9d9d9d9d9d9d9d90000000000d9d9d9
-000000d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900
-d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d90000d9d900d9d900d9
-d9d900d9d900d900d900d9d900d9d9d900d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d90000d9d90000d9d900d9d9d900d9d9d9d9d9d9d9d9d9
-00d9d9d900d9d900d9d9d900d9d90000d9d900d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900
-d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900
-d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d9
-d9d900d9d900d900d900d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d900d90000d900d9d9d900d9d900d9d9d9d9d9d9d9d9d9
-00d9d9d900d9d900d900d900d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900
-d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900
-d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d900
-000000d9d900d900d900d9d90000000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d900d90000d900d9d9d900d9d900d9d9d9d9d9d9d9d9d9
-00d9d9d900d9d900d900d900d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900
-d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900
-d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d900d9d9d900d9d900d9
-d9d900d9d900d900d900d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d900d9d9d9d900d9d9d9d900d900d9d9d9d9d9d9d9d9d9
-00d9d9d900d9d900d900d900d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900
-d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900
-d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d900d9d9d900d9d900d9
-d9d900d9d900d900d900d9d900d9d9d900d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d900d9d9d9d900d9d9d9d90000d9d9d9d9d9d9d9d9d9d9
-00d9d9d900d9d900d900d900d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900
-d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9
-000000d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d900
-000000d9d900d900d900d9d9d9000000d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d900d9d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9
-d9000000d9d9d9d900d900d9d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d9d90000d9d9d9
-000000d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d900d900d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282ffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d982ffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d982828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-82828282828282828282828282828282828282828282828282828282828282828282d9d9
-d9d982828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-82828282828282828282828282828282828282828282828282d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d982828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282ffd9d9
-d9d982828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282ffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9000000d9d9d9d9d900d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d900d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d90000000000d9d9d900
-0000d9d9d900d90000d9d9d90000000000d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9000000d9d9d900d90000d9d9d90000000000d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d90000d900d9d9d900d9d9d900d9d90000000000d9d9d9000000d9d9d9d900
-0000d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d900d9d9d9d900d9
-d9d900d9d90000d9d900d9d9d9d900d9d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d900d9d9d90000d9d900d9d9d9d900d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d900d900d900d9d900d9d9d900d9d9d9d900d9d9d9d900d9d9d900d9d900d9
-d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d90000d9d9d9d9d900d9d9d9d9d9d9
-d9d900d9d900d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d900d9d9d900d9d9d900d9d9d9d900d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d900d900d900d9d9d900d9d900d9d9d9d900d9d9d9d900d9d9d900d9d900d9
-d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900d9d9d9d9d900
-000000d9d900d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d900d9d9d900d9d9d900d9d9d9d900d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d900d900d900d9d9d900d9d900d9d9d9d900d9d9d9d900d9d9d900d9d900d9
-d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d900d9d9d9d900d9
-d9d900d9d900d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d900d9d9d900d9d9d900d9d9d9d900d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d900d900d900d9d9d9d900d900d9d9d9d900d9d9d9d900d9d9d900d9d900d9
-d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d900d9d9d9d900d9
-d9d900d9d900d9d9d9d9d9d9d9d900d9d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d900d9d9d900d9d9d900d9d9d9d900d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d900d900d900d9d9d9d90000d9d9d9d9d900d9d9d9d900d9d9d900d9d900d9
-d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9000000d9d9d9d9d9d90000d9d9d900
-000000d9d900d9d9d9d9d9d9d9d9d90000d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d900d9d9d900d9d9d900d9d9d9d9d90000d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d900d900d900d9d9d9d9d900d9d9d9d9d9d90000d9d9d9000000d9d9d9d900
-0000d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d9d9d9d9d9d9d9d900d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282ffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9d9
-d9d98282ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d982ffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9d9
-d9d982ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9000082828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828200
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9000082828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-82828282828282828282828282828282828282828282828282828282828282828282ff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900008282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900008282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900008282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900008282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9000082820000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9000082820000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d90000000000d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d90000d9d9d9d9
-d900d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9000082820000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d900d9d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9
-d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9000082820000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9
-000000d9d9d9d9000000d9d9d900d90000d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d900
-0000d9d9d9d9d9d900d9d9d9d9000000d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d90000828200000000d900d9d9d900d9d9d900d9d90000000000d9d9
-d9000000d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d90000d900d9d9d9
-000000d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900
-d9d9d900d9d900d9d9d900d9d90000d9d900d9d9d9d9d9d9d9d9d90000000000d9d9d9d9
-d900d9d9d9d9d9d900d9d9d900d9d9d900d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900008282000000d900d900d9d900d9d9d900d9d9d9d900d9d9d9d9
-00d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d900d9d90000d9d9d9
-d9d900d9d9d90000000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900
-d9d9d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9
-d900d9d9d9d9d9d900d9d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900008282000000d900d900d9d9d900d9d900d9d9d9d900d9d9d9d9
-00d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9
-d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900
-d9d9d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9
-d900d9d9d9d9d9d900d9d9d90000000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900008282000000d900d900d9d9d900d9d900d9d9d9d900d9d9d9d9
-00d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9
-d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900
-d9d9d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9
-d900d9d9d9d9d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900008282000000d900d900d9d9d9d900d900d9d9d9d900d9d9d9d9
-00d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9
-d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900
-d9d9d900d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9
-d900d9d9d9d9d9d900d9d9d900d9d9d900d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900008282000000d900d900d9d9d9d90000d9d9d9d9d900d9d9d9d9
-00d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d90000d9d9d900d9d90000d9d9d9
-d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d90000000000d9d9d9
-000000d9d9d9d9000000d9d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9
-d900d9d9d9d9d9d900d9d9d9d9000000d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900008282000000d900d900d9d9d9d9d900d9d9d9d9d9d90000d9d9
-d9000000d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9d90000d9d9d9d90000d900d9d9d9
-d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9000082820000d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9000082820000d9d9d9d9d9d9d900d900d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9000082820000d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9000000d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900008282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900008282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900008282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900008282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900008282ffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9000082ffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d982828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-8282828282828282828282828282828282828282828282828282828282828282828282d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d982828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-82828282828282828282828282828282828282828282828282828282828282828282ffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-00d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d900d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d900d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d90000d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9
-d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9000000d9d9d9d9d9
-00d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d900d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d900d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9
-d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9
-00d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d90000d9d90000d9d9d9000000d9d9d9d9000000d9d9d9d9000000d9d9d9d900
-0000d9d9d9d90000d900d9d9d9000000d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d90000d9d90000d9d900d9d9d900d9d9d9d9d9d9d9d9d9
-d9d900d9d9d9d9d9000000d9d9d900d90000d9d9d9d9000000d9d9d90000000000d9d9d9
-d9d9d9d9d9d90000000000d9d9d9000000d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9d9
-00d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d90000d9d90000d9d900d9d9d900d9d900d9d9d900d9d900d9d9d900d9d900d9
-d9d900d9d900d9d90000d9d900d9d9d900d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d90000d9d90000d9d900d9d9d900d9d9d9d9d9d9d9d9d9
-0000000000d9d9d9d9d900d9d9d90000d9d900d9d900d9d9d900d9d9d9d900d9d9d9d9d9
-d9d9d9d9d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9
-00d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d900d90000d900d9d900d9d9d900d9d900d9d9d9d9d9d900d9d9d9d9d9d9d9d9
-d9d900d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d900d90000d900d9d9d900d9d900d9d9d9d9d9d9d9d9d9
-d9d900d9d9d9d9d9d9d900d9d9d900d9d9d9d9d9d900d9d9d9d9d9d9d9d900d9d9d9d9d9
-d9d9d9d9d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9
-00d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d900d90000d900d9d90000000000d9d9d9000000d9d9d9d9000000d9d9d9d900
-000000d9d900d9d9d900d9d90000000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d900d90000d900d9d9d900d9d900d9d9d9d9d9d9d9d9d9
-d9d900d9d9d9d9d9d9d900d9d9d900d9d9d9d9d9d9d9000000d9d9d9d9d900d9d9d9d9d9
-d9d9d9d9d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9
-00d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d900d9d9d9d900d9d900d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d900d9d900d9
-d9d900d9d900d9d9d900d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d900d9d9d9d900d9d9d9d900d900d9d9d9d9d9d9d9d9d9
-d9d900d9d9d9d9d9d9d900d9d9d900d9d9d9d9d9d9d9d9d9d900d9d9d9d900d9d9d9d9d9
-d9d9d9d9d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d900d9d9d9d900d9d900d9d9d900d9d900d9d9d900d9d900d9d9d900d9d900d9
-d9d900d9d900d9d90000d9d900d9d9d900d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d900d9d9d9d900d9d9d9d90000d9d9d9d9d9d9d9d9d9d9
-d9d900d9d9d9d9d9d9d900d9d9d900d9d9d9d9d9d900d9d9d900d9d9d9d900d9d9d9d9d9
-d9d9d9d9d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d900d9d9d9d900d9d9d9000000d9d9d9d9000000d9d9d9d9000000d9d9d9d900
-000000d9d9d90000d900d9d9d9000000d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d900d9d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9
-d9d900d9d9d9d9d9d9d900d9d9d900d9d9d9d9d9d9d9000000d9d9d9d9d9d90000d9d9d9
-d9d9d9d9d9d9d9d9d90000d9d9d9000000d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9d9
-00d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d900d900d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282ffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d982ffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d982828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-8282828282828282828282828282828282828282828282828282828282828282828282d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d982828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-82828282828282828282828282828282828282828282828282828282828282828282ffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d90000
-000000d900d9d9d9d900d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9
-d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d900d9d9d9d9d9d9d9
-d900d9d9d9d9d9d9d9d9d9d9d9d9000000d9d9d9d9d9d9d900d9d9d9d9d900d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9
-d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d9
-00d9d9d900d9d9d9d900d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9
-d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d9d9d9d9
-d900d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9
-d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d9
-00d9d9d90000d9d90000d9d900d9d9d9d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9
-d90000d900d9d9d9000000d9d9d9d9000000d9d9d9d9d9d900d9d9d900d90000d9d9d900
-00000000d9d90000d900d9d9d9d9d9d900d9d9d9d9d9d900d9d9d9d9000000d9d9d900d9
-0000d9d9d9d90000d900d9d9d9000000d9d9d900d9d9d900d9d9d9d9d9d9d9d9d900d900
-00d9d9d90000000000d9d90000d900d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d9
-00d9d9d90000d9d90000d9d900d9d9d9d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9
-00d9d90000d9d900d9d9d900d9d900d9d9d900d9d9d9d900d9d9d9d90000d9d900d9d9d9
-d900d9d9d9d900d900d900d9d9d9d9d900d9d9d9d9d900d9d9d9d9d9d9d900d9d9d90000
-d9d900d9d900d9d90000d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9d9d9d9d90000d9
-d900d9d9d9d900d9d9d9d900d900d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d90000000000d9d9d9d9
-00d9d9d900d90000d900d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9
-00d9d9d900d9d900d9d9d900d9d900d9d9d9d9d9d9d9d900d9d9d9d900d9d9d900d9d9d9
-d900d9d9d9d900d900d900d9d9d9d9d900d9d9d9d9d900d9d9d9d9d9d9d900d9d9d900d9
-d9d900d9d900d9d9d900d9d900d9d9d900d9d9d900d900d9d9d9d9d9d9d9d9d9d900d9d9
-d900d9d9d9d900d9d9d9d900d900d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d9
-00d9d9d900d90000d900d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9
-00d9d9d900d9d900d9d9d900d9d900d9d9d9d9d9d9d900d9d9d9d9d900d9d9d900d9d9d9
-d900d9d9d9d900d900d900d9d9d9d9d900d9d9d9d900d9d9d9d9d9d9d9d900d9d9d900d9
-d9d900d9d900d9d9d900d9d90000000000d9d9d9d900d9d9d9d9d9d9d9d9d9d9d900d9d9
-d900d9d9d9d900d9d9d9d900d900d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d9
-00d9d9d900d9d9d9d900d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9
-00d9d9d900d9d900d9d9d900d9d900d9d9d9d9d9d9d900d9d9d9d9d900d9d9d900d9d9d9
-d900d9d9d9d900d900d900d9d9d9d9d900d9d9d9d900d9d9d9d9d9d9d9d900d9d9d900d9
-d9d900d9d900d9d9d900d9d900d9d9d9d9d9d9d900d900d9d9d9d9d9d9d9d9d9d900d9d9
-d900d9d9d9d900d9d9d9d900d900d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d9
-00d9d9d900d9d9d9d900d9d900d9d9d9d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d90000d9d9d9d9d90000d9d9d900d9d9d9d9d9d9
-00d9d90000d9d900d9d9d900d9d900d9d9d900d9d900d9d9d9d9d9d900d9d9d900d9d9d9
-d900d9d9d9d900d900d900d9d9d9d9d900d9d9d900d9d9d9d9d9d9d9d9d900d9d9d900d9
-d9d900d9d900d9d90000d9d900d9d9d900d9d900d9d9d900d9d9d9d90000d9d9d900d9d9
-d900d9d9d9d900d9d9d9d900d900d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d9
-00d9d9d900d9d9d9d900d9d90000000000d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d90000d9d9d9d9d90000d9d9d900d9d9d9d9d9d9
-d90000d900d9d9d9000000d9d9d9d9000000d9d9d900d9d9d9d9d9d900d9d9d900d9d9d9
-d9d90000d9d900d900d900d9d9d9d9d900d9d9d900d9d9d9d9d9d9d9d9d900d9d9d900d9
-d9d900d9d9d90000d900d9d9d9000000d9d9d900d9d9d900d9d9d9d90000d9d9d900d9d9
-d900d9d9d9d9d90000d9d900d900d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282ffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d982ffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffff8282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282c0c0c07300
-c0ffc0c0c0ff828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282c0c0c07300
-c0ffc0c0c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffc0c0c07300
-c0ffc0c0c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffff82c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffd9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffff82d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffff82d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffff82d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9000000d9d9d9d9000000d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9000000d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d900d9d9d900d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d900d9d9d900d9d9d9d9d900d9d9d9d9000000d9
-d9d9d9000000d9d9d900d90000d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9000000d9d9d900d9d9d900d9d9d900
-0000d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d900d9d9d9d9d9d90000000000d9d9d9000000d9d9d900d90000d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d900d9d9d9d9d9d9d9d9d900d9d9d900d9d9d900
-d9d900d9d9d900d9d90000d9d900d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d900d9d9d9d9d900d9d9d900d9d900d9d9d900d9d900d9
-d9d900d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d900d9d9d9d9d9d9d900d9d9d9d900d9d9d900d9d90000d9d900d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d900d9d9d9d9d9d9d9d9d900d9d9d900d9d9d900
-d9d9d9d9d9d900d9d900d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d90000d9d9d9d9d9d9d900d9d900d9d9d900d9d900d9
-d9d900d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d90000d9d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d900d9d9d9d9d9d9d9d9d900d9d9d90000000000
-d9d9d900000000d9d900d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900000000d9d9d900d900d9d9d90000
-000000d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d900d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d900d9d9d900d9d9d9d9d900d9d9d900d9d9d9d9
-d9d900d9d9d900d9d900d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d900d9d9d900d9d900d9d9d900d9d9d900d900d9d9d900d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d900d9d9d900d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d900d9d9d900d9d9d9d9d900d9d9d900d9d9d900
-d9d900d9d9d900d9d900d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d900d9d9d9d900d9
-d9d900d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d900d9d9d900d9d9d9d900d9d9d9d900d9d9d900d9d90000d9d900d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9000000d9
-d9d9d900000000d9d900d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9000000d9d9d9d900000000d9d9d9d900d9d9d9d9d900
-0000d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9000000d9d9d9d9d9d90000d9d9d9000000d9d9d900d90000d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffff828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffff8282828282828282828282828282828282828282828282828282828282828282
-82828282828282828282828282828282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff82828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-8282828282828282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ff82828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ff828282828282828282828282828282828282828282828282828282828282828282
-82828282828282828282828282828282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ff8282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-8282828282828282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffff8282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282c0c0c07300
-c0ffc0c0c0ff828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282c0c0c07300
-c0ffc0c0c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffc0c0c07300
-c0ffc0c0c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffff82c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffff8282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282c0c0c07300
-c0ffc0c0c0ff828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282c0c0c07300
-c0ffc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c07300
-c0ffc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c07300
-c0ffc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c07300
-c07373737373737373737373737373737373737373737373737373737373737373737373
-737373737373737373737373737373737373737373737373737373737373737373737373
-737373737373737373737373737373737373737373737373737373737373737373737373
-737373737373737373737373737373737373737373737373737373737373737373737373
-737373737373737373737373737373737373737373737373737373737373737373737373
-737373737373737373737373737373737373737373737373737373737373737373737373
-737373737373737373737373737373737373737373737373737373737373737373737373
-737373737373737373737373737373737373737373737373737373737373737373737373
-737373737373737373737373737373737373737373737373737373737373737373737373
-737373737373737373737373737373737373737373737373737373737373737373737373
-737373737373737373737373737373737373737373737373737373737373737373737373
-7373737373737373737373737300
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000
-
-showpage
-
-% stop using temporary dictionary
-end
-
-% restore original state
-origstate restore
-
-%%Trailer
diff --git a/lib/toolbar/doc/src/fascicules.xml b/lib/toolbar/doc/src/fascicules.xml
deleted file mode 100644
index 37feca543f..0000000000
--- a/lib/toolbar/doc/src/fascicules.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!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/toolbar/doc/src/note.gif b/lib/toolbar/doc/src/note.gif
deleted file mode 100644
index 6fffe30419..0000000000
--- a/lib/toolbar/doc/src/note.gif
+++ /dev/null
Binary files differ
diff --git a/lib/toolbar/doc/src/notes.xml b/lib/toolbar/doc/src/notes.xml
deleted file mode 100644
index aca9d59176..0000000000
--- a/lib/toolbar/doc/src/notes.xml
+++ /dev/null
@@ -1,180 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE chapter SYSTEM "chapter.dtd">
-
-<chapter>
- <header>
- <copyright>
- <year>2004</year><year>2013</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>Toolbar 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 Toolbar
- application.</p>
-
-<section><title>Toolbar 1.4.2.3</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Misc build updates</p>
- <p>
- Own Id: OTP-10784</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Toolbar 1.4.2.2</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>The GS applications is now deprecated and will be
- removed in the R16 release. The following GS-based
- applications have been superseded by the Observer
- application and will removed in R16: Appmon, Pman,
- Tv.</p>
- <p>
- *** POTENTIAL INCOMPATIBILITY ***</p>
- <p>
- Own Id: OTP-9907</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Toolbar 1.4.2.1</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Miscellaneous documentation build updates</p>
- <p>
- Own Id: OTP-9813</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Toolbar 1.4.2</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
- <item>
- <p>
- Improve spelling throughout documentation, code comments
- and error messages</p>
- <p>
- Own Id: OTP-9555</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Toolbar 1.4.1</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>Toolbar 1.4</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>The copyright notices have been updated.</p>
- <p>
- Own Id: OTP-7851</p>
- </item>
- </list>
- </section>
-
-</section>
-
- <section>
- <title>Toolbar 1.3.0.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-6725</p>
- </item>
- </list>
- </section>
- </section>
-
- <section>
- <title>Toolbar 1.3</title>
-
- <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-6013 Aux Id: OTP-5987 </p>
- </item>
- </list>
- </section>
- </section>
-
- <section>
- <title>Toolbar 1.2.1</title>
-
- <section>
- <title>Fixed Bugs and Malfunctions</title>
- <list type="bulleted">
- <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>
-</chapter>
-
diff --git a/lib/toolbar/doc/src/part.xml b/lib/toolbar/doc/src/part.xml
deleted file mode 100644
index 907b645764..0000000000
--- a/lib/toolbar/doc/src/part.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE part SYSTEM "part.dtd">
-
-<part xmlns:xi="http://www.w3.org/2001/XInclude">>
- <header>
- <copyright>
- <year>1996</year><year>2013</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>Toolbar User's Guide</title>
- <prepared>Gunilla Hugosson</prepared>
- <docno></docno>
- <date>1997-04-19</date>
- <rev>1.0.2</rev>
- <file>part.sgml</file>
- </header>
- <description>
- <p>The <em>Toolbar</em> application simplifies access to
- the Erlang/OTP tools. It consists of a number of power buttons, one
- for each available tool.</p>
- </description>
- <xi:include href="toolbar_chapter.xml"/>
-</part>
-
diff --git a/lib/toolbar/doc/src/part_notes.xml b/lib/toolbar/doc/src/part_notes.xml
deleted file mode 100644
index 72a488a9d5..0000000000
--- a/lib/toolbar/doc/src/part_notes.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE part SYSTEM "part.dtd">
-
-<part xmlns:xi="http://www.w3.org/2001/XInclude">>
- <header>
- <copyright>
- <year>2004</year><year>2013</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>Toolbar 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 <em>Toolbar</em> application simplifies access to
- the Erlang/OTP tools. It consists of a number of power buttons,
- one for each available tool.</p>
- </description>
- <xi:include href="notes.xml"/>
-</part>
-
diff --git a/lib/toolbar/doc/src/ref_man.xml b/lib/toolbar/doc/src/ref_man.xml
deleted file mode 100644
index 16ba54b9ef..0000000000
--- a/lib/toolbar/doc/src/ref_man.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE application SYSTEM "application.dtd">
-
-<application xmlns:xi="http://www.w3.org/2001/XInclude">>
- <header>
- <copyright>
- <year>1996</year><year>2013</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>Toolbar Reference Manual</title>
- <prepared>Gunilla Hugosson</prepared>
- <docno></docno>
- <date>1997-04-15</date>
- <rev>1.0.2</rev>
- <file>application.sgml</file>
- </header>
- <description>
- <p>The <em>Toolbar</em> application simplifies access to
- the Erlang/OTP tools. It consists of a number of power buttons, one
- for each available tool.</p>
- </description>
- <xi:include href="toolbar.xml"/>
-</application>
-
diff --git a/lib/toolbar/doc/src/toolbar.xml b/lib/toolbar/doc/src/toolbar.xml
deleted file mode 100644
index ac62cb7b68..0000000000
--- a/lib/toolbar/doc/src/toolbar.xml
+++ /dev/null
@@ -1,101 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE erlref SYSTEM "erlref.dtd">
-
-<erlref>
- <header>
- <copyright>
- <year>1996</year>
- <year>2013</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>toolbar</title>
- <prepared>Gunilla Hugosson</prepared>
- <docno></docno>
- <date>1997-04-21</date>
- <rev>A</rev>
- <file>toolbar.sgml</file>
- </header>
- <module>toolbar</module>
- <modulesummary>GUI for Starting Tools and User Contributions</modulesummary>
- <description>
- <warning>
- <p>
- The Toolbar application is deprecated and will be removed in R16.
- </p>
- </warning>
- <p>Toolbar makes it easier to use
- the different Erlang tools - and the user contributions - which are provided.
- It has a graphical user interface with an icon for each tool.
- Clicking the icon activates the corresponding tool.
- </p>
- <p>All tools to be included on Toolbar must
- have a configuration file containing information about the tool,
- for example its start function and help information location.
- Configuration files must have the <c>.tool</c> suffix.
- </p>
- <p>When started, Toolbar automatically checks for <c>*.tool</c>
- files in the current path and adds the corresponding tools. For
- each <c>ebin</c> directory found in the path, it will also look
- in a <c>priv</c> directory next to it. This is a feature of the Erlang
- file structure.</p>
- </description>
- <funcs>
- <func>
- <name>start() -> ok | already_started</name>
- <fsummary>Start Toolbar</fsummary>
- <desc>
- <p>Creates a window containing tool icons.</p>
- </desc>
- </func>
- <func>
- <name>version() -> string()</name>
- <fsummary>Return current version number</fsummary>
- <desc>
- <p>Returns the current version number of Toolbar.</p>
- </desc>
- </func>
- <func>
- <name>update() -> ok | {error,not_started}</name>
- <fsummary>Update Toolbar</fsummary>
- <desc>
- <p>Makes a search for new tool files in the current path and
- adds the corresponding tools to Toolbar window.</p>
- </desc>
- </func>
- <func>
- <name>quit() -> ok | {error,not_started}</name>
- <fsummary>Quit Toolbar.</fsummary>
- </func>
- <func>
- <name>create_tool_file() -> ok | {error,not_started}</name>
- <fsummary>Create tool files</fsummary>
- <desc>
- <p>Starts the GUI used for creating and editing tool files.</p>
- </desc>
- </func>
- <func>
- <name>add_gs_contribs() -> ok | {error,not_started}</name>
- <fsummary>Add GS contributions</fsummary>
- <desc>
- <p>Adds the path to the directory where the GS contributions are
- situated and add the tools found there, if any.</p>
- </desc>
- </func>
- </funcs>
-</erlref>
-
diff --git a/lib/toolbar/doc/src/toolbar_chapter.xml b/lib/toolbar/doc/src/toolbar_chapter.xml
deleted file mode 100644
index bec2bff062..0000000000
--- a/lib/toolbar/doc/src/toolbar_chapter.xml
+++ /dev/null
@@ -1,145 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE chapter SYSTEM "chapter.dtd">
-
-<chapter>
- <header>
- <copyright>
- <year>1996</year><year>2013</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>Toolbar</title>
- <prepared>Gunilla Hugosson, Kenneth Lundin</prepared>
- <docno></docno>
- <date>1997-04-21</date>
- <rev>A</rev>
- <file>toolbar_chapter.xml</file>
- </header>
- <warning>
- <p>
- The Toolbar application is deprecated and will be removed in R16.
- </p>
- </warning>
- <p>Toolbar provides an interface to the various Erlang tools which are available. Toolbar can also provide access to user supplied tools which are included with the Erlang software release. These tools are called GS Contributions.</p>
- <p>All tools included in Toolbar must have a configuration file which contains information about the tool, such as its start function and the location of help information. The name of a configuration file must include the suffix <c>.tool</c>.
- </p>
- <p>Start the Toolbar application with one of the following commands:
- </p>
- <list type="bulleted">
- <item>enter the command <c>toolbar:start().</c> from the command line after Erlang has been started.</item>
- <item>start Erlang with the command <c>erl -s toolbar</c>.</item>
- </list>
- <p>When started, Toolbar automatically checks for <c>*.tool</c> files in the current path and adds the corresponding tools. For each <c>ebin</c> directory found in the path, it will also look in a <c>priv</c> directory next to it. This is a function of the Erlang file structure.
- </p>
- <p>You can update Toolbar with menu commands on Toolbar window. Refer to the File Menu and Tools Menu sections below for details.
- </p>
-
- <section>
- <title>Toolbar Window</title>
- <p>The following illustration shows <seealso marker="#fig_1">The Toolbar Window</seealso>.
- </p>
- <marker id="fig_1"></marker>
- <image file="bar.gif">
- <icaption>The Toolbar Window</icaption>
- </image>
- <p>Each icon on Toolbar represents a separate tool, which is started by clicking on the icon. You can also display place the mouse pointer over an icon to display the name of the tool at the bottom of Toolbar window.
- </p>
- <p>The Toolbar window also has a menu which includes the following menu items:
- </p>
- <list type="bulleted">
- <item>File menu</item>
- <item>Tools menu</item>
- <item>Help menu</item>
- </list>
- <p>These menu are described in the following sections.
- </p>
-
- <section>
- <marker id="file_menu"></marker>
- <title>The File menu</title>
- <p>The File menu has the following two menu items:
- </p>
- <taglist>
- <tag>Update Toolbar</tag>
- <item>Select this menu item to search for new tool files in the current path and add the corresponding tools to the Toolbar window. This action is performed automatically every the Toolbar application is started.</item>
- <tag>Quit</tag>
- <item>Select this menu item to exit the oolbar application.</item>
- </taglist>
- </section>
-
- <section>
- <marker id="tools_menu"></marker>
- <title>The Tools menu</title>
- <p>The Tool menu has the following menu items:
- </p>
- <taglist>
- <tag>Create Tool File</tag>
- <item>Choose this menu item to display the Create Tools File Window, where you create a new tools file, or edit an existing tools file. This window is described in detail below.</item>
- <tag>Add GS Contributions</tag>
- <item>Choose this menu item to add GS contributions by entering the path to the directory where these tools are situated. GS contributions are user supplied tools which are included with the Erlang software release. These tools are not supported by Erlang/OTP.</item>
- </taglist>
-
- <section>
- <title>The Create Tool File Window</title>
- <p>This window is displayed when you select <em>Create Tool File</em> from the <em>Tools</em> menu. The following illustration shows <seealso marker="#fig_2">The Create Tool File Window</seealso>.
- </p>
- <marker id="fig_2"></marker>
- <image file="create_tool.gif">
- <icaption>The Create Tool File Window</icaption>
- </image>
- <p>Follow these steps to create a new tool file, or to edit an existing tool file:</p>
- <list type="bulleted">
- <item>To edit an existing tools file, enter the file name of the tools file into the field <em>File name</em> and press <em>Enter</em>. The contents of the tool file are displayed in the information fields. Edit the information in the following fields as required.</item>
- <item>To create a new tools file, enter information into the following fields.</item>
- <item>When finished, select <em>Update Toolbar</em> from the <em>File</em> menu.</item>
- </list>
- <list type="ordered">
- <item><em>File name</em>. Enter the name of the tools file. The application will add the <c>.tool</c> suffix if omitted.</item>
- <item><em>Tool name</em>. Enter the name of the tool. This field defaults to the name entered into the File name field. For example, if you enter <c>mytool.tool</c> as a file name, this field defaults to <c>mytool</c>.</item>
- <item><em>Start function</em>. Enter a module name and a function name into the fields titled module and function respectively. The function must exist and take zero arguments.</item>
- <item><em>Icon file</em>. Enter the file name of the icon to be displayed in the Toolbar. The file must be a bitmap file or a GIF image with the file extension <c>.xbm</c> or <c>.gif</c> respectively. If no path name is entered, the system assumes that the file is located in the same directory as the tools file. This field is optional.</item>
- <item><em>Message</em>. Enter a descriptive string of maximum 30 characters for the tool. This field is optional. The information entered here is displayed at the bottom of the Toolbar window when the mouse pointer is placed on the Toolbar icon.</item>
- <item><em>HTML</em>. Enter an URL, a HTML file name, or a plain text file name, which points to the help text file for the tool. An URL should be given in the form <c>http://...</c>. If no path is given, the system assumes that the file is located in the same directory as the tool file. For an HTML file name ending with <c>.html</c>, it is possible to add an index which points to a specific location in the file. This is written as <c>.html#index</c>. This field is optional.</item>
- </list>
- <p>The window has the following command buttons:
- </p>
- <list type="bulleted">
- <item><em>Clear</em>. Click on this button to clear the information fields.</item>
- <item><em>Save</em>. Click on this button to save the information. A new tool file can be saved only when mandatory information such as file name, tool name and start function has been entered.</item>
- <item><em>Stop</em>. Click on this button to quit the Create Tool File window.</item>
- </list>
- <note>
- <p>No error check is performed on the information entered.</p>
- <p>You must select <em>Update Toolbar</em> from the <em>File</em> menu to update the configuration and make the tool visible on the Toolbar.</p>
- </note>
- </section>
- </section>
-
- <section>
- <marker id="help_menu"></marker>
- <title>The Help menu</title>
- <p>The Help Menu has the following two menu items, plus additional help menu items for those tools which have a help system.
- </p>
- <taglist>
- <tag>About</tag>
- <item>This menu item displays a short message about accessing the help information.</item>
- <tag>Toolbar</tag>
- <item>This menu item provides access to the Toolbar documentation.</item>
- </taglist>
- </section>
- </section>
-</chapter>
-
diff --git a/lib/toolbar/doc/src/warning.gif b/lib/toolbar/doc/src/warning.gif
deleted file mode 100644
index 96af52360e..0000000000
--- a/lib/toolbar/doc/src/warning.gif
+++ /dev/null
Binary files differ
diff --git a/lib/toolbar/ebin/.gitignore b/lib/toolbar/ebin/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/toolbar/ebin/.gitignore
+++ /dev/null
diff --git a/lib/toolbar/info b/lib/toolbar/info
deleted file mode 100644
index 706cbdfdf2..0000000000
--- a/lib/toolbar/info
+++ /dev/null
@@ -1,2 +0,0 @@
-group: tools
-short: A tool bar simplifying access to the Erlang tools
diff --git a/lib/toolbar/src/Makefile b/lib/toolbar/src/Makefile
deleted file mode 100644
index a24846976b..0000000000
--- a/lib/toolbar/src/Makefile
+++ /dev/null
@@ -1,93 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1996-2012. 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=$(TOOLBAR_VSN)
-
-# ----------------------------------------------------
-# Release directory specification
-# ----------------------------------------------------
-RELSYSDIR = $(RELEASE_PATH)/lib/toolbar-$(VSN)
-
-# ----------------------------------------------------
-# Common Macros
-# ----------------------------------------------------
-
-MODULES= \
- canvasbutton \
- toolbar \
- toolbar_graphics \
- toolbar_lib \
- toolbar_toolconfig
-
-HRL_FILES= toolbar.hrl
-
-ERL_FILES= $(MODULES:%=%.erl)
-
-TARGET_FILES = $(MODULES:%=$(EBIN)/%.$(EMULATOR)) $(APP_TARGET) $(APPUP_TARGET)
-
-APP_FILE = toolbar.app
-APP_SRC = $(APP_FILE).src
-APP_TARGET = $(EBIN)/$(APP_FILE)
-
-APPUP_FILE = toolbar.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
- $(vsn_verbose)sed -e 's;%VSN%;$(VSN);' $< > $@
-
-$(APPUP_TARGET): $(APPUP_SRC) ../vsn.mk
- $(vsn_verbose)sed -e 's;%VSN%;$(VSN);' $< > $@
-
-docs:
-
-# ----------------------------------------------------
-# Release Target
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_release_targets.mk
-
-release_spec: opt
- $(INSTALL_DIR) "$(RELSYSDIR)/src"
- $(INSTALL_DATA) $(ERL_FILES) $(HRL_FILES) "$(RELSYSDIR)/src"
- $(INSTALL_DIR) "$(RELSYSDIR)/ebin"
- $(INSTALL_DATA) $(TARGET_FILES) "$(RELSYSDIR)/ebin"
-
-release_docs_spec:
-
diff --git a/lib/toolbar/src/canvasbutton.erl b/lib/toolbar/src/canvasbutton.erl
deleted file mode 100644
index 81e0ed43bb..0000000000
--- a/lib/toolbar/src/canvasbutton.erl
+++ /dev/null
@@ -1,239 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2012. 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(canvasbutton).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,create,3}},
- {nowarn_deprecated_function,{gs,read,2}}]).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% Erlang Toolbar
-%
-%%% Description %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% Extension to GS used to imitate buttons but instead using images drawn
-% on a canvas. Enables usage of .gif files as button images and not only
-% .xbm (bitmap) files.
-%
-%%% Constants %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
--define(gray,{87,87,87}).
-%
-%%% Internal data structures %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% canvasbutton()
--record(canvasbutton,{image,rect,ul,ll}).
-%
-% cboptions()
--record(cboptions,
- {imagefile=nofile, % nofile |
- % string() Name of image file
- x=0, % integer() X coordinate relative the canvas
- y=0, % integer() Y coordinate relative the canvas
- width=10, % integer() Button width
- height=10, % integer() Button heigth
- fg=black, % atom() Foreground color
- data=[]}). % term() Data associated with button events
-%
-%%% Exports %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
--export([create/1,create/2,read/2,press/1,release/1]).
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%% Exported functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%----------------------------------------
-% create(Canvas) => create(Canvas,[])
-% create(Canvas,OptionList) => canvasbutton()
-% Canvas - GS canvas object
-% OptionList - [{Option,Value}]
-% Option, Value - see below
-% Create a canvasbutton with the given image on Canvas
-%
-% Option Value Default Comment
-% ----------------------------------------------------------------
-% image nofile | nofile Name of image file. Must be a bitmap
-% string() file (.xbm) or a GIF file (.gif).
-% x integer() 0 X coordinate relative to Canvas
-% y integer() 0 Y coordinate relative to Canvas
-% width integer() 10 Button width
-% height integer() 10 Button height
-% fg atom() black Foreground color, bitmaps only
-% data term() [] Data associated with button events
-%
-% The process calling this function will receive the following events:
-% {gs,GsObj,enter,{canvasbutton,Canvasbutton,Data},Args}
-% {gs,GsObj,leave,{canvasbutton,Canvasbutton,Data},Args}
-% {gs,GsObj,buttonpress,{canvasbutton,Canvasbutton,Data},Args}
-% {gs,GsObj,buttonrelease,{canvasbutton,Canvasbutton,Data},Args}
-% where GsObj and Args are a GS object and its Args field, respectively.
-%
-% Note that press/1 and release/1 has to be called explicitly to create
-% the illusion of the button being pressed or released.
-%----------------------------------------
-create(Canvas) ->
- create(Canvas,[]).
-create(Canvas,OptionList) ->
- Options = sort_out_options(OptionList),
- X = Options#cboptions.x,
- Y = Options#cboptions.y,
- W = Options#cboptions.width,
- H = Options#cboptions.height,
-
- %% Buttons should have the same background color as the canvas
- Bg = gs:read(Canvas,bc),
-
- %% Draw image
- Image = create_image(Options#cboptions.imagefile,Canvas,Bg,
- Options#cboptions.fg,X,Y,W,H),
-
- %% Draw upper left corner line
- Ul = gs:create(line,Canvas,[{coords,[{X,Y+H},{X,Y},{X+W,Y}]},
- {fg,white},{width,2}]),
-
- %% Draw lower right corner line
- Ll = gs:create(line,Canvas,[{coords,[{X,Y+H},{X+W,Y+H},{X+W,Y}]},
- {fg,?gray},{width,2}]),
-
-
- %% Draw a rectangle around all (for event catching when width and
- %% height of button is larger than image)
- Rect = gs:create(rectangle,Canvas,[{coords,[{X,Y},{X+W,Y+H}]},
- {fill,Bg},
- {buttonpress,true},
- {buttonrelease,true},
- {enter,true},{leave,true}]),
-
- %% Now the canvas button is created
- Canvasbutton = #canvasbutton{image=Image,rect=Rect,ul=Ul,ll=Ll},
-
- Data = Options#cboptions.data,
- gs:config(Rect,{data,{canvasbutton,Canvasbutton,Data}}),
- gs:config(Image,{data,{canvasbutton,Canvasbutton,Data}}),
- gs:config(Rect,lower),
- gs:config(Image,raise),
-
- Canvasbutton.
-
-%----------------------------------------
-% read(Canvasbutton,coords) => [{L,T},{R,B}]
-% Canvasbutton - canvasbutton()
-% Read a Canvasbutton's coordinates
-%----------------------------------------
-read(Canvasbutton,coords) ->
- gs:read(Canvasbutton#canvasbutton.rect,coords).
-
-%----------------------------------------
-% press(Canvasbutton)
-% Canvasbutton - canvasbutton()
-% Create the illusion that Canvasbutton is pressed
-%----------------------------------------
-press(Canvasbutton) ->
- gs:config(Canvasbutton#canvasbutton.ul,{fg,?gray}),
- gs:config(Canvasbutton#canvasbutton.ll,{fg,white}),
- case Canvasbutton#canvasbutton.image of
- noimage ->
- ignore;
- Image ->
- gs:config(Image,{move,{-1,-1}})
- end.
-
-%----------------------------------------
-% release(Canvasbutton)
-% Canvasbutton - canvasbutton()
-% Create the illusion that Canvasbutton is released
-%----------------------------------------
-release(Canvasbutton) ->
- gs:config(Canvasbutton#canvasbutton.ul,{fg,white}),
- gs:config(Canvasbutton#canvasbutton.ll,{fg,?gray}),
- case Canvasbutton#canvasbutton.image of
- noimage ->
- ignore;
- Image ->
- gs:config(Image,{move,{1,1}})
- end.
-
-
-%%% Internal functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%----------------------------------------
-% create_image(ImageFile,Canvas,Bg,Fg,X,Y,W,H) => Image
-% ImageFile - string() Image file, must exist and be a bitmap file ending
-% with .xbm or a GIF file ending with .gif.
-% Canvas - GS canvas object
-% Bg - atom() Background color (bitmaps only)
-% Fg - atom() Foreground color (bitmaps only)
-% X, Y - int() X and Y coordinates for Image relative to Canvas
-% W, H - int() Width and height of Image
-% Image - GS canvas image object
-%----------------------------------------
-create_image(nofile,_,_,_,_,_,_,_) ->
- noimage;
-create_image(ImageFile,Canvas,Bg,Fg,X,Y,W,H) ->
- case lists:last(string:tokens(ImageFile,".")) of
- "xbm" ->
- gs:create(image,Canvas,
- [{bitmap,ImageFile},
- {bg,Bg},{fg,Fg},
- {anchor,c},
- {coords,[{X+1+W/2,Y+1+H/2}]},
- {buttonpress,true},
- {buttonrelease,true},
- {enter,true},{leave,true}]);
- "gif" ->
- gs:create(image,Canvas,
- [{load_gif,ImageFile},
- {anchor,c},
- {coords,[{X+W/2,Y+H/2}]},
- {buttonpress,true},
- {buttonrelease,true},
- {enter,true},{leave,true}])
- end.
-
-%----------------------------------------
-% sort_out_options(OptionList) => cboptions()
-% OptionList - see create/2
-% Insert members of option list into a cboptions record.
-%----------------------------------------
-sort_out_options(OptionList) ->
- sort_out_options(OptionList,#cboptions{}).
-
-%----------------------------------------
-% sort_out_options(OptionList,Options) => cboptions()
-% OptionList - see create/2
-% Options - cboptions()
-% Called by sort_out_options/1.
-%----------------------------------------
-sort_out_options([{image,Image}|Rest],Options) ->
- sort_out_options(Rest,Options#cboptions{imagefile=Image});
-sort_out_options([{x,X}|Rest],Options) ->
- sort_out_options(Rest,Options#cboptions{x=X});
-sort_out_options([{y,Y}|Rest],Options) ->
- sort_out_options(Rest,Options#cboptions{y=Y});
-sort_out_options([{width,Width}|Rest],Options) ->
- sort_out_options(Rest,Options#cboptions{width=Width});
-sort_out_options([{height,Height}|Rest],Options) ->
- sort_out_options(Rest,Options#cboptions{height=Height});
-sort_out_options([{fg,Fg}|Rest],Options) ->
- sort_out_options(Rest,Options#cboptions{fg=Fg});
-sort_out_options([{data,Data}|Rest],Options) ->
- sort_out_options(Rest,Options#cboptions{data=Data});
-sort_out_options([],Options) ->
- Options.
diff --git a/lib/toolbar/src/toolbar.app.src b/lib/toolbar/src/toolbar.app.src
deleted file mode 100644
index 16f03c497d..0000000000
--- a/lib/toolbar/src/toolbar.app.src
+++ /dev/null
@@ -1,30 +0,0 @@
-%%
-%% %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, toolbar,
- [{description, "Toolbar"},
- {vsn, "%VSN%"},
- {modules, [
- toolbar,
- toolbar_graphics,
- toolbar_lib,
- toolbar_toolconfig,
- canvasbutton
- ]},
- {registered,[toolbar]},
- {applications, [kernel, stdlib, gs]}]}.
diff --git a/lib/toolbar/src/toolbar.appup.src b/lib/toolbar/src/toolbar.appup.src
deleted file mode 100644
index 7a435e9b22..0000000000
--- a/lib/toolbar/src/toolbar.appup.src
+++ /dev/null
@@ -1,19 +0,0 @@
-%%
-%% %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/toolbar/src/toolbar.erl b/lib/toolbar/src/toolbar.erl
deleted file mode 100644
index b37c323008..0000000000
--- a/lib/toolbar/src/toolbar.erl
+++ /dev/null
@@ -1,579 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2012. 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(toolbar).
--compile([{nowarn_deprecated_function,{gs,start,1}}]).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% Erlang Toolbar
-%
-%%% Description %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% Main module
-%
-%%% Includes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
--include("toolbar.hrl").
-%
-%%% Exports %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
--export([start/0,version/0]).
--export([update/0,quit/0]).
--export([create_tool_file/0,add_gs_contribs/0]).
-
-%
--define (STARTUP_TIMEOUT, 20000).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%% Exported functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%----------------------------------------
-% start() => ok | already_started
-%----------------------------------------
-start() ->
- case whereis(toolbar) of
- undefined ->
- Self = self(),
- PidInit = spawn(fun() -> init(Self) end),
- init_ok (PidInit);
-
- _Pid ->
- already_started
- end.
-
-
-
-%%% init_ok /1
-%%%
-%%% init_ok returns the pid from this process given from
-%%% init/1 after its initialization, or else it timeouts.
-%%%
-
-init_ok (PidInit) ->
- %% Wait for a initialization completion message from
- %% the spawned process before returning its Pid.
- %%
-
- receive
- {initialization_complete, PidInit} ->
- PidInit
-
- %% (Conditional) Failure to start within the time limit will
- %% result in termination
-
- after
- ?STARTUP_TIMEOUT ->
- exit(PidInit, kill),
- exit({startup_timeout, ?MODULE})
- end.
-
-
-
-%----------------------------------------
-% version() -> string()
-% Returns the version number.
-%----------------------------------------
-version() ->
- "1.1".
-
-%----------------------------------------
-% update() => ok | {error,not_started}
-% Make a search for new tools (*.tool files) in the current path.
-%----------------------------------------
-update() ->
- call(update_toolbar).
-
-%----------------------------------------
-% quit() => ok | {error,not_started}
-% Quit the Toolbar.
-%----------------------------------------
-quit() ->
- call(quit).
-
-%----------------------------------------
-% create_tool_file() => ok | {error,not_started}
-% Start the GUI for creating .tool files.
-%----------------------------------------
-create_tool_file() ->
- call(create_tool_file).
-
-%----------------------------------------
-% add_gs_contribs() => ok | {error,not_started}
-% Add GS contributions.
-%----------------------------------------
-add_gs_contribs() ->
- call(add_gs_contribs).
-
-
-%%% Internal functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%=============================================================================
-% Main loop
-%=============================================================================
-
-%----------------------------------------
-% init()
-%----------------------------------------
-init(PidCaller) ->
- register (toolbar, self ()),
-
- %% Start GS
- S = gs:start([{kernel,true}]),
-
- %% Draw main window
- Window = toolbar_graphics:draw_window(S),
-
- %% Add system defined Tool icons to main window
- toolbar_graphics:cursor(Window,busy),
- NewWindow = add_tools(Window,code:get_path()),
- toolbar_graphics:cursor(Window,arrow),
-
- %% Listen to configure events from the window
- toolbar_graphics:listen_configure(NewWindow),
-
- %% Notify caller that the process appears
- %% to have been started.
- PidCaller ! {initialization_complete, self()},
-
- loop(S,NewWindow,null,undefined).
-
-%----------------------------------------
-% loop(S,Window,LoopData,TimerRef)
-% S - pid() GS
-% Window - tbwindow record (see toolbar_graphics.erl)
-% LoopData - term()
-% TimerRef - undefined | timer_ref()
-%----------------------------------------
-loop(S,Window,LoopData,TimerRef) ->
- receive
- %% test events
- {ping, Pid} ->
- Pid ! {toolbar, alive},
- loop (S, Window, LoopData, TimerRef);
-
- {stop, Pid} ->
- Pid ! {toolbar, stopped},
- finished;
-
- %% ----- GS events ----- %%
-
- {gs,_Object,Event,Data,Args} ->
- case toolbar_graphics:event(LoopData,Event,Data,Args) of
-
- noevent ->
- loop(S,Window,LoopData,TimerRef);
-
- %% Display short information message
- {display,Msg} ->
-
- {ok,Ref} = timer:apply_after(500,toolbar_graphics,
- display_show,[Window,Msg]),
- loop(S,Window,LoopData,Ref);
-
- %% Clear display area
- display_clear ->
- timer:cancel(TimerRef),
- toolbar_graphics:display_clear(Window),
- loop(S,Window,LoopData,undefined);
-
- %% New LoopData
- {newData,NewLoopData} ->
- loop(S,Window,NewLoopData,TimerRef);
-
- %% Icon button clicked, start corresponding tool/uc
- {start,Start} ->
- WinObj = toolbar_graphics:get_window(Window),
- start_tool(Start,WinObj),
- loop(S,Window,LoopData,TimerRef);
-
- %% Update Toolbar
- update_toolbar ->
- toolbar_graphics:cursor(Window,busy),
- NewWindow = add_tools(Window,code:get_path()),
- toolbar_graphics:cursor(Window,arrow),
- loop(S,NewWindow,LoopData,TimerRef);
-
- %% Start Tool Configuration tool
- create_tool_file ->
- toolbar_toolconfig:start(),
- loop(S,Window,LoopData,TimerRef);
-
- %% Add GS contributions
- add_gs_contribs ->
- toolbar_graphics:cursor(Window,busy),
- GsDir = toolbar_lib:gs_contribs_dir(),
- code:add_path(GsDir),
- NewWindow = add_tools(Window,[GsDir]),
- toolbar_graphics:cursor(Window,arrow),
- loop(S,NewWindow,LoopData,TimerRef);
-
- %% Help
- {help,Html} ->
- toolbar_graphics:cursor(Window,busy),
- WinObj = toolbar_graphics:get_window(Window),
- tool_utils:open_help(WinObj, Html),
- toolbar_graphics:cursor(Window,arrow),
- loop(S,Window,LoopData,TimerRef);
-
- %% About help
- about_help ->
- WinObj = toolbar_graphics:get_window(Window),
- Text = ["Help text is on HTML format",
- "Requires Netscape to be up and running"],
- tool_utils:notify(WinObj, Text),
- loop(S,Window,LoopData,TimerRef);
-
- %% Window has been resized, redraw it
- {redraw,Size} ->
- NewWindow = toolbar_graphics:redraw_window(Window,Size),
- loop(S,NewWindow,LoopData,TimerRef);
-
- %% Quit
- quit ->
- finished
- end;
-
- %% ----- Events from user ----- %%
-
- %% Update Toolbar
- update_toolbar ->
- toolbar_graphics:cursor(Window,busy),
- NewWindow = add_tools(Window,code:get_path()),
- toolbar_graphics:cursor(Window,arrow),
- loop(S,NewWindow,LoopData,TimerRef);
-
- %% Quit
- quit ->
- finished;
-
- %% Start Tool Configuration tool
- create_tool_file ->
- toolbar_toolconfig:start(),
- loop(S,Window,LoopData,TimerRef);
-
- %% Add GS contributions
- add_gs_contribs ->
- toolbar_graphics:cursor(Window,busy),
- GsDir = toolbar_lib:gs_contribs_dir(),
- code:add_path(GsDir),
- NewWindow = add_tools(Window,[GsDir]),
- toolbar_graphics:cursor(Window,arrow),
- loop(S,NewWindow,LoopData,TimerRef);
-
- Other ->
- io:format("toolbar: unexp msg ~p~n",[Other]),
- loop(S,Window,LoopData,TimerRef)
- end.
-
-%----------------------------------------
-% call(Msg) => ok | {error,not_started}
-% Msg - term()
-% Send message to toolbar if it is started, otherwise return an error
-%----------------------------------------
-call(Msg) ->
- case whereis(toolbar) of
- undefined ->
- {error,not_started};
- _ ->
- toolbar ! Msg,
- ok
- end.
-
-
-%=============================================================================
-% Addition of new tools
-%=============================================================================
-%----------------------------------------
-% add_tools(Window,Dirs) => NewWindow
-% Window, NewWindow - tbwindow record (see toolbar_graphics.erl)
-% Dirs - [string()] Directory names
-% Calls add_tools2/2 recursively for a number of directories
-%----------------------------------------
-add_tools(Window,[Dir|Rest]) when is_list(Dir) ->
-
- %% Add all tools in the directory Dir
- NewWindow = add_tools2(Window,tool_files(Dir)),
-
- case filename:basename(Dir) of
- %% Dir is an 'ebin' directory, check in '../priv' as well
- "ebin" ->
- NewerWindow =
- add_tools2(NewWindow,
- tool_files(filename:join(filename:dirname(Dir),
- "priv"))),
- add_tools(NewerWindow,Rest);
- _ ->
- add_tools(NewWindow,Rest)
- end;
-add_tools(Window,[]) ->
- Window.
-
-%----------------------------------------
-% add_tools2(Window,ToolFiles) => NewWindow
-% Window, NewWindow - tbwindow record (see toolbar_graphics.erl)
-% ToolFiles - [string()] *.tool file names
-% Calls add_tool/2 recursively for a number of .tool files in a directory
-%----------------------------------------
-add_tools2(Window,[ToolFile|Rest]) ->
- case add_tool(Window,ToolFile) of
- {ok,NewWindow} ->
- add_tools2(NewWindow,Rest);
- {error,_Reason} ->
- add_tools2(Window,Rest)
- end;
-add_tools2(Window,[]) ->
- Window.
-
-%----------------------------------------
-% add_tool(Window,ToolFile) => {ok,NewWindow} | {error,Reason}
-% Window, NewWindow - tbwindow record (see toolbar_graphics.erl)
-% ToolFile - string() A .tool file
-% Reason - noname | nostart | version | format | read | open
-% Reads tool information from a .tool file and adds it to the toolbar
-% Returns the new window information
-%----------------------------------------
-add_tool(Window,ToolFile) ->
- case tool_info(ToolFile) of
- {ok,ToolInfo} ->
- case toolbar_graphics:already_added(Window,ToolInfo) of
- true ->
- {ok,Window};
- false ->
- NewWindow = toolbar_graphics:add_icon(Window,ToolInfo),
- {ok,NewWindow}
- end;
- {error,Reason} ->
- %% Log
- {error,Reason}
- end.
-
-
-%=============================================================================
-% Functions for getting *.tool configuration files
-%=============================================================================
-
-%----------------------------------------
-% tool_files(Dir) => ToolFiles
-% Dir - string() Directory name
-% ToolFiles - [string()]
-% Return the list of all files in Dir ending with .tool (appended to Dir)
-%----------------------------------------
-tool_files(Dir) ->
- case file:list_dir(Dir) of
- {ok,Files} ->
- filter_tool_files(Dir,Files);
- {error,_Reason} ->
- []
- end.
-
-%----------------------------------------
-% filter_tool_files(Dir,Files) => ToolFiles
-% Dir - string() Directory name
-% Files, ToolFiles - [string()] File names
-% Filters out the files in Files ending with .tool and append them to Dir
-%----------------------------------------
-filter_tool_files(_Dir,[]) ->
- [];
-filter_tool_files(Dir,[File|Rest]) ->
- case filename:extension(File) of
- ".tool" ->
- [filename:join(Dir,File)|filter_tool_files(Dir,Rest)];
- _ ->
- filter_tool_files(Dir,Rest)
- end.
-
-
-%=============================================================================
-% Functions for retrieving tool information from *.tool files
-%=============================================================================
-
-%----------------------------------------
-% tool_info(ToolFile) => {ok,ToolInfo} | {error,Reason}
-% ToolFile - string() .tool file
-% ToolInfo - toolinfo record
-% Reason - nofile | format | noname | nostart
-% Retreives tool information from ToolFile
-%----------------------------------------
-tool_info(ToolFile) ->
- case file:consult(ToolFile) of
- {error,open} ->
- {error,nofile};
- {error,read} ->
- {error,format};
- {ok,[{version,Vsn},InfoTuple]} when is_tuple(InfoTuple)->
- case toolbar_lib:tool_info_syntax(Vsn,InfoTuple) of
-
- %% Syntax check ok, start additional checks
- {ok,InfoList} ->
-
- tool_info2(filename:dirname(ToolFile),
- InfoList,#toolinfo{});
-
- %% Syntax error
- Error ->
- Error
- end;
- {ok,[{version,Vsn},ToolInfo]} when is_list(ToolInfo)->
- case toolbar_lib:tool_info_syntax(Vsn,ToolInfo) of
-
- %% Syntax check ok, start additional checks
- {ok,InfoList} ->
- tool_info2(filename:dirname(ToolFile),
- InfoList,#toolinfo{});
-
- %% Syntax error
- Error ->
- Error
- end;
- {ok,_Other} ->
- {error,format}
- end.
-
-%----------------------------------------
-% tool_info2(Dir,Info,ToolInfo) => {ok,ToolInfo}
-% Dir - string() Directory where this .tool file is situated
-% Info - [{Key,Val}] List of tuples in the .tool file
-% ToolInfo - toolinfo record being filled in
-% Used by tool_info2/1
-%----------------------------------------
-%%% Tool name
-tool_info2(Dir,[{tool,Name}|Rest],TI) ->
- tool_info2(Dir,Rest,TI#toolinfo{tool=Name});
-
-%%% Start function
-tool_info2(Dir,[{start,{M,F,A}}|Rest],TI) ->
- tool_info2(Dir,Rest,TI#toolinfo{start={M,F,A}});
-
-%%% Icon file
-%%% It must exist since the icon is drawn immediately after this .tool
-%%% file has been successfully read
-%%% It must also end with a .gif or .xbm suffix
-%%% Otherwise the icon is ignored!
-%%% Uses absolute path: If a relative path is given, it is assumed to be
-%%% relative to the directory of the .tool file
-tool_info2(Dir,[{icon,Icon}|Rest],TI) ->
-
- %% Check that the image file ends with .xbm or .gif
- case image_suffix(Icon) of
- true ->
-
- %% Add absolute path (if necessary)
- File = absolute_path(Dir,Icon),
-
- case toolbar_lib:legal_file(File) of
- ok ->
- tool_info2(Dir,Rest,TI#toolinfo{icon=File});
- _Error ->
- %% LOG File does not exist or cannot be read
- tool_info2(Dir,Rest,TI)
- end;
-
- false ->
- %% LOG Illegal icon file name
- tool_info2(Dir,Rest,TI)
- end;
-
-%%% Message string
-tool_info2(Dir,[{message,Msg}|Rest],TI) ->
- tool_info2(Dir,Rest,TI#toolinfo{message=Msg});
-
-%%% Html file is found
-%%% Check if file exists at "view-time", not now!
-%%% Uses absolute path: If a relative path is given, it is assumed to be
-%%% relative to the directory of the .tool file
-tool_info2(Dir,[{html,Html}|Rest],TI) ->
-
- %% Check if the HTML file is a remote URL or a local file
- case Html of
-
- %% http://... Remote URL, save as is
- [$h,$t,$t,$p,$:,$/,$/|_] ->
- tool_info2(Dir,Rest,TI#toolinfo{html=Html});
-
- %% file:... Local file, save file with absolute path
- [$f,$i,$l,$e,$:|File] ->
- tool_info2(Dir,Rest,TI#toolinfo{html=absolute_path(Dir,File)});
-
- %% Everything else is assumed to be a file name
- %% Save file with absolute path
- _ ->
- tool_info2(Dir,Rest,TI#toolinfo{html=absolute_path(Dir,Html)})
- end;
-
-%%% Info has been traversed
-tool_info2(_Dir,[],ToolInfo) ->
- {ok,ToolInfo}.
-
-%----------------------------------------
-% image_suffix(File) => true | false
-% File - string() File name
-% Returns true if File end with an image suffix: gif or xbm
-%----------------------------------------
-image_suffix(File) ->
- case filename:extension(File) of
- ".gif" ->
- true;
- ".xbm" ->
- true;
- _ ->
- false
- end.
-
-%----------------------------------------
-% absolute_path(Dir,File) => string()
-% Dir, File - string()
-% Given a directory and a file name, return the appended result if the file
-% name does not already contain an absolute path.
-% Dir is supposed to be an absolute path, if it is '.', it is replaced
-% with the current working directory.
-%----------------------------------------
-absolute_path(".",File) ->
- {ok,Cwd} = file:get_cwd(),
- absolute_path(Cwd,File);
-absolute_path(Dir,File) ->
- filename:join(Dir,File).
-
-
-%=============================================================================
-% Start of a tool
-%=============================================================================
-
-%----------------------------------------
-% start_tool({Module,Function,Arguments}, GSobj)
-% Module - atom() Module name
-% Function - atom() Function name
-% Argument - [term()] Function arguments
-% GSobj - gs_obj()
-% Applies the given function in order to start a tool.
-%----------------------------------------
-start_tool({M,F,A}, GSobj) ->
- spawn(fun() -> start_tool(M, F, A, GSobj) end).
-
-start_tool(M,F,A,GSobj) ->
- case catch apply(M,F,A) of
- {'EXIT',Reason} ->
- String1 = io_lib:format("Failed to call apply(~p,~p,~p)",
- [M,F,A]),
- String2 = io_lib:format("Reason: ~p",[Reason]),
- tool_utils:notify(GSobj,[String1,String2]),
- false;
- _ ->
- true
- end.
diff --git a/lib/toolbar/src/toolbar.hrl b/lib/toolbar/src/toolbar.hrl
deleted file mode 100644
index 1793cd1833..0000000000
--- a/lib/toolbar/src/toolbar.hrl
+++ /dev/null
@@ -1,34 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-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%
-%%
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% Erlang Toolbar
-%
-%%% Common data structures %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% Tool configuration information
--record(toolinfo,
- {tool,
- start,
- icon=nofile,
- message="",
- html=nofile}).
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/lib/toolbar/src/toolbar_graphics.erl b/lib/toolbar/src/toolbar_graphics.erl
deleted file mode 100644
index c4c4273c63..0000000000
--- a/lib/toolbar/src/toolbar_graphics.erl
+++ /dev/null
@@ -1,404 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2012. 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(toolbar_graphics).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,create,3}},
- {nowarn_deprecated_function,{gs,read,2}}]).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% Erlang Toolbar
-%
-%%% Description %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% Toolbar graphics.
-% The Toolbar window looks something like this:
-%
-% |-----------------------------|
-% | File Tools Help |
-% |-----------------------------|
-% | |-----| |-----| |-----| |
-% | | | | | | | |
-% | |Icon1| |Icon2|...|IconN| |
-% | |-----| |-----| |-----| |
-% |-----------------------------|
-% | Help text area |
-% |-----------------------------|
-%
-%%% Includes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
--include("toolbar.hrl").
-%
-%%% Internal data structures %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% Toolbar window record
--record(tbwindow,
- {window,menubar,canvas,labelframe,
- label,helpmenu,
- no_of_buttons,
- min_height,min_width,cur_height,icons}).
-%
-%%% Constants %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% Window width
--define(width,215).
-%
-% Icon width and height
--define(icon,34).
-%
-% Margin around icons
--define(pad,0).
-%
-% Default label width and height
--define(wlabel,50).
--define(hlabel,15).
-%
-% Default button width and height
--define(wbutton,50).
--define(hbutton,30).
-%
-%%% Exports %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
--export([event/4]).
--export([draw_window/1,redraw_window/2,already_added/2,add_icon/2]).
--export([get_window/1]).
--export([cursor/2]).
--export([listen_configure/1]).
--export([display_show/2,display_clear/1]).
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%% Exported functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%----------------------------------------
-% event(Data,GsEvent,Data,Args) => Event
-% Data - term()
-% GsEvent - GS event
-% Data, Args - Data and Arg fields associated with the GS event
-% Event - {display,String} | display_clear | noevent | {start,{M,F,A}} |
-% update_toolbar | create_tool_file | add_gs_contribs |
-% {help,Html} | about_help | {redraw,{Width,Height}} | quit |
-% {newData,NewData}
-% String - string()
-% M, F - atom() Module and function name
-% A - [term()] Function argument
-% Html - string() HTML file | nofile
-% Width, Height - integer()
-% NewData - term()
-% Tries to convert a GS event to an internal toolbar event. The separation
-% is intented to keep the implementation details of the graphics hidden
-% for toolbar.erl. Pure graphical events triggered by the GS event will
-% be executed by this function.
-% The Data field is used for saving information between different events
-% (without having to use put/get or ets). Right now it is only used to save
-% the coordinates of the last canvasbutton pressed, making it possible to
-% check if the canvasbutton is released with the mouse moved outside the
-% button (= no action) or with the mouse still inside the button (= action).
-%----------------------------------------
-%%% Mouse enters a icon, display short help message
-event(_LoopData,enter,{canvasbutton,_Cbtn,{_Start,{message,String}}},_Args) ->
- {display,String};
-
-%% Mouse leaves a icon, clear display area
-event(_LoopData,leave,{canvasbutton,_Cbtn,_Data},_Args) ->
- display_clear;
-
-%% An icon is pressed, create graphical illusion of this
-event(_LoopData,buttonpress,{canvasbutton,Canvasbutton,_},_Args) ->
- canvasbutton:press(Canvasbutton),
- {newData,canvasbutton:read(Canvasbutton,coords)};
-
-%% An icon is released, create graphical illusion of this
-event(LoopData,buttonrelease,{canvasbutton,Cbtn,{{start,Start},_Msg}},
- [_,X,Y|_]) ->
- canvasbutton:release(Cbtn),
- case within(X,Y,LoopData) of
- true ->
- {start,Start};
- false ->
- noevent
- end;
-
-%%% Update Toolbar button pressed
-event(_LoopData,click,_Data,["Update Toolbar"|_]) ->
- update_toolbar;
-
-%%% Tool configuration button pressed
-event(_LoopData,click,_Data,["Create Tool File..."|_]) ->
- create_tool_file;
-
-%%% Add GS contribution button pressed
-event(_LoopData,click,_Data,["Add GS Contributions"|_]) ->
- add_gs_contribs;
-
-%%% Help menu button selected
-event(_LoopData,click,{help,Html},_Args) ->
- {help,Html};
-
-%%% About Help menu button selected
-event(_LoopData,click,about_help,_Args) ->
- about_help;
-
-%% Window resized, redraw it
-event(_LoopData,configure,_Data,[Width,Height|_]) ->
- {redraw,{Width,Height}};
-
-%%% Quit button pressed
-event(_LoopData,click,_Data,["Quit"|_]) ->
- quit;
-
-%%% Window closed
-event(_LoopData,destroy,_Data,_Args) ->
- quit;
-
-event(_LoopData,_GsEvent,_Data,_Args) ->
- noevent.
-
-%=============================================================================
-% Main window functions
-%=============================================================================
-
-%----------------------------------------
-% draw_window(S) => Window
-% S - pid() GS
-% Window - tbwindow record
-% This functions create the main window, initially without any tool icons
-%----------------------------------------
-draw_window(S) ->
-
- Norm = ?icon + 2*?pad,
-
- %% Main window
- Win = gs:create(window,S,[{title,"Erlang Tools"},{width,?width}]),
-
- %% Menu bar with menu buttons
- Menubar = gs:create(menubar,Win,[]),
-
- %% File menu
- File = gs:create(menubutton,Menubar,[{label,{text,"File"}},{side,left}]),
- FileM = gs:create(menu,File,[]),
- gs:create(menuitem,FileM,[{label,{text,"Update Toolbar"}}]),
- gs:create(menuitem,FileM,[{label,{text,"Quit"}}]),
-
- %% Tools menu
- Tool = gs:create(menubutton,Menubar,[{label,{text,"Tools"}},{side,left}]),
- ToolM = gs:create(menu,Tool,[]),
- gs:create(menuitem,ToolM,[{label,{text,"Create Tool File..."}}]),
- gs:create(menuitem,ToolM,[{label,{text,"Add GS Contributions"}}]),
-
- %% Help menu
- Help = gs:create(menubutton,Menubar,[{label,{text,"Help"}},{side,right}]),
- HelpM = gs:create(menu,Help,[]),
- gs:create(menuitem,HelpM,[{label,{text,"About..."}},
- {data,about_help}]),
- gs:create(menuitem,HelpM,[{label,{text,"Toolbar"}},
- {data,{help,toolbar_lib:help_file()}}]),
- gs:create(menuitem,HelpM,[{label,{text,"OTP"}},
- {data,{help,toolbar_lib:otp_file()}}]),
- gs:create(menuitem,HelpM,[{itemtype,separator}]),
-
- %% Check height of menu bar
- H = gs:read(Menubar,height),
-
- %% Now the height of the window can be computed
- Height = H+Norm+?hlabel+2*?pad,
- gs:config(Win,{height,Height}),
-
- %% Canvas, here will the Tool canvasbuttons be inserted
- Canvas = gs:create(canvas,Win,[{width,?width},{height,Norm},{x,0},{y,H}]),
-
- %% Label for displaying help messages and the frame containing it
- LabelF = gs:create(frame,Win,[{bg,green},{bw,1},
- {width,?width},{height,?hlabel+2*?pad},
- {x,0},{y,H+Norm}]),
- Label = gs:create(label,LabelF,[{align,w},{height,?hlabel},
- {width,?width},{x,?pad},{y,?pad},
- {label,{text,string:copies(" ",30)}}]),
-
- gs:config(Win,{map,true}),
-
- #tbwindow{window=Win,
- menubar=Menubar,canvas=Canvas,labelframe=LabelF,
- label=Label,helpmenu=HelpM,
- no_of_buttons=0,
- min_height=Height,min_width=?width,cur_height=Height,
- icons=[]}.
-
-%----------------------------------------
-% redraw_window(Window,{NewWidth,NewHeight}) => NewWindow
-% Window, NewWindow - tbwindow record
-% NewWidth, NewHeight - integer()
-% Redraw main window contents according to a new size
-%----------------------------------------
-redraw_window(Window,{NewWidth,NewHeight}) ->
-
- MinWidth = Window#tbwindow.min_width,
- if
- NewWidth=<MinWidth ->
- true;
- true ->
- gs:config(Window#tbwindow.canvas,{width,NewWidth}),
- gs:config(Window#tbwindow.labelframe,{width,NewWidth}),
- gs:config(Window#tbwindow.label,{width,NewWidth-2*?pad})
- end,
-
- MinHeight = Window#tbwindow.min_height,
- if
- NewHeight=<MinHeight ->
- Window;
- true ->
-
- %% Compute size difference
- Diff = NewHeight - Window#tbwindow.cur_height,
-
- %% Resize button frame
- Canvas = Window#tbwindow.canvas,
- gs:config(Canvas,{height,gs:read(Canvas,height)+Diff}),
-
- %% Move label frame accordingly
- LabelF = Window#tbwindow.labelframe,
- gs:config(LabelF,{y,gs:read(LabelF,y)+Diff}),
-
- %% Return updated tbwindow record
- Window#tbwindow{cur_height=NewHeight}
- end.
-
-%----------------------------------------
-% already_added(Window,ToolInfo) => true | false
-% Window - tbwindow record
-% ToolInfo - toolinfo record
-% Returns true if ToolInfo contains information about a tool that
-% is already included in Window
-%----------------------------------------
-already_added(Window,ToolInfo) ->
- already_added2(Window#tbwindow.icons,ToolInfo#toolinfo.tool).
-
-%----------------------------------------
-% already_added2(ToolInfos,Tool) => true | false
-% ToolInfos - [toolinfo record]
-% Tool - atom() Tool name
-%----------------------------------------
-already_added2([#toolinfo{tool=Tool}|_Rest],Tool) ->
- true;
-already_added2([_|Rest],Tool) ->
- already_added2(Rest,Tool);
-already_added2([],_ToolInfo) ->
- false.
-
-%----------------------------------------
-% add_icon(Window,ToolInfo) => NewWindow
-% Window, NewWindow - tbwindow record
-% ToolInfo - toolinfo record
-% Add an icon to the main window
-%----------------------------------------
-add_icon(Window,ToolInfo) ->
- Norm = ?icon + 2*?pad,
-
- %% Extend window if necessary
- N = Window#tbwindow.no_of_buttons,
- ReqWidth = N*Norm+Norm,
- CurWidth = gs:read(Window#tbwindow.window,width),
- if
- ReqWidth>CurWidth ->
- gs:config(Window#tbwindow.window,{width,ReqWidth}),
- gs:config(Window#tbwindow.canvas,{width,ReqWidth}),
- gs:config(Window#tbwindow.labelframe,{width,ReqWidth}),
- gs:config(Window#tbwindow.label,{width,ReqWidth-2*?pad});
- true ->
- true
- end,
-
- %% Insert icon into button frame
- canvasbutton:create(Window#tbwindow.canvas,
- [{image,ToolInfo#toolinfo.icon},
- {x,N*Norm+?pad},{y,?pad},
- {width,?icon},{height,?icon},
- {data,{{start,ToolInfo#toolinfo.start},
- {message,ToolInfo#toolinfo.message}}}]),
-
- %% Insert tool name into help menu (if there is any help available)
- case ToolInfo#toolinfo.html of
- nofile ->
- true;
- Html ->
- gs:create(menuitem,Window#tbwindow.helpmenu,
- [{label,{text,ToolInfo#toolinfo.tool}},
- {data,{help,Html}}])
- end,
-
- MinWidth = gs:read(Window#tbwindow.window,width),
- Window#tbwindow{no_of_buttons=N+1,min_width=MinWidth,
- icons=[ToolInfo|Window#tbwindow.icons]}.
-
-%----------------------------------------
-% get_window(Window) -> gs_obj()
-% Window - tbwindow record
-%----------------------------------------
-get_window(Window) ->
- Window#tbwindow.window.
-
-%----------------------------------------
-% cursor(Window,Cursor)
-% Window - tbwindow record
-% Cursor - arrow | busy
-%----------------------------------------
-cursor(Window,Cursor) ->
- gs:config(Window#tbwindow.window,{cursor,Cursor}).
-
-%----------------------------------------
-% listen_configure(Window)
-% Window - tbwindow record
-% Configure Window to listen for configure events
-%----------------------------------------
-listen_configure(Window) ->
- gs:config(Window#tbwindow.window,{configure,true}).
-
-%----------------------------------------
-% display_show(Window,Text)
-% Window - tbwindow record
-% Text - string()
-% Display text in the help text area
-%----------------------------------------
-display_show(Window,Text) ->
- gs:config(Window#tbwindow.label,{label,{text,Text}}).
-
-%----------------------------------------
-% display_clear(Window)
-% Window - tbwindow record
-% Clear the help text area
-%----------------------------------------
-display_clear(Window) ->
- display_show(Window,"").
-
-%%% Internal functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%----------------------------------------
-% within(X,Y,[{Left,Top},{Right,Bot}]) => true | false
-% Return true if {X,Y} is within the given rectangle.
-%----------------------------------------
-within(X,Y,[{L,T},{R,B}]) ->
- if
- X>=L,
- X=<R,
- Y>=T,
- Y=<B ->
- true;
- true ->
- false
- end.
diff --git a/lib/toolbar/src/toolbar_lib.erl b/lib/toolbar/src/toolbar_lib.erl
deleted file mode 100644
index 9d3b9fdeb5..0000000000
--- a/lib/toolbar/src/toolbar_lib.erl
+++ /dev/null
@@ -1,223 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-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(toolbar_lib).
--include_lib("kernel/include/file.hrl").
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% Erlang Toolbar
-%
-%%% Description %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% Library functions
-%
-%%% Exports %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
--export([gs_contribs_dir/0,help_file/0,otp_file/0]).
--export([error_string/1]).
--export([legal_file/1]).
--export([insert_newlines/1]).
--export([tool_info_syntax/2]).
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%% Exported functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%----------------------------------------
-% gs_contribs_dir() => string()
-% Return the directory of the GS contributions
-%----------------------------------------
-gs_contribs_dir() ->
- filename:join(code:lib_dir(gs),"contribs/ebin/").
-
-%----------------------------------------
-% help_file() => string()
-% Returns the address to the toolbar help file
-%----------------------------------------
-help_file() ->
- filename:join([code:lib_dir(toolbar),"doc", "html", "index.html"]).
-
-%----------------------------------------
-% otp_file() => string()
-% Returns the address to the OTP documentation
-%----------------------------------------
-otp_file() ->
- filename:join([code:root_dir(),"doc", "index.html"]).
-
-%----------------------------------------
-% error_string(Reason) => string()
-% Reason - nofile | format | noname | nostart | illegal | raccess | waccess
-% Given Reason, returns a short "explanation string"
-%----------------------------------------
-error_string(nofile) -> "File does not exist";
-error_string(format) -> "File on wrong format";
-
-error_string(noname) -> "No tool name is specified";
-error_string(nostart) -> "No start function is specified";
-
-error_string(illegal) -> "Illegal file name";
-
-error_string(raccess) -> "File is not readable";
-error_string(waccess) -> "File is not writeable".
-
-%----------------------------------------
-% legal_file(File) => ok | directory | {error,nofile} | {error,raccess}
-% File - string() File name
-% Checks if File is an existing and readable file.
-%----------------------------------------
-legal_file(File) ->
- case file:read_file_info(File) of
-
- %% File exists...
- {ok,#file_info{type=regular,access=Access}} ->
- if
-
- %% ...but is read protected
- Access/=read,
- Access/=read_write ->
- {error,raccess};
-
- %% ...and is possible to read
- true ->
- ok
- end;
-
- {ok,#file_info{type=directory}} ->
- directory;
-
- %% File does not exist
- _Error ->
- {error,nofile}
- end.
-
-%----------------------------------------
-% insert_newlines(Strings) => string()
-% Strings - string() | [string()]
-% If Strings is a list of strings, return a string where all these strings
-% are concatenated with newlines in between, otherwise return Strings.
-%----------------------------------------
-insert_newlines([String|Rest]) when is_list(String), Rest/=[]->
- String ++ "\n" ++ insert_newlines(Rest);
-insert_newlines([Last]) ->
- [Last];
-insert_newlines(Other) ->
- Other.
-
-%----------------------------------------
-% tool_info_syntax(Version,ToolInfo) => {ok,CorrToolInfo} | {error,Reason}
-% Version - string()
-% ToolInfo - tuple()
-% CorrToolInfo - list()
-% Reason - version | format | noname | nostart
-% Return a corrected (blanks removed etc) version of ToolInfo
-% if the syntax of ToolInfo is correct (ie contains all
-% mandatory elements and all values are of the specified type).
-%
-% Currently accepted versions:
-% "0.1" (which should be "1.0")
-% "1.1" (same as "0.1")
-%----------------------------------------
-tool_info_syntax("1.1",ToolInfo) ->
- tool_info_syntax("0.1",ToolInfo);
-tool_info_syntax("0.1",ToolInfo) when is_tuple(ToolInfo) ->
- syntax01(tuple_to_list(ToolInfo),false,false,[]);
-tool_info_syntax("0.1",_) ->
- {error,format};
-tool_info_syntax("1.2",ToolInfo) when is_list(ToolInfo)->
- syntax01(ToolInfo,false,false,[]);
-tool_info_syntax(_Vsn,_) ->
- {error,version}.
-
-
-%%% Internal functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%----------------------------------------
-% syntax01(List,NameF,StartF,Res) => {ok,Res} | {error,Reason}
-% List - [tuple()]
-% NameF, StartF - boolean()
-% Res - [tuple()]
-% Reason - format | noname | nostart
-% Version 0.1 syntax check of .tool file.
-%----------------------------------------
-syntax01([{tool,Str}|Rest],false,StartF,Res) when is_list(Str) ->
- case string:strip(Str) of
- [] ->
- {error,format};
- Tool ->
- syntax01(Rest,true,StartF,[{tool,Tool}|Res])
- end;
-syntax01([{start,{M,F,A}}|Rest],NameF,false,Res) when is_atom(M),
- is_atom(F),
- is_list(A) ->
- syntax01(Rest,NameF,true,[{start,{M,F,A}}|Res]);
-syntax01([{icon,Str}|Rest],NameF,StartF,Res) when is_list(Str) ->
- case string:strip(Str) of
- [] ->
- syntax01(Rest,NameF,StartF,Res);
- Icon ->
- syntax01(Rest,NameF,StartF,[{icon,Icon}|Res])
- end;
-syntax01([{message,Str}|Rest],NameF,StartF,Res) when is_list(Str) ->
- case string:strip(Str) of
- [] ->
- syntax01(Rest,NameF,StartF,Res);
- Message ->
- syntax01(Rest,NameF,StartF,
- [{message,lists:sublist(Message,1,30)}|Res])
- end;
-syntax01([{html,Str}|Rest],NameF,StartF,Res) when is_list(Str) ->
- case string:strip(Str) of
- [] ->
- syntax01(Rest,NameF,StartF,Res);
- Html ->
- syntax01(Rest,NameF,StartF,[{html,Html}|Res])
- end;
-%%The fields used by webtool must be removed
-syntax01([_|Rest],NameF,StartF,Res) ->
- syntax01(Rest,NameF,StartF,Res);
-
-syntax01([],true,true,Res) ->
- {ok,Res};
-syntax01([],false,_,_) ->
- {error,noname};
-syntax01([],_,false,_) ->
- {error,nostart};
-syntax01(_,_,_,_) ->
- {error,format}.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/lib/toolbar/src/toolbar_toolconfig.erl b/lib/toolbar/src/toolbar_toolconfig.erl
deleted file mode 100644
index 479033fa22..0000000000
--- a/lib/toolbar/src/toolbar_toolconfig.erl
+++ /dev/null
@@ -1,549 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2012. 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(toolbar_toolconfig).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,create,3}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,start,0}}]).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% Erlang Toolbar
-%
-%%% Description %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% Tool configuration tool, edit and creates .tool files
-% This tool works separately from the toolbar.
-%
-%%% External data types %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% toolinfo() -- Tool configuration information
--include("toolbar.hrl").
-%
-%%% Internal data types %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% tfwindow() -- Toolfile configuration window
--record(tfwindow,
- {window,
- fileentry,
- toolentry,moduleentry,functionentry,
- iconentry,messageentry,htmlentry,
- label}).
-%
-%%% Exports %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
--export([start/0]).
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
--export([init/0]). % spawn
-
-
-%%% Exported functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%----------------------------------------
-% start() => pid()
-%----------------------------------------
-start() ->
- spawn(toolbar_toolconfig,init,[]).
-
-
-%%% Internal functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%=============================================================================
-% Main loop
-%=============================================================================
-
-%----------------------------------------
-% init()
-%----------------------------------------
-init() ->
-
- %% Start GS (or get the pid if it is already running)
- S = gs:start(),
-
- %% Draw the window
- Window = draw_window(S),
-
- loop(S,Window).
-
-%----------------------------------------
-% loop(S,Window)
-% S - pid() GS
-% Window - tfwindow()
-%----------------------------------------
-loop(S,Window) ->
- receive
-
- %% 'Return' pressed in the 'File' entry
- {gs,_Obj,keypress,file,['Return'|_]} ->
-
- %% Check if a file name is specified
- case string:strip(gs:read(Window#tfwindow.fileentry,text)) of
-
- %% No file name specified, move focus to next entry
- "" ->
- move_focus(Window,file);
-
- %% A name is specified
- String ->
-
- %% Add a .tool suffix to the file name if necessary
- FileName = tool_file(String),
-
- %% Write the complete file name to the file entry
- gs:config(Window#tfwindow.fileentry,{text,FileName}),
-
- %% Try to open the file
- case file:consult(FileName) of
-
- %% File exists and seems ok
- {ok,[{version,Vsn},T]} ->
-
- %% Check the syntax of the file contents
- %% (All mandatory information specified,
- %% correct types, etc)
- case toolbar_lib:tool_info_syntax(Vsn,T) of
-
- %% Ok -- Show the file contents in the window
- %% and move focus to the next entry
- {ok,Info} ->
- display(Window,"File: "++FileName++
- " opened"),
- clear_info(Window),
- show_info(Window,Info),
- move_focus(Window,file);
-
- %% Erroneous version number -- Notify user
- {error,version} ->
- Win = Window#tfwindow.window,
- tool_utils:notify(Win,[FileName,
- "File has wrong version number"]);
-
- %% Other error -- Notify user
- _Error ->
- Win = Window#tfwindow.window,
- tool_utils:notify(Win,[FileName,
- "File is in erroneous format"])
- end;
-
- %% The file can not be read, show default values
- %% according to the file name in the window and
- %% move focus to the next entry
- _ ->
- display(Window,"File: "++FileName ++
- " could not be read, new file"),
- Tool = filename:basename(FileName,".tool"),
- clear_info(Window),
- show_info(Window,[{tool,Tool},
- {start,{list_to_atom(Tool),
- start,[]}},
- {icon,Tool++".gif"},
- {html,Tool++".html"}]),
- move_focus(Window,file)
- end
- end,
- loop(S,Window);
-
- %% 'Return' pressed in another entry, move focus to next entry
- {gs,_Obj,keypress,Focus,['Return'|_]} ->
- move_focus(Window,Focus),
- loop(S,Window);
-
- %% Any oher keypress, clear the display
- {gs,_Obj,keypress,_Data,_Args} ->
- display_clear(Window),
- loop(S,Window);
-
- %% 'Clear' button pressed, clear the window
- {gs,_Obj,click,_Data,["Clear"|_]} ->
- clear_info(Window),
- loop(S,Window);
-
- %% 'Save' button pressed, save the given information to file
- {gs,_Obj,click,_Data,["Save"|_]} ->
-
- %% Check if a file name is specified
- case string:strip(gs:read(Window#tfwindow.fileentry,text)) of
-
- %% No file name specified, notify user
- "" ->
- Win = Window#tfwindow.window,
- tool_utils:notify(Win,
- "A file name must be specified");
-
- %% A name is specified
- String ->
-
- %% Add a .tool suffix to the file name if necessary
- FileName = tool_file(String),
-
- %% Write the complete file name to the file entry
- gs:config(Window#tfwindow.fileentry,{text,FileName}),
-
- %% Check the other information given
- case check_info(Window) of
-
- %% If given info is correct, try to save
- %% it to the file
- {ok,ToolInfo} ->
- Win = Window#tfwindow.window,
- case save_info(Win,FileName,ToolInfo) of
-
- %% Ok, display confirmation
- ok ->
- display(Window,
- "Tool information saved to "++
- FileName);
-
- %% Cancel, do nothing
- cancel ->
- ignore;
-
- %% Error, display error message
- {error,Reason} ->
- display(Window,
- toolbar_lib:error_string(Reason)++
- FileName)
- end;
-
- %% Given info incorrect, notify user
- {error,Reason} ->
- Win = Window#tfwindow.window,
- Str = toolbar_lib:error_string(Reason),
- tool_utils:notify(Win,Str)
- end
- end,
- loop(S,Window);
-
- %% 'Stop' button, close window and exit
- {gs,_Obj,click,_Data,["Stop"|_]} ->
- gs:destroy(Window#tfwindow.window),
- finished;
-
- %% Window closed, exit
- {gs,_Obj,destroy,_Data,_Args} ->
- finished;
-
- Other ->
- io:format("toolbar_toolconfig: unexp msg: ~p~n",[Other]),
- loop(S,Window)
- end.
-
-
-%=============================================================================
-% Graphics
-%=============================================================================
-
-%----------------------------------------
-% draw_window(S)
-% S - pid() GS
-% Draw the main window.
-%----------------------------------------
-draw_window(S) ->
-
- %% ----- Open a new window -----
- Win = gs:create(window,S,[{width,400},{height,390},
- {title,"Create Tool File"}]),
-
- %% ----- Top frame containing a 'File name' label and entry -----
- Top = gs:create(frame,Win,[{x,0},{y,0},{width,400},{height,60},{bw,2},
- {keypress,true}]),
-
- %% File name
- gs:create(label,Top,[{x,10},{y,10},{width,80},{height,30},{align,e},
- {keypress,true},
- {label,{text,"File name:"}}]),
- File = gs:create(entry,Top,[{x,110},{y,10},{width,280},{height,30},
- {keypress,true},{data,file}]),
-
- %% ----- Middle frame containing other labels and entries -----
- Mid = gs:create(frame,Win,[{x,0},{y,60},{width,400},{height,250},{bw,2},
- {keypress,true}]),
-
- %% Tool name
- gs:create(label,Mid,[{x,10},{y,10},{width,80},{height,30},{align,e},
- {keypress,true},
- {label,{text,"Tool name:"}}]),
- Tool = gs:create(entry,Mid,[{x,110},{y,10},{width,280},{height,30},
- {keypress,true},{data,tool}]),
-
- %% Start function
- gs:create(label,Mid,[{x,10},{y,60},{width,80},{height,30},{align,e},
- {keypress,true},
- {label,{text,"Start:"}}]),
- Mod = gs:create(entry,Mid,[{x,110},{y,60},{width,135},{height,30},
- {keypress,true},{data,module}]),
- Fun = gs:create(entry,Mid,[{x,245},{y,60},{width,135},{height,30},
- {keypress,true},{data,function}]),
-
- %% Icon file
- gs:create(label,Mid,[{x,10},{y,110},{width,80},{height,30},{align,e},
- {keypress,true},
- {label,{text,"Icon file:"}}]),
- Icon = gs:create(entry,Mid,[{x,110},{y,110},{width,280},{height,30},
- {keypress,true},{data,icon}]),
-
- %% Message
- gs:create(label,Mid,[{x,10},{y,160},{width,80},{height,30},{align,e},
- {keypress,true},
- {label,{text,"Message:"}}]),
- Msg = gs:create(entry,Mid,[{x,110},{y,160},{width,280},{height,30},
- {keypress,true},{data,message}]),
-
- %% HTML file
- gs:create(label,Mid,[{x,10},{y,210},{width,80},{height,30},{align,e},
- {keypress,true},
- {label,{text,"HTML:"}}]),
- Html = gs:create(entry,Mid,[{x,110},{y,210},{width,280},{height,30},
- {keypress,true},{data,html}]),
-
- %% ----- Bottom frame containing the buttons -----
- Bot = gs:create(frame,Win,[{x,0},{y,310},{width,400},{height,50},
- {bw,2},{keypress,true}]),
-
- gs:create(button,Bot,[{x,75},{y,10},{width,50},{height,30},
- {keypress,true},
- {label,{text,"Clear"}}]),
- gs:create(button,Bot,[{x,175},{y,10},{width,50},{height,30},
- {keypress,true},
- {label,{text,"Save"}}]),
- gs:create(button,Bot,[{x,275},{y,10},{width,50},{height,30},
- {keypress,true},
- {label,{text,"Stop"}}]),
-
- %% ----- Label for displaying help messages -----
- Lbl = gs:create(label,Win,[{x,0},{y,360},{width,400},{height,30},{bw,2},
- {relief,raised},
- {keypress,true},
- {align,c},{label,{text,""}}]),
-
- gs:config(Win,{map,true}),
- gs:config(File,{setfocus,true}),
-
- #tfwindow{window=Win,
- fileentry=File,
- toolentry=Tool,
- moduleentry=Mod,
- functionentry=Fun,
- iconentry=Icon,
- messageentry=Msg,
- htmlentry=Html,
- label=Lbl}.
-
-%----------------------------------------
-% move_focus(Window,Focus)
-% Window - tfwindow()
-% Focus - file | tool | module | function | icon | message | html | none
-% Move the input focus to the entry following Focus
-%----------------------------------------
-move_focus(Window,file) ->
- gs:config(Window#tfwindow.toolentry,{setfocus,true});
-move_focus(Window,tool) ->
- gs:config(Window#tfwindow.moduleentry,{setfocus,true});
-move_focus(Window,module) ->
- gs:config(Window#tfwindow.functionentry,{setfocus,true});
-move_focus(Window,function) ->
- gs:config(Window#tfwindow.iconentry,{setfocus,true});
-move_focus(Window,icon) ->
- gs:config(Window#tfwindow.messageentry,{setfocus,true});
-move_focus(Window,message) ->
- gs:config(Window#tfwindow.htmlentry,{setfocus,true});
-move_focus(Window,html) ->
- gs:config(Window#tfwindow.htmlentry,{setfocus,false});
-move_focus(_Window,none) ->
- true.
-
-%----------------------------------------
-% display(Window,Text)
-% Window - tfwindow()
-% Text - string()
-% Display a help message in the window
-%----------------------------------------
-display(Window,Text) ->
- gs:config(Window#tfwindow.label,{label,{text,Text}}).
-
-%----------------------------------------
-% display_clear(Window)
-% Window - tfwindow()
-% Clear the help message display
-%----------------------------------------
-display_clear(Window) ->
- display(Window,"").
-
-%----------------------------------------
-% clear_info(Window)
-% Window - tfwindow()
-% Clear the entries of Window (except the file entry)
-%----------------------------------------
-clear_info(Window) ->
- gs:config(Window#tfwindow.toolentry,{text,""}),
- gs:config(Window#tfwindow.moduleentry,{text,""}),
- gs:config(Window#tfwindow.functionentry,{text,""}),
- gs:config(Window#tfwindow.iconentry,{text,""}),
- gs:config(Window#tfwindow.messageentry,{text,""}),
- gs:config(Window#tfwindow.htmlentry,{text,""}).
-
-%----------------------------------------
-% show_info(Window,List)
-% Window - tfwindow()
-% List - [{Key,Val}]
-% Key - tool, Val - string()
-% Key - start, Val - {atom(),atom(),_}
-% Key - icon, Val - string()
-% Key - message, Val - string()
-% Key - html, Val - string()
-% Display the different Val's in the appropriate entries of Window
-%----------------------------------------
-show_info(_Window,[]) ->
- ok;
-show_info(Window,[{tool,Tool}|Rest]) ->
- gs:config(Window#tfwindow.toolentry,{text,Tool}),
- show_info(Window,Rest);
-show_info(Window,[{start,{M,F,_}}|Rest]) ->
- gs:config(Window#tfwindow.moduleentry,{text,M}),
- gs:config(Window#tfwindow.functionentry,{text,F}),
- show_info(Window,Rest);
-show_info(Window,[{icon,Icon}|Rest]) ->
- gs:config(Window#tfwindow.iconentry,{text,Icon}),
- show_info(Window,Rest);
-show_info(Window,[{message,Message}|Rest]) ->
- gs:config(Window#tfwindow.messageentry,{text,Message}),
- show_info(Window,Rest);
-show_info(Window,[{html,Html}|Rest]) ->
- gs:config(Window#tfwindow.htmlentry,{text,Html}),
- show_info(Window,Rest).
-
-
-%=============================================================================
-% Retrieve user specified information
-%=============================================================================
-
-%----------------------------------------
-% check_info(Window) => {ok,ToolInfo} | {error,Reason}
-% Window - tfwindow()
-% ToolInfo - toolinfo()
-% Reason - noname | nostart
-% Check the information given in the entries and insert it into ToolInfo
-% if all mandatory information is given.
-%----------------------------------------
-check_info(Window) ->
-
- %% First check mandatory elements: name and start function
- Tool = gs:read(Window#tfwindow.toolentry,text),
- M = gs:read(Window#tfwindow.moduleentry,text),
- F = gs:read(Window#tfwindow.functionentry,text),
-
- if
- Tool/="",M/="",F/="" ->
- ToolInfo =
- #toolinfo{tool=Tool,
- start={list_to_atom(M),list_to_atom(F),[]},
- icon=gs:read(Window#tfwindow.iconentry,text),
- message=gs:read(Window#tfwindow.messageentry,text),
- html=gs:read(Window#tfwindow.htmlentry,text)},
- {ok,ToolInfo};
-
- Tool=="" ->
- {error,noname};
-
- true ->
- {error,nostart}
- end.
-
-
-%=============================================================================
-% Save information to file
-%=============================================================================
-
-%----------------------------------------
-% save_info(Win,File,ToolInfo) => ok | cancel | {error,waccess}
-% Win - GS object
-% File - string()
-% ToolInfo - toolinfo()
-% Saves the information in ToolInfo to File on a predefined format.
-%----------------------------------------
-save_info(Win,File,ToolInfo) ->
-
- %% First check if file already exists
- case file:read_file_info(File) of
- {ok,_FileInfo} ->
-
- %% Request the user to confirm that the file should
- %% be overwritten
- case tool_utils:confirm(Win,[File,
- "exists, will be overwritten"]) of
- ok ->
- save_info2(File,ToolInfo);
- cancel ->
- cancel
- end;
-
- {error,_Reason} -> % _Reason = "No such file or directory"
- save_info2(File,ToolInfo)
- end.
-
-%----------------------------------------
-% save_info2(File,ToolInfo) => ok | {error,waccess}
-% File - string() File name
-% ToolInfo - toolinfo record
-% Called by save_info/3
-%----------------------------------------
-save_info2(File,ToolInfo) ->
- case file:open(File, [write]) of
- {ok,Fd} ->
- io:format(Fd,"{version,\"~s\"}.~n",[toolbar:version()]),
- io:format(Fd,"{{tool,\"~s\"},~n",[ToolInfo#toolinfo.tool]),
- io:format(Fd," {start,~w}",[ToolInfo#toolinfo.start]),
- case ToolInfo#toolinfo.icon of
- "" -> ignore;
- Icon -> io:format(Fd,",~n {icon,\"~s\"}",[Icon])
- end,
- case ToolInfo#toolinfo.message of
- "" -> ignore;
- Message -> io:format(Fd,",~n {message,\"~s\"}",[Message])
- end,
- case ToolInfo#toolinfo.html of
- "" -> ignore;
- Html -> io:format(Fd,",~n {html,\"~s\"}",[Html])
- end,
- io:format(Fd,"}.~n",[]),
- file:close(Fd),
- ok;
- _Error ->
- {error,waccess}
- end.
-
-
-%=============================================================================
-% Auxiliary functions
-%=============================================================================
-
-%----------------------------------------
-% tool_file(File) => string()
-% File - string()
-% Return a file name consisting of File with the suffix .tool added,
-% if File does not already have this suffix.
-%----------------------------------------
-tool_file(File) ->
- case filename:extension(File) of
- ".tool" -> File;
- _ -> File ++ ".tool"
- end.
diff --git a/lib/toolbar/vsn.mk b/lib/toolbar/vsn.mk
deleted file mode 100644
index e84fb4e37b..0000000000
--- a/lib/toolbar/vsn.mk
+++ /dev/null
@@ -1,10 +0,0 @@
-TOOLBAR_VSN = 1.4.2.3
-
-
-
-
-
-
-
-
-
diff --git a/lib/tools/test/xref_SUITE.erl b/lib/tools/test/xref_SUITE.erl
index 3e9eaf259c..353275ae3b 100644
--- a/lib/tools/test/xref_SUITE.erl
+++ b/lib/tools/test/xref_SUITE.erl
@@ -1098,6 +1098,7 @@ read_expected(Version) ->
{POS1+1,{FF,{mod17,fun17,0}}},
{POS1+2,{FF,{erlang,spawn,1}}},
{POS1+2,{FF,{read,local,0}}},
+ {POS1+3,{FF,{erlang,binary_to_term,1}}},
{POS1+3,{FF,{erlang,spawn,1}}},
{POS1+4,{FF,{dist,func,0}}},
{POS1+4,{FF,{erlang,spawn,1}}},
@@ -1206,7 +1207,6 @@ read_expected(Version) ->
OKB1 = [{POS13+1,{FF,{erts_debug,apply,4}}},
{POS13+2,{FF,{erts_debug,apply,4}}},
{POS13+3,{FF,{erts_debug,apply,4}}},
- {POS1+3, {FF,{erlang,binary_to_term,1}}},
{POS3+1, {FF,{erlang,spawn,3}}},
{POS3+2, {FF,{erlang,spawn,3}}},
{POS3+3, {FF,{erlang,spawn_link,3}}},
diff --git a/lib/tv/AUTHORS b/lib/tv/AUTHORS
deleted file mode 100644
index 7736a75b2f..0000000000
--- a/lib/tv/AUTHORS
+++ /dev/null
@@ -1,5 +0,0 @@
-Original Authors and Contributors:
-
-Fredrik Gustafson
-
-
diff --git a/lib/tv/Makefile b/lib/tv/Makefile
deleted file mode 100644
index 1c6d4b54f6..0000000000
--- a/lib/tv/Makefile
+++ /dev/null
@@ -1,35 +0,0 @@
-#
-# %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
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/tv/doc/html/.gitignore
+++ /dev/null
diff --git a/lib/tv/doc/man3/.gitignore b/lib/tv/doc/man3/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/tv/doc/man3/.gitignore
+++ /dev/null
diff --git a/lib/tv/doc/pdf/.gitignore b/lib/tv/doc/pdf/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/tv/doc/pdf/.gitignore
+++ /dev/null
diff --git a/lib/tv/doc/src/Makefile b/lib/tv/doc/src/Makefile
deleted file mode 100644
index 413eb8f634..0000000000
--- a/lib/tv/doc/src/Makefile
+++ /dev/null
@@ -1,138 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1997-2012. 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
-
-# ----------------------------------------------------
-# 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)
-
-HTML_REF_MAN_FILE = $(HTMLDIR)/index.html
-
-TOP_PDF_FILE = $(PDFDIR)/$(APPLICATION)-$(VSN).pdf
-
-# ----------------------------------------------------
-# FLAGS
-# ----------------------------------------------------
-XML_FLAGS +=
-DVIPS_FLAGS +=
-
-# ----------------------------------------------------
-# Targets
-# ----------------------------------------------------
-$(HTMLDIR)/%.gif: %.gif
- $(INSTALL_DATA) $< $@
-
-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 *~
-
-man: $(MAN3_FILES)
-
-gifs: $(GIF_FILES:%=$(HTMLDIR)/%)
-
-debug opt:
-
-
-# ----------------------------------------------------
-# Release Target
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_release_targets.mk
-
-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"
-
-release_spec:
-
diff --git a/lib/tv/doc/src/book.xml b/lib/tv/doc/src/book.xml
deleted file mode 100644
index b0d05d290b..0000000000
--- a/lib/tv/doc/src/book.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE book SYSTEM "book.dtd">
-
-<book xmlns:xi="http://www.w3.org/2001/XInclude">
- <header titlestyle="normal">
- <copyright>
- <year>1997</year><year>2013</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
deleted file mode 100644
index c075478967..0000000000
--- a/lib/tv/doc/src/fascicules.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!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
deleted file mode 100644
index 7913fc4230..0000000000
--- a/lib/tv/doc/src/info_window.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/doc/src/info_window.ps b/lib/tv/doc/src/info_window.ps
deleted file mode 100644
index b459523d0f..0000000000
--- a/lib/tv/doc/src/info_window.ps
+++ /dev/null
@@ -1,814 +0,0 @@
-%!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/note.gif b/lib/tv/doc/src/note.gif
deleted file mode 100644
index 6fffe30419..0000000000
--- a/lib/tv/doc/src/note.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/doc/src/notes.xml b/lib/tv/doc/src/notes.xml
deleted file mode 100644
index 4f066e5c70..0000000000
--- a/lib/tv/doc/src/notes.xml
+++ /dev/null
@@ -1,288 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE chapter SYSTEM "chapter.dtd">
-
-<chapter>
- <header>
- <copyright>
- <year>2004</year><year>2013</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.10</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Misc build updates</p>
- <p>
- Own Id: OTP-10784</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>TV 2.1.4.9</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>The GS applications is now deprecated and will be
- removed in the R16 release. The following GS-based
- applications have been superseded by the Observer
- application and will removed in R16: Appmon, Pman,
- Tv.</p>
- <p>
- *** POTENTIAL INCOMPATIBILITY ***</p>
- <p>
- Own Id: OTP-9907</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>TV 2.1.4.8</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Eliminate use of deprecated regexp module</p>
- <p>
- Own Id: OTP-9810</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>TV 2.1.4.7</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
- <item>
- <p>
- tv: Allow table viewer to display refs, ports and small
- binaries</p>
- <p>
- Table viewer displayed #Port, #Ref, or #Bin as place
- holders for their respective object types in ets and
- mnesia tables. This can make table viewer difficult to
- use when viewing tables containing those data types. It
- doesn't make sense to render large binaries so #Bin will
- still be used for binaries that exceed 100 bytes. (Thanks
- to Blaine whittle)</p>
- <p>
- Own Id: OTP-9153</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>TV 2.1.4.6</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
- <item>
- <p>
- With some window managers (e.g. stumpwm), <c>tv</c> would
- constantly restart while trying to open a table. (Thanks
- to Dmitriy Budashny.)</p>
- <p>
- Own Id: OTP-8751</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>TV 2.1.4.5</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Warnings due to new autoimported BIFs removed</p>
- <p>
- Own Id: OTP-8674 Aux Id: OTP-8579 </p>
- </item>
- </list>
- </section>
-
-</section>
-
-<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
deleted file mode 100644
index b82c66b05a..0000000000
--- a/lib/tv/doc/src/part.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE part SYSTEM "part.dtd">
-
-<part xmlns:xi="http://www.w3.org/2001/XInclude">
- <header>
- <copyright>
- <year>1997</year><year>2013</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
deleted file mode 100644
index 6fdf2ba2dd..0000000000
--- a/lib/tv/doc/src/part_notes.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE part SYSTEM "part.dtd">
-
-<part xmlns:xi="http://www.w3.org/2001/XInclude">
- <header>
- <copyright>
- <year>2004</year><year>2013</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
deleted file mode 100644
index 26cc0371b0..0000000000
--- a/lib/tv/doc/src/ref_man.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE application SYSTEM "application.dtd">
-
-<application xmlns:xi="http://www.w3.org/2001/XInclude">
- <header>
- <copyright>
- <year>1997</year><year>2013</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
deleted file mode 100644
index c09c84322f..0000000000
--- a/lib/tv/doc/src/set_poll_int.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/doc/src/set_poll_int.ps b/lib/tv/doc/src/set_poll_int.ps
deleted file mode 100644
index cceb30486f..0000000000
--- a/lib/tv/doc/src/set_poll_int.ps
+++ /dev/null
@@ -1,483 +0,0 @@
-%!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
deleted file mode 100644
index 13757dff59..0000000000
--- a/lib/tv/doc/src/table_visualizer_chapter.xml
+++ /dev/null
@@ -1,658 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE chapter SYSTEM "chapter.dtd">
-
-<chapter>
- <header>
- <copyright>
- <year>1997</year><year>2013</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>
- <warning>
- <p>
- The TV application has been superseded by the Observer application.
- TV will be removed in R16.
- </p>
- </warning>
- <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
deleted file mode 100644
index d78cf7d8ed..0000000000
--- a/lib/tv/doc/src/tv.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/doc/src/tv.xml b/lib/tv/doc/src/tv.xml
deleted file mode 100644
index 4a46003a71..0000000000
--- a/lib/tv/doc/src/tv.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE erlref SYSTEM "erlref.dtd">
-
-<erlref>
- <header>
- <copyright>
- <year>1997</year>
- <year>2013</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>
- <warning>
- <p>
- The TV application has been superseded by the Observer application.
- TV will be removed in R16.
- </p>
- </warning>
- <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
deleted file mode 100644
index 7fae7f30cf..0000000000
--- a/lib/tv/doc/src/tv_create_table.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/doc/src/tv_create_table.ps b/lib/tv/doc/src/tv_create_table.ps
deleted file mode 100644
index 0a3b24bcf5..0000000000
--- a/lib/tv/doc/src/tv_create_table.ps
+++ /dev/null
@@ -1,1120 +0,0 @@
-%!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
deleted file mode 100644
index fbbdcab515..0000000000
--- a/lib/tv/doc/src/tv_record_editor_mnesia.gif
+++ /dev/null
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
deleted file mode 100644
index b4d19f963f..0000000000
--- a/lib/tv/doc/src/tv_record_editor_mnesia.ps
+++ /dev/null
@@ -1,897 +0,0 @@
-%!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
deleted file mode 100644
index bc80eb34f1..0000000000
--- a/lib/tv/doc/src/tv_row_marked.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/doc/src/tv_row_marked.ps b/lib/tv/doc/src/tv_row_marked.ps
deleted file mode 100644
index 99631c5046..0000000000
--- a/lib/tv/doc/src/tv_row_marked.ps
+++ /dev/null
@@ -1,1611 +0,0 @@
-%!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
deleted file mode 100644
index 9b3bc87959..0000000000
--- a/lib/tv/doc/src/tv_row_marked_popup.gif
+++ /dev/null
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
deleted file mode 100644
index 7a909110d9..0000000000
--- a/lib/tv/doc/src/tv_row_marked_popup.ps
+++ /dev/null
@@ -1,1324 +0,0 @@
-%!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
deleted file mode 100644
index 3e615b4875..0000000000
--- a/lib/tv/doc/src/tv_search_result.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/doc/src/tv_search_result.ps b/lib/tv/doc/src/tv_search_result.ps
deleted file mode 100644
index 14d0331a8f..0000000000
--- a/lib/tv/doc/src/tv_search_result.ps
+++ /dev/null
@@ -1,2739 +0,0 @@
-%!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
deleted file mode 100644
index d6e72dda2f..0000000000
--- a/lib/tv/doc/src/tv_search_window.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/doc/src/tv_search_window.ps b/lib/tv/doc/src/tv_search_window.ps
deleted file mode 100644
index a6dd2ef9fc..0000000000
--- a/lib/tv/doc/src/tv_search_window.ps
+++ /dev/null
@@ -1,975 +0,0 @@
-%!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
deleted file mode 100644
index 7a8a0cf6ce..0000000000
--- a/lib/tv/doc/src/tv_start.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/doc/src/tv_start.ps b/lib/tv/doc/src/tv_start.ps
deleted file mode 100644
index 7dae8e4a5a..0000000000
--- a/lib/tv/doc/src/tv_start.ps
+++ /dev/null
@@ -1,828 +0,0 @@
-%!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
deleted file mode 100644
index 0ad04331cd..0000000000
--- a/lib/tv/doc/src/tv_start_mnesia.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/doc/src/tv_start_mnesia.ps b/lib/tv/doc/src/tv_start_mnesia.ps
deleted file mode 100644
index a90185089d..0000000000
--- a/lib/tv/doc/src/tv_start_mnesia.ps
+++ /dev/null
@@ -1,835 +0,0 @@
-%!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
deleted file mode 100644
index 897686e5ef..0000000000
--- a/lib/tv/doc/src/tv_start_other_node.gif
+++ /dev/null
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
deleted file mode 100644
index 34477bed6c..0000000000
--- a/lib/tv/doc/src/tv_start_other_node.ps
+++ /dev/null
@@ -1,2316 +0,0 @@
-%!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
deleted file mode 100644
index 390f98541f..0000000000
--- a/lib/tv/doc/src/tv_start_pid_sorted.gif
+++ /dev/null
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
deleted file mode 100644
index 13ef2ed027..0000000000
--- a/lib/tv/doc/src/tv_start_pid_sorted.ps
+++ /dev/null
@@ -1,1853 +0,0 @@
-%!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
deleted file mode 100644
index 3d9502b00c..0000000000
--- a/lib/tv/doc/src/tv_start_system.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/doc/src/tv_start_system.ps b/lib/tv/doc/src/tv_start_system.ps
deleted file mode 100644
index 5c115328c5..0000000000
--- a/lib/tv/doc/src/tv_start_system.ps
+++ /dev/null
@@ -1,1330 +0,0 @@
-%!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
deleted file mode 100644
index 38b69deb8e..0000000000
--- a/lib/tv/doc/src/tv_start_system_unreadable.gif
+++ /dev/null
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
deleted file mode 100644
index 4486557837..0000000000
--- a/lib/tv/doc/src/tv_start_system_unreadable.ps
+++ /dev/null
@@ -1,1377 +0,0 @@
-%!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
deleted file mode 100644
index 9c7cb042ff..0000000000
--- a/lib/tv/doc/src/tv_table_browser.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/doc/src/tv_table_browser.ps b/lib/tv/doc/src/tv_table_browser.ps
deleted file mode 100644
index e2b195a2e5..0000000000
--- a/lib/tv/doc/src/tv_table_browser.ps
+++ /dev/null
@@ -1,2024 +0,0 @@
-%!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
deleted file mode 100644
index 547497487d..0000000000
--- a/lib/tv/doc/src/tv_table_browser_updated.gif
+++ /dev/null
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
deleted file mode 100644
index 0a944565e8..0000000000
--- a/lib/tv/doc/src/tv_table_browser_updated.ps
+++ /dev/null
@@ -1,2124 +0,0 @@
-%!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
deleted file mode 100644
index 1786426f4d..0000000000
--- a/lib/tv/doc/src/tv_table_loaded.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/doc/src/tv_table_loaded.ps b/lib/tv/doc/src/tv_table_loaded.ps
deleted file mode 100644
index 3f0cf9d707..0000000000
--- a/lib/tv/doc/src/tv_table_loaded.ps
+++ /dev/null
@@ -1,1430 +0,0 @@
-%!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
deleted file mode 100644
index fd69e3cc58..0000000000
--- a/lib/tv/doc/src/tv_table_sorted.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/doc/src/tv_table_sorted.ps b/lib/tv/doc/src/tv_table_sorted.ps
deleted file mode 100644
index 681b2f4d19..0000000000
--- a/lib/tv/doc/src/tv_table_sorted.ps
+++ /dev/null
@@ -1,1502 +0,0 @@
-%!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
deleted file mode 100644
index 96af52360e..0000000000
--- a/lib/tv/doc/src/warning.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/ebin/.gitignore b/lib/tv/ebin/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/tv/ebin/.gitignore
+++ /dev/null
diff --git a/lib/tv/info b/lib/tv/info
deleted file mode 100644
index 63e88b04b5..0000000000
--- a/lib/tv/info
+++ /dev/null
@@ -1,2 +0,0 @@
-group: tools
-short: An ETS and MNESIA graphical table visualizer
diff --git a/lib/tv/priv/Makefile b/lib/tv/priv/Makefile
deleted file mode 100644
index 679a76fe88..0000000000
--- a/lib/tv/priv/Makefile
+++ /dev/null
@@ -1,72 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1997-2012. 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
deleted file mode 100644
index 58db123a00..0000000000
--- a/lib/tv/priv/arrow_left.xbm
+++ /dev/null
@@ -1,5 +0,0 @@
-#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
deleted file mode 100644
index 7eca80303d..0000000000
--- a/lib/tv/priv/arrow_right.xbm
+++ /dev/null
@@ -1,5 +0,0 @@
-#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
deleted file mode 100644
index dc13f274c0..0000000000
--- a/lib/tv/priv/edit1.xbm
+++ /dev/null
@@ -1,12 +0,0 @@
-#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
deleted file mode 100644
index 8d06e98065..0000000000
--- a/lib/tv/priv/erlang.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/priv/help.xbm b/lib/tv/priv/help.xbm
deleted file mode 100644
index b2cbc541e4..0000000000
--- a/lib/tv/priv/help.xbm
+++ /dev/null
@@ -1,8 +0,0 @@
-#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
deleted file mode 100644
index d5157661c2..0000000000
--- a/lib/tv/priv/info.xbm
+++ /dev/null
@@ -1,8 +0,0 @@
-#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
deleted file mode 100644
index 222be32219..0000000000
--- a/lib/tv/priv/key.xbm
+++ /dev/null
@@ -1,6 +0,0 @@
-#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
deleted file mode 100644
index 38ef738768..0000000000
--- a/lib/tv/priv/more.xbm
+++ /dev/null
@@ -1,8 +0,0 @@
-#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
deleted file mode 100644
index 90568dd828..0000000000
--- a/lib/tv/priv/no_sort.xbm
+++ /dev/null
@@ -1,8 +0,0 @@
-#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
deleted file mode 100644
index fe77d2c38b..0000000000
--- a/lib/tv/priv/open.xbm
+++ /dev/null
@@ -1,8 +0,0 @@
-#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
deleted file mode 100644
index 6ec1dbeaf2..0000000000
--- a/lib/tv/priv/poll.xbm
+++ /dev/null
@@ -1,8 +0,0 @@
-#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
deleted file mode 100644
index 3498e66b0d..0000000000
--- a/lib/tv/priv/search.xbm
+++ /dev/null
@@ -1,8 +0,0 @@
-#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
deleted file mode 100644
index 576564b817..0000000000
--- a/lib/tv/priv/sort.xbm
+++ /dev/null
@@ -1,8 +0,0 @@
-#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
deleted file mode 100644
index b58e6308f5..0000000000
--- a/lib/tv/priv/sort_reverse.xbm
+++ /dev/null
@@ -1,8 +0,0 @@
-#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
deleted file mode 100644
index 44daac2912..0000000000
--- a/lib/tv/priv/tv.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/priv/tv.tool b/lib/tv/priv/tv.tool
deleted file mode 100644
index 770424d283..0000000000
--- a/lib/tv/priv/tv.tool
+++ /dev/null
@@ -1,23 +0,0 @@
-%%
-%% %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
deleted file mode 100644
index 3d680c1eaf..0000000000
--- a/lib/tv/src/Makefile
+++ /dev/null
@@ -1,135 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1997-2012. 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
- $(vsn_verbose)sed -e 's;%VSN%;$(VSN);' $< > $@
-
-$(APPUP_TARGET): $(APPUP_SRC) ../vsn.mk
- $(vsn_verbose)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
deleted file mode 100644
index e76c587868..0000000000
--- a/lib/tv/src/tv.app.src
+++ /dev/null
@@ -1,56 +0,0 @@
-%%
-%% %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
deleted file mode 100644
index 0d918b6081..0000000000
--- a/lib/tv/src/tv.appup.src
+++ /dev/null
@@ -1,18 +0,0 @@
-%%
-%% %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
deleted file mode 100644
index 70bc945c63..0000000000
--- a/lib/tv/src/tv.erl
+++ /dev/null
@@ -1,38 +0,0 @@
-%%
-%% %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
deleted file mode 100644
index d57960e303..0000000000
--- a/lib/tv/src/tv_comm_func.erl
+++ /dev/null
@@ -1,77 +0,0 @@
-%%
-%% %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
deleted file mode 100644
index 75537418b3..0000000000
--- a/lib/tv/src/tv_db.erl
+++ /dev/null
@@ -1,1271 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. 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).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,start,0}},
- {nowarn_deprecated_function,{gs,window,3}}]).
-
-
-
--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
deleted file mode 100644
index d2cb8adee5..0000000000
--- a/lib/tv/src/tv_db_int_def.hrl
+++ /dev/null
@@ -1,80 +0,0 @@
-%%
-%% %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
deleted file mode 100644
index edfa57df04..0000000000
--- a/lib/tv/src/tv_db_search.erl
+++ /dev/null
@@ -1,475 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2012. 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).
--compile([{nowarn_deprecated_function,{gs,button,3}},
- {nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,entry,3}},
- {nowarn_deprecated_function,{gs,frame,2}},
- {nowarn_deprecated_function,{gs,label,2}},
- {nowarn_deprecated_function,{gs,label,3}},
- {nowarn_deprecated_function,{gs,listbox,3}},
- {nowarn_deprecated_function,{gs,radiobutton,3}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,start,0}},
- {nowarn_deprecated_function,{gs,window,3}}]).
-
-
-
--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 re:compile(Str) of
- {ok, RegExp} ->
- {ok, RegExp};
- {error, _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 re:run(ListToSearch, Pattern, [{capture,none}]) of
- match ->
- found;
- nomatch ->
- not_found
- 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
deleted file mode 100644
index 3675c7b413..0000000000
--- a/lib/tv/src/tv_db_sort.erl
+++ /dev/null
@@ -1,141 +0,0 @@
-%%
-%% %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
deleted file mode 100644
index ec2fde30ac..0000000000
--- a/lib/tv/src/tv_ets_rpc.erl
+++ /dev/null
@@ -1,140 +0,0 @@
-%%
-%% %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
deleted file mode 100644
index 32f111c9a1..0000000000
--- a/lib/tv/src/tv_etsread.erl
+++ /dev/null
@@ -1,770 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. 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).
--compile([{nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,start,0}},
- {nowarn_deprecated_function,{gs,window,3}}]).
-
-
-
--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
deleted file mode 100644
index c744888c38..0000000000
--- a/lib/tv/src/tv_info.erl
+++ /dev/null
@@ -1,884 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. 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).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,create,3}},
- {nowarn_deprecated_function,{gs,frame,2}},
- {nowarn_deprecated_function,{gs,label,2}},
- {nowarn_deprecated_function,{gs,listbox,2}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,start,0}},
- {nowarn_deprecated_function,{gs,window,3}}]).
-
-
-
--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
deleted file mode 100644
index 6d4263c51b..0000000000
--- a/lib/tv/src/tv_int_def.hrl
+++ /dev/null
@@ -1,56 +0,0 @@
-%%
-%% %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
deleted file mode 100644
index 75ce8eca3b..0000000000
--- a/lib/tv/src/tv_int_msg.hrl
+++ /dev/null
@@ -1,504 +0,0 @@
-%%
-%% %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
deleted file mode 100644
index 5457575b7d..0000000000
--- a/lib/tv/src/tv_io_lib.erl
+++ /dev/null
@@ -1,223 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2010. 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) -> lists:flatten(io_lib:write(Term));
-write(Term, _D) when is_pid(Term) -> pid_to_list(Term);
-write(Term, _D) when is_reference(Term) -> io_lib:write(Term);
-write(Term, _D) when is_binary(Term), byte_size(Term) > 100 -> "#Bin";
-write(Term, _D) when is_binary(Term) -> "<<\"" ++ binary_to_list(Term) ++ "\">>";
-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
deleted file mode 100644
index e043d9296e..0000000000
--- a/lib/tv/src/tv_io_lib_format.erl
+++ /dev/null
@@ -1,386 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2010. 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, erlang: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, erlang: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.
-
-%% 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
deleted file mode 100644
index c19277d006..0000000000
--- a/lib/tv/src/tv_io_lib_pretty.erl
+++ /dev/null
@@ -1,171 +0,0 @@
-%%
-%% %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
deleted file mode 100644
index 9f66917362..0000000000
--- a/lib/tv/src/tv_ip.erl
+++ /dev/null
@@ -1,242 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. 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).
--compile([{nowarn_deprecated_function,{gs,canvas,2}},
- {nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,create,3}},
- {nowarn_deprecated_function,{gs,label,2}},
- {nowarn_deprecated_function,{gs,start,0}},
- {nowarn_deprecated_function,{gs,window,3}}]).
-
-
-
--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
deleted file mode 100644
index b6ffbd7c49..0000000000
--- a/lib/tv/src/tv_main.erl
+++ /dev/null
@@ -1,1821 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2012. 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).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,frame,3}},
- {nowarn_deprecated_function,{gs,grid,3}},
- {nowarn_deprecated_function,{gs,gridline,2}},
- {nowarn_deprecated_function,{gs,label,3}},
- {nowarn_deprecated_function,{gs,menu,2}},
- {nowarn_deprecated_function,{gs,menubar,3}},
- {nowarn_deprecated_function,{gs,menubutton,2}},
- {nowarn_deprecated_function,{gs,menuitem,2}},
- {nowarn_deprecated_function,{gs,menuitem,3}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,start,0}},
- {nowarn_deprecated_function,{gs,window,3}}]).
-
-
-
--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
deleted file mode 100644
index c9db1d9484..0000000000
--- a/lib/tv/src/tv_main.hrl
+++ /dev/null
@@ -1,285 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2013. 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,
- 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
deleted file mode 100644
index b2434fcdd3..0000000000
--- a/lib/tv/src/tv_mnesia_rpc.erl
+++ /dev/null
@@ -1,106 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2011. 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', {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
deleted file mode 100644
index 779835d78a..0000000000
--- a/lib/tv/src/tv_new_table.erl
+++ /dev/null
@@ -1,666 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2012. 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).
--compile([{nowarn_deprecated_function,{gs,button,3}},
- {nowarn_deprecated_function,{gs,checkbutton,3}},
- {nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,entry,3}},
- {nowarn_deprecated_function,{gs,frame,3}},
- {nowarn_deprecated_function,{gs,label,2}},
- {nowarn_deprecated_function,{gs,radiobutton,3}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,start,0}},
- {nowarn_deprecated_function,{gs,window,3}}]).
-
-
-
--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
deleted file mode 100644
index 8376c4a7aa..0000000000
--- a/lib/tv/src/tv_nodewin.erl
+++ /dev/null
@@ -1,412 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2012. 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).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,listbox,3}},
- {nowarn_deprecated_function,{gs,menu,3}},
- {nowarn_deprecated_function,{gs,menubar,3}},
- {nowarn_deprecated_function,{gs,menubutton,3}},
- {nowarn_deprecated_function,{gs,menuitem,2}},
- {nowarn_deprecated_function,{gs,start,0}},
- {nowarn_deprecated_function,{gs,window,3}}]).
-
-
-
--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
deleted file mode 100644
index 81e7e7e2d1..0000000000
--- a/lib/tv/src/tv_pb.erl
+++ /dev/null
@@ -1,663 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. 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).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,frame,2}}]).
-
-
-
--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 = erlang: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).
diff --git a/lib/tv/src/tv_pb_funcs.erl b/lib/tv/src/tv_pb_funcs.erl
deleted file mode 100644
index 24d1120597..0000000000
--- a/lib/tv/src/tv_pb_funcs.erl
+++ /dev/null
@@ -1,1056 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. 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).
--compile([{nowarn_deprecated_function,{gs,button,2}},
- {nowarn_deprecated_function,{gs,canvas,2}},
- {nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,create,3}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,read,2}}]).
-
-
-
--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
deleted file mode 100644
index 0fe9df193a..0000000000
--- a/lib/tv/src/tv_pb_int_def.hrl
+++ /dev/null
@@ -1,99 +0,0 @@
-%%
-%% %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
deleted file mode 100644
index e0612e13eb..0000000000
--- a/lib/tv/src/tv_pc.erl
+++ /dev/null
@@ -1,795 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. 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).
--compile([{nowarn_deprecated_function,{gs,config,2}}]).
-
-
-
--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
deleted file mode 100644
index 3fc3ded565..0000000000
--- a/lib/tv/src/tv_pc_graph_ctrl.erl
+++ /dev/null
@@ -1,120 +0,0 @@
-%%
-%% %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
deleted file mode 100644
index 22f8dcd5d8..0000000000
--- a/lib/tv/src/tv_pc_int_def.hrl
+++ /dev/null
@@ -1,62 +0,0 @@
-%%
-%% %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
deleted file mode 100644
index 64a06743b7..0000000000
--- a/lib/tv/src/tv_pc_menu_handling.erl
+++ /dev/null
@@ -1,489 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. 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).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,start,0}},
- {nowarn_deprecated_function,{gs,window,3}}]).
-
-
-
--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
deleted file mode 100644
index 6c38148fdd..0000000000
--- a/lib/tv/src/tv_pd.erl
+++ /dev/null
@@ -1,1127 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. 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).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,start,0}},
- {nowarn_deprecated_function,{gs,window,3}}]).
-
-
-
--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
deleted file mode 100644
index 804180da16..0000000000
--- a/lib/tv/src/tv_pd_display.erl
+++ /dev/null
@@ -1,1066 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. 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).
--compile([{nowarn_deprecated_function,{gs,button,2}},
- {nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,editor,2}},
- {nowarn_deprecated_function,{gs,entry,3}},
- {nowarn_deprecated_function,{gs,frame,2}},
- {nowarn_deprecated_function,{gs,label,2}},
- {nowarn_deprecated_function,{gs,read,2}}]).
-
-
-
-
--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
deleted file mode 100644
index aab40e2bba..0000000000
--- a/lib/tv/src/tv_pd_frames.erl
+++ /dev/null
@@ -1,482 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. 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).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,frame,2}}]).
-
-
-
--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
deleted file mode 100644
index 2c76bef892..0000000000
--- a/lib/tv/src/tv_pd_int_def.hrl
+++ /dev/null
@@ -1,139 +0,0 @@
-%%
-%% %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
deleted file mode 100644
index faf23a9376..0000000000
--- a/lib/tv/src/tv_pd_int_msg.hrl
+++ /dev/null
@@ -1,433 +0,0 @@
-%%
-%% %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
deleted file mode 100644
index 04af2bb981..0000000000
--- a/lib/tv/src/tv_pd_scale.erl
+++ /dev/null
@@ -1,305 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. 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).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,scale,2}}]).
-
-
-
--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
deleted file mode 100644
index 7194cfb756..0000000000
--- a/lib/tv/src/tv_pg.erl
+++ /dev/null
@@ -1,430 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. 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).
--compile([{nowarn_deprecated_function,{gs,config,2}}]).
-
-
-
--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
deleted file mode 100644
index d037b42294..0000000000
--- a/lib/tv/src/tv_pg_gridfcns.erl
+++ /dev/null
@@ -1,1918 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. 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).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,frame,2}},
- {nowarn_deprecated_function,{gs,label,2}},
- {nowarn_deprecated_function,{gs,read,2}}]).
-
-
-
-
--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 = erlang: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(safe_nthtail(NofColsShown, NewColIds),
- safe_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 = erlang:min(MaxColWidth, erlang: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 | safe_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(safe_nthtail(NofColsShown, NewColIds),
- safe_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 = erlang:min(MaxW, erlang: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 ++ safe_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 ->
- safe_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:
-%%======================================================================
-
-
-safe_nthtail(_, []) -> [];
-safe_nthtail(1, [_|T]) -> T;
-safe_nthtail(N, [_|T]) when N > 1 ->
- safe_nthtail(N - 1, T);
-safe_nthtail(0, L) when is_list(L) -> L.
diff --git a/lib/tv/src/tv_pg_int_def.hrl b/lib/tv/src/tv_pg_int_def.hrl
deleted file mode 100644
index 6f88053d47..0000000000
--- a/lib/tv/src/tv_pg_int_def.hrl
+++ /dev/null
@@ -1,92 +0,0 @@
-%%
-%% %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
deleted file mode 100644
index e33d398898..0000000000
--- a/lib/tv/src/tv_poll_dialog.erl
+++ /dev/null
@@ -1,363 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. 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).
--compile([{nowarn_deprecated_function,{gs,button,2}},
- {nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,label,2}},
- {nowarn_deprecated_function,{gs,radiobutton,2}},
- {nowarn_deprecated_function,{gs,scale,2}},
- {nowarn_deprecated_function,{gs,start,0}},
- {nowarn_deprecated_function,{gs,window,2}}]).
-
-
--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
deleted file mode 100644
index 5f88c9f1fd..0000000000
--- a/lib/tv/src/tv_pw.erl
+++ /dev/null
@@ -1,328 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. 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).
--compile([{nowarn_deprecated_function,{gs,config,2}}]).
-
-
-
--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
deleted file mode 100644
index fabfbc2762..0000000000
--- a/lib/tv/src/tv_pw_int_def.hrl
+++ /dev/null
@@ -1,55 +0,0 @@
-%%
-%% %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
deleted file mode 100644
index 81f29dc41c..0000000000
--- a/lib/tv/src/tv_pw_window.erl
+++ /dev/null
@@ -1,277 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. 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).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,create,3}},
- {nowarn_deprecated_function,{gs,menuitem,3}},
- {nowarn_deprecated_function,{gs,start,0}}]).
-
-
-
--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
deleted file mode 100644
index 3f9ea8b5f5..0000000000
--- a/lib/tv/src/tv_rec_edit.erl
+++ /dev/null
@@ -1,754 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2012. 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).
--compile([{nowarn_deprecated_function,{gs,button,2}},
- {nowarn_deprecated_function,{gs,button,3}},
- {nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,entry,3}},
- {nowarn_deprecated_function,{gs,frame,2}},
- {nowarn_deprecated_function,{gs,frame,3}},
- {nowarn_deprecated_function,{gs,label,2}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,start,0}},
- {nowarn_deprecated_function,{gs,window,3}}]).
-
-
-
--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
deleted file mode 100644
index bccac6c236..0000000000
--- a/lib/tv/src/tv_table_owner.erl
+++ /dev/null
@@ -1,122 +0,0 @@
-%%
-%% %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
deleted file mode 100644
index 799e3994cb..0000000000
--- a/lib/tv/src/tv_utils.erl
+++ /dev/null
@@ -1,179 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2012. 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).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,create,3}},
- {nowarn_deprecated_function,{gs,destroy,1}}]).
-
-
-
--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
deleted file mode 100644
index 59d124a3b7..0000000000
--- a/lib/tv/vsn.mk
+++ /dev/null
@@ -1 +0,0 @@
-TV_VSN = 2.1.4.10